mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
ipv4: add a sock pointer to dst->output() path.
In the dst->output() path for ipv4, the code assumes the skb it has to
transmit is attached to an inet socket, specifically via
ip_mc_output() : The sk_mc_loop() test triggers a WARN_ON() when the
provider of the packet is an AF_PACKET socket.
The dst->output() method gets an additional 'struct sock *sk'
parameter. This needs a cascade of changes so that this parameter can
be propagated from vxlan to final consumer.
Fixes: 8f646c922d ("vxlan: keep original skb ownership")
Reported-by: lucien xin <[email protected]>
Signed-off-by: Eric Dumazet <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
b0270e9101
commit
aad88724c9
19 changed files with 74 additions and 46 deletions
|
|
@ -752,7 +752,7 @@ static int dn_to_neigh_output(struct sk_buff *skb)
|
|||
return n->output(n, skb);
|
||||
}
|
||||
|
||||
static int dn_output(struct sk_buff *skb)
|
||||
static int dn_output(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
struct dst_entry *dst = skb_dst(skb);
|
||||
struct dn_route *rt = (struct dn_route *)dst;
|
||||
|
|
@ -838,6 +838,18 @@ drop:
|
|||
* Used to catch bugs. This should never normally get
|
||||
* called.
|
||||
*/
|
||||
static int dn_rt_bug_sk(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
struct dn_skb_cb *cb = DN_SKB_CB(skb);
|
||||
|
||||
net_dbg_ratelimited("dn_rt_bug: skb from:%04x to:%04x\n",
|
||||
le16_to_cpu(cb->src), le16_to_cpu(cb->dst));
|
||||
|
||||
kfree_skb(skb);
|
||||
|
||||
return NET_RX_DROP;
|
||||
}
|
||||
|
||||
static int dn_rt_bug(struct sk_buff *skb)
|
||||
{
|
||||
struct dn_skb_cb *cb = DN_SKB_CB(skb);
|
||||
|
|
@ -1463,7 +1475,7 @@ make_route:
|
|||
|
||||
rt->n = neigh;
|
||||
rt->dst.lastuse = jiffies;
|
||||
rt->dst.output = dn_rt_bug;
|
||||
rt->dst.output = dn_rt_bug_sk;
|
||||
switch (res.type) {
|
||||
case RTN_UNICAST:
|
||||
rt->dst.input = dn_forward;
|
||||
|
|
|
|||
Loading…
Reference in a new issue