[PATCH net] ipv4: Don't override return code from ip_route_input_noref()

Subsystems: networking [general], networking [ipv4/ipv6], the rest

STALE3331d

4 messages, 4 authors, 2017-09-03 · open the first message on its own page

[PATCH net] ipv4: Don't override return code from ip_route_input_noref()

From: Stefano Brivio <hidden>
Date: 2017-08-31 16:12:30

After ip_route_input() calls ip_route_input_noref(), another
check on skb_dst() is done, but if this fails, we shouldn't
override the return code from ip_route_input_noref(), as it
could have been more specific (i.e. -EHOSTUNREACH).

This also saves one call to skb_dst_force_safe() and one to
skb_dst() in case the ip_route_input_noref() check fails.

Reported-by: Sabrina Dubroca <redacted>
Fixes: ad65a2f05695 ("ipv4: call dst_hold_safe() properly")
Signed-off-by: Stefano Brivio <redacted>
---
 include/net/route.h | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/include/net/route.h b/include/net/route.h
index cb0a76d9dde1..1b09a9368c68 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -189,10 +189,11 @@ static inline int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,
 
 	rcu_read_lock();
 	err = ip_route_input_noref(skb, dst, src, tos, devin);
-	if (!err)
+	if (!err) {
 		skb_dst_force_safe(skb);
-	if (!skb_dst(skb))
-		err = -EINVAL;
+		if (!skb_dst(skb))
+			err = -EINVAL;
+	}
 	rcu_read_unlock();
 
 	return err;
-- 
2.9.4

Re: [PATCH net] ipv4: Don't override return code from ip_route_input_noref()

From: Wei Wang <hidden>
Date: 2017-08-31 16:39:33

After ip_route_input() calls ip_route_input_noref(), another
check on skb_dst() is done, but if this fails, we shouldn't
override the return code from ip_route_input_noref(), as it
could have been more specific (i.e. -EHOSTUNREACH).

This also saves one call to skb_dst_force_safe() and one to
skb_dst() in case the ip_route_input_noref() check fails.

Reported-by: Sabrina Dubroca <redacted>
Fixes: ad65a2f05695 ("ipv4: call dst_hold_safe() properly")
Signed-off-by: Stefano Brivio <redacted>
Acked-by: Wei Wang <redacted>


On Thu, Aug 31, 2017 at 9:11 AM, Stefano Brivio [off-list ref] wrote:
quoted hunk
After ip_route_input() calls ip_route_input_noref(), another
check on skb_dst() is done, but if this fails, we shouldn't
override the return code from ip_route_input_noref(), as it
could have been more specific (i.e. -EHOSTUNREACH).

This also saves one call to skb_dst_force_safe() and one to
skb_dst() in case the ip_route_input_noref() check fails.

Reported-by: Sabrina Dubroca <redacted>
Fixes: ad65a2f05695 ("ipv4: call dst_hold_safe() properly")
Signed-off-by: Stefano Brivio <redacted>
---
 include/net/route.h | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/include/net/route.h b/include/net/route.h
index cb0a76d9dde1..1b09a9368c68 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -189,10 +189,11 @@ static inline int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,

        rcu_read_lock();
        err = ip_route_input_noref(skb, dst, src, tos, devin);
-       if (!err)
+       if (!err) {
                skb_dst_force_safe(skb);
-       if (!skb_dst(skb))
-               err = -EINVAL;
+               if (!skb_dst(skb))
+                       err = -EINVAL;
+       }
        rcu_read_unlock();

        return err;
--
2.9.4

Re: [PATCH net] ipv4: Don't override return code from ip_route_input_noref()

From: Sabrina Dubroca <sd@queasysnail.net>
Date: 2017-08-31 23:45:10

2017-08-31, 18:11:41 +0200, Stefano Brivio wrote:
After ip_route_input() calls ip_route_input_noref(), another
check on skb_dst() is done, but if this fails, we shouldn't
override the return code from ip_route_input_noref(), as it
could have been more specific (i.e. -EHOSTUNREACH).

This also saves one call to skb_dst_force_safe() and one to
skb_dst() in case the ip_route_input_noref() check fails.

Reported-by: Sabrina Dubroca <redacted>
Fixes: ad65a2f05695 ("ipv4: call dst_hold_safe() properly")
That should be instead:

Fixes: 9df16efadd2a ("ipv4: call dst_hold_safe() properly")

Acked-by: Sabrina Dubroca <sd@queasysnail.net>

-- 
Sabrina

Re: [PATCH net] ipv4: Don't override return code from ip_route_input_noref()

From: David Miller <davem@davemloft.net>
Date: 2017-09-03 17:55:49

From: Sabrina Dubroca <sd@queasysnail.net>
Date: Fri, 1 Sep 2017 01:45:06 +0200
2017-08-31, 18:11:41 +0200, Stefano Brivio wrote:
quoted
After ip_route_input() calls ip_route_input_noref(), another
check on skb_dst() is done, but if this fails, we shouldn't
override the return code from ip_route_input_noref(), as it
could have been more specific (i.e. -EHOSTUNREACH).

This also saves one call to skb_dst_force_safe() and one to
skb_dst() in case the ip_route_input_noref() check fails.

Reported-by: Sabrina Dubroca <redacted>
Fixes: ad65a2f05695 ("ipv4: call dst_hold_safe() properly")
That should be instead:

Fixes: 9df16efadd2a ("ipv4: call dst_hold_safe() properly")

Acked-by: Sabrina Dubroca <sd@queasysnail.net>
Applied with fixed Fixes: tag, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help