Message ID | 20200727033810.28883-1-gaurav1086@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | David Miller |
Headers | show |
Series | [net/ipv6] ip6_output: Add ipv6_pinfo null check | expand |
Hi Gaurav,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on sparc-next/master]
[also build test WARNING on ipvs/master linus/master v5.8-rc7 next-20200724]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Gaurav-Singh/ip6_output-Add-ipv6_pinfo-null-check/20200727-113949
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next.git master
config: csky-defconfig (attached as .config)
compiler: csky-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=csky
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
net/ipv6/ip6_output.c: In function 'ip6_autoflowlabel':
>> net/ipv6/ip6_output.c:188:1: warning: control reaches end of non-void function [-Wreturn-type]
188 | }
| ^
vim +188 net/ipv6/ip6_output.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 181
e9191ffb65d8e1 Ben Hutchings 2018-01-22 182 bool ip6_autoflowlabel(struct net *net, const struct ipv6_pinfo *np)
513674b5a2c9c7 Shaohua Li 2017-12-20 183 {
5bdc1ea8a7d229 Gaurav Singh 2020-07-26 184 if (np && np->autoflowlabel_set)
513674b5a2c9c7 Shaohua Li 2017-12-20 185 return np->autoflowlabel;
5bdc1ea8a7d229 Gaurav Singh 2020-07-26 186 else
5bdc1ea8a7d229 Gaurav Singh 2020-07-26 187 ip6_default_np_autolabel(net);
513674b5a2c9c7 Shaohua Li 2017-12-20 @188 }
513674b5a2c9c7 Shaohua Li 2017-12-20 189
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Gaurav,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on sparc-next/master]
[also build test WARNING on ipvs/master linus/master v5.8-rc7 next-20200724]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Gaurav-Singh/ip6_output-Add-ipv6_pinfo-null-check/20200727-113949
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next.git master
config: x86_64-randconfig-r011-20200727 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 8dc820393219c7ee440b4ec86c9a201301943276)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> net/ipv6/ip6_output.c:188:1: warning: non-void function does not return a value in all control paths [-Wreturn-type]
}
^
1 warning generated.
vim +188 net/ipv6/ip6_output.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 181
e9191ffb65d8e1 Ben Hutchings 2018-01-22 182 bool ip6_autoflowlabel(struct net *net, const struct ipv6_pinfo *np)
513674b5a2c9c7 Shaohua Li 2017-12-20 183 {
5bdc1ea8a7d229 Gaurav Singh 2020-07-26 184 if (np && np->autoflowlabel_set)
513674b5a2c9c7 Shaohua Li 2017-12-20 185 return np->autoflowlabel;
5bdc1ea8a7d229 Gaurav Singh 2020-07-26 186 else
5bdc1ea8a7d229 Gaurav Singh 2020-07-26 187 ip6_default_np_autolabel(net);
513674b5a2c9c7 Shaohua Li 2017-12-20 @188 }
513674b5a2c9c7 Shaohua Li 2017-12-20 189
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
From: Gaurav Singh <gaurav1086@gmail.com> Date: Sun, 26 Jul 2020 23:38:10 -0400 > ipv6_pinfo is initlialized by inet6_sk() which returns NULL. > Hence it can cause segmentation fault. Fix this by adding a > NULL check. Please take your time with such changes and actually look at the compiler output, it will warn that you are adding a new problem. Specifically, the function now fails to return a value at all. But even more important, how is the situation you are fixing possible? Do you have a sample crash? Can you please describe the code paths and conditions that lead to the problem? You must also provide a valid and properly formatted Fixes: tag for bug fixes such as this. Thank you.
On Sun, Jul 26, 2020 at 8:39 PM Gaurav Singh <gaurav1086@gmail.com> wrote: > > ipv6_pinfo is initlialized by inet6_sk() which returns NULL. Why? It only returns NULL for timewait or request sock, but I don't see how ip6_autoflowlabel() could be called on these sockets. So please explain. > Hence it can cause segmentation fault. Fix this by adding a > NULL check. Which exact call path? Do you have a full stack trace? Thanks.
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 8a8c2d0cfcc8..7c077a6847e4 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -181,10 +181,10 @@ int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb) bool ip6_autoflowlabel(struct net *net, const struct ipv6_pinfo *np) { - if (!np->autoflowlabel_set) - return ip6_default_np_autolabel(net); - else + if (np && np->autoflowlabel_set) return np->autoflowlabel; + else + ip6_default_np_autolabel(net); } /*
ipv6_pinfo is initlialized by inet6_sk() which returns NULL. Hence it can cause segmentation fault. Fix this by adding a NULL check. Signed-off-by: Gaurav Singh <gaurav1086@gmail.com> --- net/ipv6/ip6_output.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)