| From 40fc3054b45820c28ea3c65e2c86d041dc244a8a Mon Sep 17 00:00:00 2001 |
| From: Vadim Fedorenko <vfedorenko@novek.ru> |
| Date: Fri, 2 Jul 2021 02:47:00 +0300 |
| Subject: net: ipv6: fix return value of ip6_skb_dst_mtu |
| |
| From: Vadim Fedorenko <vfedorenko@novek.ru> |
| |
| commit 40fc3054b45820c28ea3c65e2c86d041dc244a8a upstream. |
| |
| Commit 628a5c561890 ("[INET]: Add IP(V6)_PMTUDISC_RPOBE") introduced |
| ip6_skb_dst_mtu with return value of signed int which is inconsistent |
| with actually returned values. Also 2 users of this function actually |
| assign its value to unsigned int variable and only __xfrm6_output |
| assigns result of this function to signed variable but actually uses |
| as unsigned in further comparisons and calls. Change this function |
| to return unsigned int value. |
| |
| Fixes: 628a5c561890 ("[INET]: Add IP(V6)_PMTUDISC_RPOBE") |
| Reviewed-by: David Ahern <dsahern@kernel.org> |
| Signed-off-by: Vadim Fedorenko <vfedorenko@novek.ru> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| include/net/ip6_route.h | 2 +- |
| net/ipv6/xfrm6_output.c | 2 +- |
| 2 files changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/include/net/ip6_route.h |
| +++ b/include/net/ip6_route.h |
| @@ -241,7 +241,7 @@ static inline bool ipv6_anycast_destinat |
| int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb, |
| int (*output)(struct net *, struct sock *, struct sk_buff *)); |
| |
| -static inline int ip6_skb_dst_mtu(struct sk_buff *skb) |
| +static inline unsigned int ip6_skb_dst_mtu(struct sk_buff *skb) |
| { |
| int mtu; |
| |
| --- a/net/ipv6/xfrm6_output.c |
| +++ b/net/ipv6/xfrm6_output.c |
| @@ -146,7 +146,7 @@ static int __xfrm6_output(struct net *ne |
| { |
| struct dst_entry *dst = skb_dst(skb); |
| struct xfrm_state *x = dst->xfrm; |
| - int mtu; |
| + unsigned int mtu; |
| bool toobig; |
| |
| #ifdef CONFIG_NETFILTER |