Message ID | 20190625001406.6437-1-ssuryaextr@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] ipv4: Use return value of inet_iif() for __raw_v4_lookup in the while loop | expand |
On 6/24/19 6:14 PM, Stephen Suryaputra wrote: > In commit 19e4e768064a8 ("ipv4: Fix raw socket lookup for local > traffic"), the dif argument to __raw_v4_lookup() is coming from the > returned value of inet_iif() but the change was done only for the first > lookup. Subsequent lookups in the while loop still use skb->dev->ifIndex. > > Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> > --- > net/ipv4/raw.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c > index 0b8e06ca75d6..40a6abbc9cf6 100644 > --- a/net/ipv4/raw.c > +++ b/net/ipv4/raw.c > @@ -197,7 +197,7 @@ static int raw_v4_input(struct sk_buff *skb, const struct iphdr *iph, int hash) > } > sk = __raw_v4_lookup(net, sk_next(sk), iph->protocol, > iph->saddr, iph->daddr, > - skb->dev->ifindex, sdif); > + dif, sdif); > } > out: > read_unlock(&raw_v4_hashinfo.lock); > ugh, missed that in 19e4e768064a8; thanks for the patch. Reviewed-by: David Ahern <dsahern@gmail.com>
From: Stephen Suryaputra <ssuryaextr@gmail.com> Date: Mon, 24 Jun 2019 20:14:06 -0400 > In commit 19e4e768064a8 ("ipv4: Fix raw socket lookup for local > traffic"), the dif argument to __raw_v4_lookup() is coming from the > returned value of inet_iif() but the change was done only for the first > lookup. Subsequent lookups in the while loop still use skb->dev->ifIndex. > > Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> Applied and queued up for -stable. I added the appropriate Fixes: tag, please do so next time.
On Tue, 25 Jun 2019 12:47:38 -0700 (PDT) David Miller <davem@davemloft.net> wrote: > From: Stephen Suryaputra <ssuryaextr@gmail.com> > Date: Mon, 24 Jun 2019 20:14:06 -0400 > > > In commit 19e4e768064a8 ("ipv4: Fix raw socket lookup for local > > traffic"), the dif argument to __raw_v4_lookup() is coming from the > > returned value of inet_iif() but the change was done only for the first > > lookup. Subsequent lookups in the while loop still use skb->dev->ifIndex. > > > > Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> > > Applied and queued up for -stable. > > I added the appropriate Fixes: tag, please do so next time. I was about to point that out, but then I noticed that this doesn't actually fix 19e4e768064a8 ("ipv4: Fix raw socket lookup for local traffic"), it's just related as it fixes the same issue in another (very likely) path in the same function. I think this should have been: Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") I *guess* for -stable purposes the effect is the same.
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 0b8e06ca75d6..40a6abbc9cf6 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -197,7 +197,7 @@ static int raw_v4_input(struct sk_buff *skb, const struct iphdr *iph, int hash) } sk = __raw_v4_lookup(net, sk_next(sk), iph->protocol, iph->saddr, iph->daddr, - skb->dev->ifindex, sdif); + dif, sdif); } out: read_unlock(&raw_v4_hashinfo.lock);
In commit 19e4e768064a8 ("ipv4: Fix raw socket lookup for local traffic"), the dif argument to __raw_v4_lookup() is coming from the returned value of inet_iif() but the change was done only for the first lookup. Subsequent lookups in the while loop still use skb->dev->ifIndex. Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> --- net/ipv4/raw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)