CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: Rasmus Villemoes <[email protected]>
CC: Miguel Ojeda <[email protected]>
CC: Nick Desaulniers <[email protected]>
CC: Andrew Morton <[email protected]>
CC: Linux Memory Management List <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   3498e7f2bb415e447354a3debef6738d9655768c
commit: e1edc277e6f6dfb372216522dfc57f9381c39e35 linux/container_of.h: switch 
to static_assert
date:   3 weeks ago
:::::: branch date: 12 hours ago
:::::: commit date: 3 weeks ago
config: riscv-randconfig-c006-20211127 
(https://download.01.org/0day-ci/archive/20211128/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
5162b558d8c0b542e752b037e72a69d5fd51eb1e)
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 riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e1edc277e6f6dfb372216522dfc57f9381c39e35
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout e1edc277e6f6dfb372216522dfc57f9381c39e35
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
                                                                                
        ^~~~
   include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
            ^~~~
   net/core/dev.c:8201:2: note: Left side of '&&' is false
           ASSERT_RTNL();
           ^
   include/linux/rtnetlink.h:110:2: note: expanded from macro 'ASSERT_RTNL'
           WARN_ONCE(!rtnl_is_locked(), \
           ^
   include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
           ^
   include/linux/once_lite.h:17:30: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                                              ^
   net/core/dev.c:8201:2: note: '?' condition is false
           ASSERT_RTNL();
           ^
   include/linux/rtnetlink.h:110:2: note: expanded from macro 'ASSERT_RTNL'
           WARN_ONCE(!rtnl_is_locked(), \
           ^
   include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
           ^
   include/linux/once_lite.h:17:3: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                   ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                                       ^
   include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
           ^
   net/core/dev.c:8201:2: note: Taking false branch
           ASSERT_RTNL();
           ^
   include/linux/rtnetlink.h:110:2: note: expanded from macro 'ASSERT_RTNL'
           WARN_ONCE(!rtnl_is_locked(), \
           ^
   include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
           ^
   include/linux/once_lite.h:17:3: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                   ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   net/core/dev.c:8203:28: note: Assuming pointer value is null
           changeupper_info.master = netdev_master_upper_dev_get(dev) == 
upper_dev;
                                     
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/core/dev.c:8216:30: note: Passing null pointer value via 1st parameter 
'dev'
           __netdev_update_lower_level(upper_dev, priv);
                                       ^~~~~~~~~
   net/core/dev.c:8216:2: note: Calling '__netdev_update_lower_level'
           __netdev_update_lower_level(upper_dev, priv);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/core/dev.c:7778:19: note: Access to field 'lower_level' results in a 
dereference of a null pointer (loaded from variable 'dev')
           dev->lower_level = __netdev_lower_depth(dev) + 1;
           ~~~              ^
   net/core/dev.c:10864:2: warning: Call to function 'strcpy' is insecure as it 
does not provide bounding of the memory buffer. Replace unbounded copy 
functions with analogous functions that support length arguments such as 
'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(dev->name, name);
           ^~~~~~
   net/core/dev.c:10864:2: note: Call to function 'strcpy' is insecure as it 
does not provide bounding of the memory buffer. Replace unbounded copy 
functions with analogous functions that support length arguments such as 
'strlcpy'. CWE-119
           strcpy(dev->name, name);
           ^~~~~~
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (2 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   drivers/usb/host/fotg210-hcd.c:735:2: warning: Value stored to 'next' is 
never read [clang-analyzer-deadcode.DeadStores]
           next += temp;
           ^       ~~~~
   drivers/usb/host/fotg210-hcd.c:735:2: note: Value stored to 'next' is never 
read
           next += temp;
           ^       ~~~~
>> drivers/usb/host/fotg210-hcd.c:2987:10: warning: Assigned value is garbage 
>> or undefined [clang-analyzer-core.uninitialized.Assign]
                           token = qtd->hw_token;
                                 ^
   drivers/usb/host/fotg210-hcd.c:3835:2: note: Loop condition is false.  
Exiting loop
           spin_lock_irqsave(&fotg210->lock, flags);
           ^
   include/linux/spinlock.h:392:2: note: expanded from macro 'spin_lock_irqsave'
           raw_spin_lock_irqsave(spinlock_check(lock), flags);     \
           ^
   include/linux/spinlock.h:277:3: note: expanded from macro 
'raw_spin_lock_irqsave'
                   _raw_spin_lock_irqsave(lock, flags);    \
                   ^
   include/linux/spinlock_api_up.h:68:45: note: expanded from macro 
'_raw_spin_lock_irqsave'
   #define _raw_spin_lock_irqsave(lock, flags)     __LOCK_IRQSAVE(lock, flags)
                                                   ^
   include/linux/spinlock_api_up.h:40:8: note: expanded from macro 
'__LOCK_IRQSAVE'
     do { local_irq_save(flags); __LOCK(lock); } while (0)
          ^
   include/linux/irqflags.h:214:3: note: expanded from macro 'local_irq_save'
                   raw_local_irq_save(flags);              \
                   ^
   include/linux/irqflags.h:169:2: note: expanded from macro 
'raw_local_irq_save'
           do {                                            \
           ^
   drivers/usb/host/fotg210-hcd.c:3835:2: note: '?' condition is false
           spin_lock_irqsave(&fotg210->lock, flags);
           ^
   include/linux/spinlock.h:392:2: note: expanded from macro 'spin_lock_irqsave'
           raw_spin_lock_irqsave(spinlock_check(lock), flags);     \
           ^
   include/linux/spinlock.h:277:3: note: expanded from macro 
'raw_spin_lock_irqsave'
                   _raw_spin_lock_irqsave(lock, flags);    \
                   ^
   include/linux/spinlock_api_up.h:68:45: note: expanded from macro 
'_raw_spin_lock_irqsave'
   #define _raw_spin_lock_irqsave(lock, flags)     __LOCK_IRQSAVE(lock, flags)
                                                   ^
   note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   include/linux/irqflags.h:215:3: note: expanded from macro 'local_irq_save'
                   if (!raw_irqs_disabled_flags(flags))    \
                   ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   drivers/usb/host/fotg210-hcd.c:3835:2: note: '?' condition is false
           spin_lock_irqsave(&fotg210->lock, flags);
           ^
   include/linux/spinlock.h:392:2: note: expanded from macro 'spin_lock_irqsave'
           raw_spin_lock_irqsave(spinlock_check(lock), flags);     \
           ^
   include/linux/spinlock.h:277:3: note: expanded from macro 
'raw_spin_lock_irqsave'
                   _raw_spin_lock_irqsave(lock, flags);    \
                   ^
   include/linux/spinlock_api_up.h:68:45: note: expanded from macro 
'_raw_spin_lock_irqsave'
   #define _raw_spin_lock_irqsave(lock, flags)     __LOCK_IRQSAVE(lock, flags)
                                                   ^
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                                       ^
   include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
           ^
   drivers/usb/host/fotg210-hcd.c:3835:2: note: Taking false branch
           spin_lock_irqsave(&fotg210->lock, flags);
           ^
   include/linux/spinlock.h:392:2: note: expanded from macro 'spin_lock_irqsave'
           raw_spin_lock_irqsave(spinlock_check(lock), flags);     \
           ^
   include/linux/spinlock.h:277:3: note: expanded from macro 
'raw_spin_lock_irqsave'
                   _raw_spin_lock_irqsave(lock, flags);    \
                   ^
   include/linux/spinlock_api_up.h:68:45: note: expanded from macro 
'_raw_spin_lock_irqsave'
   #define _raw_spin_lock_irqsave(lock, flags)     __LOCK_IRQSAVE(lock, flags)
                                                   ^
   include/linux/spinlock_api_up.h:40:8: note: expanded from macro 
'__LOCK_IRQSAVE'
     do { local_irq_save(flags); __LOCK(lock); } while (0)
          ^
   include/linux/irqflags.h:215:3: note: expanded from macro 'local_irq_save'
                   if (!raw_irqs_disabled_flags(flags))    \
                   ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   drivers/usb/host/fotg210-hcd.c:3835:2: note: Loop condition is false.  
Exiting loop
           spin_lock_irqsave(&fotg210->lock, flags);
           ^
   include/linux/spinlock.h:392:2: note: expanded from macro 'spin_lock_irqsave'
           raw_spin_lock_irqsave(spinlock_check(lock), flags);     \
           ^
   include/linux/spinlock.h:277:3: note: expanded from macro 
'raw_spin_lock_irqsave'
                   _raw_spin_lock_irqsave(lock, flags);    \
                   ^
   include/linux/spinlock_api_up.h:68:45: note: expanded from macro 
'_raw_spin_lock_irqsave'
   #define _raw_spin_lock_irqsave(lock, flags)     __LOCK_IRQSAVE(lock, flags)
                                                   ^

vim +2987 drivers/usb/host/fotg210-hcd.c

7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2939  
259127ba78d0f2 Peter Senna Tschudin 2015-10-12  2940  /* For 
control/bulk/interrupt, return QH with these TDs appended.
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2941   * Allocates and 
initializes the QH if necessary.
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2942   * Returns null if it 
can't allocate a QH it needs to.
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2943   * If the QH has TDs 
(urbs) already, that's great.
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2944   */
259127ba78d0f2 Peter Senna Tschudin 2015-10-12  2945  static struct fotg210_qh 
*qh_append_tds(struct fotg210_hcd *fotg210,
259127ba78d0f2 Peter Senna Tschudin 2015-10-12  2946            struct urb 
*urb, struct list_head *qtd_list,
259127ba78d0f2 Peter Senna Tschudin 2015-10-12  2947            int epnum, void 
**ptr)
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2948  {
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2949    struct fotg210_qh *qh = 
NULL;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2950    __hc32 qh_addr_mask = 
cpu_to_hc32(fotg210, 0x7f);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2951  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2952    qh = (struct fotg210_qh 
*) *ptr;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2953    if (unlikely(qh == 
NULL)) {
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2954            /* can't sleep 
here, we have fotg210->lock... */
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2955            qh = 
qh_make(fotg210, urb, GFP_ATOMIC);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2956            *ptr = qh;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2957    }
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2958    if (likely(qh != NULL)) 
{
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2959            struct 
fotg210_qtd *qtd;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2960  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2961            if 
(unlikely(list_empty(qtd_list)))
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2962                    qtd = 
NULL;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2963            else
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2964                    qtd = 
list_entry(qtd_list->next, struct fotg210_qtd,
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2965                            
        qtd_list);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2966  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2967            /* control qh 
may need patching ... */
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2968            if 
(unlikely(epnum == 0)) {
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2969                    /* 
usb_reset_device() briefly reverts to address 0 */
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2970                    if 
(usb_pipedevice(urb->pipe) == 0)
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2971                            
qh->hw->hw_info1 &= ~qh_addr_mask;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2972            }
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2973  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2974            /* just one way 
to queue requests: swap with the dummy qtd.
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2975             * only hc or 
qh_refresh() ever modify the overlay.
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2976             */
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2977            if (likely(qtd 
!= NULL)) {
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2978                    struct 
fotg210_qtd *dummy;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2979                    
dma_addr_t dma;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2980                    __hc32 
token;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2981  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2982                    /* to 
avoid racing the HC, use the dummy td instead of
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2983                     * the 
first td of our list (becomes new dummy).  both
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2984                     * tds 
stay deactivated until we're done, when the
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2985                     * HC 
is allowed to fetch the old dummy (4.10.2).
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2986                     */
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29 @2987                    token = 
qtd->hw_token;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2988                    
qtd->hw_token = HALT_BIT(fotg210);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2989  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2990                    dummy = 
qh->dummy;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2991  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2992                    dma = 
dummy->qtd_dma;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2993                    *dummy 
= *qtd;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2994                    
dummy->qtd_dma = dma;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2995  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2996                    
list_del(&qtd->qtd_list);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2997                    
list_add(&dummy->qtd_list, qtd_list);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2998                    
list_splice_tail(qtd_list, &qh->qtd_list);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  2999  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3000                    
fotg210_qtd_init(fotg210, qtd, qtd->qtd_dma);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3001                    
qh->dummy = qtd;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3002  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3003                    /* hc 
must see the new dummy at list end */
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3004                    dma = 
qtd->qtd_dma;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3005                    qtd = 
list_entry(qh->qtd_list.prev,
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3006                            
        struct fotg210_qtd, qtd_list);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3007                    
qtd->hw_next = QTD_NEXT(fotg210, dma);
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3008  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3009                    /* let 
the hc process these next qtds */
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3010                    wmb();
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3011                    
dummy->hw_token = token;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3012  
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3013                    
urb->hcpriv = qh;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3014            }
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3015    }
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3016    return qh;
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3017  }
7d50195f6c5005 Feng-Hsin Chiang     2013-07-29  3018  

:::::: The code at line 2987 was first introduced by commit
:::::: 7d50195f6c5005d6ae7a789d9a7f0a94d104ee96 usb: host: Faraday fotg210-hcd 
driver

:::::: TO: Feng-Hsin Chiang <[email protected]>
:::::: CC: Greg Kroah-Hartman <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to