All of lore.kernel.org
 help / color / mirror / Atom feed
* include/linux/etherdevice.h:337:19: warning: dereference of NULL 'failover_dev' [CWE-476]
@ 2022-06-19  2:01 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2022-06-19  2:01 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 9015 bytes --]

:::::: 
:::::: Manual check reason: "low confidence bisect report"
:::::: Manual check reason: "low confidence static check first_new_problem: include/linux/etherdevice.h:337:19: warning: dereference of NULL 'failover_dev' [CWE-476] [-Wanalyzer-null-dereference]"
:::::: 

CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: Yajun Deng <yajun.deng@linux.dev>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   4b35035bcf80ddb47c0112c4fbd84a63a2836a18
commit: b37a466837393af72fe8bcb8f1436410f3f173f3 netdevice: add the case if dev is NULL
date:   11 months ago
:::::: branch date: 30 hours ago
:::::: commit date: 11 months ago
config: arm-randconfig-c002-20220617 (https://download.01.org/0day-ci/archive/20220619/202206190916.8g53PU1y-lkp(a)intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 11.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
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b37a466837393af72fe8bcb8f1436410f3f173f3
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout b37a466837393af72fe8bcb8f1436410f3f173f3
        # save the config file
         ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' 

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>


gcc-analyzer warnings: (new ones prefixed by >>)
   In file included from net/core/failover.c:11:
   net/core/failover.c: In function 'failover_existing_slave_register':
>> include/linux/etherdevice.h:337:19: warning: dereference of NULL 'failover_dev' [CWE-476] [-Wanalyzer-null-dereference]
     337 |         return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
         |                  ~^~~
     'failover_register.part.0': events 1-2
       |
       |net/core/failover.c:242:18:
       |  242 | struct failover *failover_register(struct net_device *dev,
       |      |                  ^~~~~~~~~~~~~~~~~
       |      |                  |
       |      |                  (1) entry to 'failover_register.part.0'
       |......
       |  251 |         if (!failover)
       |      |            ~      
       |      |            |
       |      |            (2) following 'false' branch...
       |
     'failover_register.part.0': event 3
       |
       |include/linux/compiler.h:86:20:
       |   86 | # define barrier() __asm__ __volatile__("": : :"memory")
       |      |                    ^~~~~~~
       |      |                    |
       |      |                    (3) ...to here
   include/asm-generic/barrier.h:163:9: note: in expansion of macro 'barrier'
       |  163 |         barrier();                                                      \
       |      |         ^~~~~~~
   include/linux/rcupdate.h:452:17: note: in expansion of macro 'smp_store_release'
       |  452 |                 smp_store_release(&p, RCU_INITIALIZER((typeof(p))_r_a_p__v)); \
       |      |                 ^~~~~~~~~~~~~~~~~
   net/core/failover.c:254:9: note: in expansion of macro 'rcu_assign_pointer'
       |  254 |         rcu_assign_pointer(failover->ops, ops);
       |      |         ^~~~~~~~~~~~~~~~~~
       |
     'failover_register.part.0': event 4
       |
       |  255 |         dev_hold(dev);
       |      |         ^~~~~~~~~~~~~
       |      |         |
       |      |         (4) calling 'dev_hold' from 'failover_register.part.0'
       |
       +--> 'dev_hold': events 5-7
              |
              |include/linux/netdevice.h:4161:20:
              | 4161 | static inline void dev_hold(struct net_device *dev)
              |      |                    ^~~~~~~~
              |      |                    |
              |      |                    (5) entry to 'dev_hold'
              | 4162 | {
              | 4163 |         if (dev) {
              |      |            ~        
              |      |            |
              |      |            (6) following 'false' branch (when 'dev' is NULL)...
              |......
              | 4170 | }
              |      | ~                   
              |      | |
              |      | (7) ...to here
              |
       <------+
       |
     'failover_register.part.0': events 8-9
       |
       |net/core/failover.c:255:9:
       |  255 |         dev_hold(dev);
       |      |         ^~~~~~~~~~~~~
       |      |         |
       |      |         (8) returning to 'failover_register.part.0' from 'dev_hold'
       |......
       |  265 |         failover_existing_slave_register(dev);
       |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |      |         |
       |      |         (9) calling 'failover_existing_slave_register' from 'failover_register.part.0'
       |
       +--> 'failover_existing_slave_register': event 10
              |
              |  215 | failover_existing_slave_register(struct net_device *failover_dev)
              |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              |      | |
              |      | (10) entry to 'failover_existing_slave_register'
              |
            'failover_existing_slave_register': event 11
              |
              |include/linux/list.h:629:14:
              |  629 |              !list_entry_is_head(pos, head, member);                    \
              |      |              ^
              |      |              |
              |      |              (11) following 'true' branch...
   include/linux/netdevice.h:2877:17: note: in expansion of macro 'list_for_each_entry'
              | 2877 |                 list_for_each_entry(d, &(net)->dev_base_head, dev_list)
              |      |                 ^~~~~~~~~~~~~~~~~~~
   net/core/failover.c:221:9: note: in expansion of macro 'for_each_netdev'
              |  221 |         for_each_netdev(net, dev) {
              |      |         ^~~~~~~~~~~~~~~
              |
            'failover_existing_slave_register': event 12
              |
              |include/linux/netdevice.h:5188:19:
              | 5188 |         return dev->priv_flags & IFF_FAILOVER;
              |      |                ~~~^~~~~~~~~~~~
              |      |                   |
              |      |                   (12) ...to here

vim +/failover_dev +337 include/linux/etherdevice.h

83a093b486ecfd Bjørn Mork        2013-08-30  316  
a599b0f54d233d Joe Perches       2012-05-08  317  /**
a599b0f54d233d Joe Perches       2012-05-08  318   * ether_addr_equal - Compare two Ethernet addresses
a599b0f54d233d Joe Perches       2012-05-08  319   * @addr1: Pointer to a six-byte array containing the Ethernet address
a599b0f54d233d Joe Perches       2012-05-08  320   * @addr2: Pointer other six-byte array containing the Ethernet address
a599b0f54d233d Joe Perches       2012-05-08  321   *
048b899ce38c3e stephen hemminger 2012-05-17  322   * Compare two Ethernet addresses, returns true if equal
0d74c42f788caf Joe Perches       2013-12-05  323   *
0d74c42f788caf Joe Perches       2013-12-05  324   * Please note: addr1 & addr2 must both be aligned to u16.
a599b0f54d233d Joe Perches       2012-05-08  325   */
a599b0f54d233d Joe Perches       2012-05-08  326  static inline bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
a599b0f54d233d Joe Perches       2012-05-08  327  {
0d74c42f788caf Joe Perches       2013-12-05  328  #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
0d74c42f788caf Joe Perches       2013-12-05  329  	u32 fold = ((*(const u32 *)addr1) ^ (*(const u32 *)addr2)) |
0d74c42f788caf Joe Perches       2013-12-05  330  		   ((*(const u16 *)(addr1 + 4)) ^ (*(const u16 *)(addr2 + 4)));
a599b0f54d233d Joe Perches       2012-05-08  331  
0d74c42f788caf Joe Perches       2013-12-05  332  	return fold == 0;
1f87e235e6fb92 Eric Dumazet      2008-11-23  333  #else
0d74c42f788caf Joe Perches       2013-12-05  334  	const u16 *a = (const u16 *)addr1;
0d74c42f788caf Joe Perches       2013-12-05  335  	const u16 *b = (const u16 *)addr2;
0d74c42f788caf Joe Perches       2013-12-05  336  
0d74c42f788caf Joe Perches       2013-12-05 @337  	return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
1f87e235e6fb92 Eric Dumazet      2008-11-23  338  #endif
1f87e235e6fb92 Eric Dumazet      2008-11-23  339  }
1f87e235e6fb92 Eric Dumazet      2008-11-23  340  

:::::: The code at line 337 was first introduced by commit
:::::: 0d74c42f788caf3cad727c61c490d9459bc8918b ether_addr_equal: Optimize implementation, remove unused compare_ether_addr

:::::: TO: Joe Perches <joe@perches.com>
:::::: CC: David S. Miller <davem@davemloft.net>

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 2+ messages in thread

* include/linux/etherdevice.h:337:19: warning: dereference of NULL 'failover_dev' [CWE-476]
@ 2022-06-17 23:25 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2022-06-17 23:25 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 9014 bytes --]

:::::: 
:::::: Manual check reason: "low confidence bisect report"
:::::: Manual check reason: "low confidence static check first_new_problem: include/linux/etherdevice.h:337:19: warning: dereference of NULL 'failover_dev' [CWE-476] [-Wanalyzer-null-dereference]"
:::::: 

CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: Yajun Deng <yajun.deng@linux.dev>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   4b35035bcf80ddb47c0112c4fbd84a63a2836a18
commit: b37a466837393af72fe8bcb8f1436410f3f173f3 netdevice: add the case if dev is NULL
date:   11 months ago
:::::: branch date: 3 hours ago
:::::: commit date: 11 months ago
config: arm-randconfig-c002-20220617 (https://download.01.org/0day-ci/archive/20220618/202206180726.9Xs1LGbY-lkp(a)intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 11.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
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b37a466837393af72fe8bcb8f1436410f3f173f3
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout b37a466837393af72fe8bcb8f1436410f3f173f3
        # save the config file
         ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' 

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>


gcc-analyzer warnings: (new ones prefixed by >>)
   In file included from net/core/failover.c:11:
   net/core/failover.c: In function 'failover_existing_slave_register':
>> include/linux/etherdevice.h:337:19: warning: dereference of NULL 'failover_dev' [CWE-476] [-Wanalyzer-null-dereference]
     337 |         return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
         |                  ~^~~
     'failover_register.part.0': events 1-2
       |
       |net/core/failover.c:242:18:
       |  242 | struct failover *failover_register(struct net_device *dev,
       |      |                  ^~~~~~~~~~~~~~~~~
       |      |                  |
       |      |                  (1) entry to 'failover_register.part.0'
       |......
       |  251 |         if (!failover)
       |      |            ~      
       |      |            |
       |      |            (2) following 'false' branch...
       |
     'failover_register.part.0': event 3
       |
       |include/linux/compiler.h:86:20:
       |   86 | # define barrier() __asm__ __volatile__("": : :"memory")
       |      |                    ^~~~~~~
       |      |                    |
       |      |                    (3) ...to here
   include/asm-generic/barrier.h:163:9: note: in expansion of macro 'barrier'
       |  163 |         barrier();                                                      \
       |      |         ^~~~~~~
   include/linux/rcupdate.h:452:17: note: in expansion of macro 'smp_store_release'
       |  452 |                 smp_store_release(&p, RCU_INITIALIZER((typeof(p))_r_a_p__v)); \
       |      |                 ^~~~~~~~~~~~~~~~~
   net/core/failover.c:254:9: note: in expansion of macro 'rcu_assign_pointer'
       |  254 |         rcu_assign_pointer(failover->ops, ops);
       |      |         ^~~~~~~~~~~~~~~~~~
       |
     'failover_register.part.0': event 4
       |
       |  255 |         dev_hold(dev);
       |      |         ^~~~~~~~~~~~~
       |      |         |
       |      |         (4) calling 'dev_hold' from 'failover_register.part.0'
       |
       +--> 'dev_hold': events 5-7
              |
              |include/linux/netdevice.h:4161:20:
              | 4161 | static inline void dev_hold(struct net_device *dev)
              |      |                    ^~~~~~~~
              |      |                    |
              |      |                    (5) entry to 'dev_hold'
              | 4162 | {
              | 4163 |         if (dev) {
              |      |            ~        
              |      |            |
              |      |            (6) following 'false' branch (when 'dev' is NULL)...
              |......
              | 4170 | }
              |      | ~                   
              |      | |
              |      | (7) ...to here
              |
       <------+
       |
     'failover_register.part.0': events 8-9
       |
       |net/core/failover.c:255:9:
       |  255 |         dev_hold(dev);
       |      |         ^~~~~~~~~~~~~
       |      |         |
       |      |         (8) returning to 'failover_register.part.0' from 'dev_hold'
       |......
       |  265 |         failover_existing_slave_register(dev);
       |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |      |         |
       |      |         (9) calling 'failover_existing_slave_register' from 'failover_register.part.0'
       |
       +--> 'failover_existing_slave_register': event 10
              |
              |  215 | failover_existing_slave_register(struct net_device *failover_dev)
              |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              |      | |
              |      | (10) entry to 'failover_existing_slave_register'
              |
            'failover_existing_slave_register': event 11
              |
              |include/linux/list.h:629:14:
              |  629 |              !list_entry_is_head(pos, head, member);                    \
              |      |              ^
              |      |              |
              |      |              (11) following 'true' branch...
   include/linux/netdevice.h:2877:17: note: in expansion of macro 'list_for_each_entry'
              | 2877 |                 list_for_each_entry(d, &(net)->dev_base_head, dev_list)
              |      |                 ^~~~~~~~~~~~~~~~~~~
   net/core/failover.c:221:9: note: in expansion of macro 'for_each_netdev'
              |  221 |         for_each_netdev(net, dev) {
              |      |         ^~~~~~~~~~~~~~~
              |
            'failover_existing_slave_register': event 12
              |
              |include/linux/netdevice.h:5188:19:
              | 5188 |         return dev->priv_flags & IFF_FAILOVER;
              |      |                ~~~^~~~~~~~~~~~
              |      |                   |
              |      |                   (12) ...to here

vim +/failover_dev +337 include/linux/etherdevice.h

83a093b486ecfd Bjørn Mork        2013-08-30  316  
a599b0f54d233d Joe Perches       2012-05-08  317  /**
a599b0f54d233d Joe Perches       2012-05-08  318   * ether_addr_equal - Compare two Ethernet addresses
a599b0f54d233d Joe Perches       2012-05-08  319   * @addr1: Pointer to a six-byte array containing the Ethernet address
a599b0f54d233d Joe Perches       2012-05-08  320   * @addr2: Pointer other six-byte array containing the Ethernet address
a599b0f54d233d Joe Perches       2012-05-08  321   *
048b899ce38c3e stephen hemminger 2012-05-17  322   * Compare two Ethernet addresses, returns true if equal
0d74c42f788caf Joe Perches       2013-12-05  323   *
0d74c42f788caf Joe Perches       2013-12-05  324   * Please note: addr1 & addr2 must both be aligned to u16.
a599b0f54d233d Joe Perches       2012-05-08  325   */
a599b0f54d233d Joe Perches       2012-05-08  326  static inline bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
a599b0f54d233d Joe Perches       2012-05-08  327  {
0d74c42f788caf Joe Perches       2013-12-05  328  #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
0d74c42f788caf Joe Perches       2013-12-05  329  	u32 fold = ((*(const u32 *)addr1) ^ (*(const u32 *)addr2)) |
0d74c42f788caf Joe Perches       2013-12-05  330  		   ((*(const u16 *)(addr1 + 4)) ^ (*(const u16 *)(addr2 + 4)));
a599b0f54d233d Joe Perches       2012-05-08  331  
0d74c42f788caf Joe Perches       2013-12-05  332  	return fold == 0;
1f87e235e6fb92 Eric Dumazet      2008-11-23  333  #else
0d74c42f788caf Joe Perches       2013-12-05  334  	const u16 *a = (const u16 *)addr1;
0d74c42f788caf Joe Perches       2013-12-05  335  	const u16 *b = (const u16 *)addr2;
0d74c42f788caf Joe Perches       2013-12-05  336  
0d74c42f788caf Joe Perches       2013-12-05 @337  	return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
1f87e235e6fb92 Eric Dumazet      2008-11-23  338  #endif
1f87e235e6fb92 Eric Dumazet      2008-11-23  339  }
1f87e235e6fb92 Eric Dumazet      2008-11-23  340  

:::::: The code at line 337 was first introduced by commit
:::::: 0d74c42f788caf3cad727c61c490d9459bc8918b ether_addr_equal: Optimize implementation, remove unused compare_ether_addr

:::::: TO: Joe Perches <joe@perches.com>
:::::: CC: David S. Miller <davem@davemloft.net>

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-06-19  2:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-19  2:01 include/linux/etherdevice.h:337:19: warning: dereference of NULL 'failover_dev' [CWE-476] kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2022-06-17 23:25 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.