:::::: 
:::::: Manual check reason: "low confidence bisect report"
:::::: Manual check reason: "low confidence static check warning: 
lib/iov_iter_extract.c:348:21: warning: use of uninitialized value 'ret' 
[CWE-457] [-Wanalyzer-use-of-uninitialized-value]"
:::::: 

BCC: [email protected]
CC: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: David Howells <[email protected]>

Hi David,

[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on linus/master]
[also build test WARNING on v6.0-rc5 next-20220909]
[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#_base_tree_information]

url:    
https://github.com/intel-lab-lkp/linux/commits/David-Howells/iov_iter-Add-extraction-functions/20220910-072102
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
ce888220d5c7a805e0e155302a318d5d23e62950
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: arm-randconfig-c002-20220911 
(https://download.01.org/0day-ci/archive/20220912/[email protected]/config)
compiler: arm-linux-gnueabi-gcc (GCC) 12.1.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://github.com/intel-lab-lkp/linux/commit/a8df8a897880379087a0a9fc4f6fc1391e352217
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review 
David-Howells/iov_iter-Add-extraction-functions/20220910-072102
        git checkout a8df8a897880379087a0a9fc4f6fc1391e352217
        # save the config file
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross 
ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' 

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

gcc_analyzer warnings: (new ones prefixed by >>)
   lib/iov_iter_extract.c: In function 'iov_iter_extract_xarray':
>> lib/iov_iter_extract.c:348:21: warning: use of uninitialized value 'ret' 
>> [CWE-457] [-Wanalyzer-use-of-uninitialized-value]
     348 |                 ret += len;
         |                     ^~
     'iov_iter_extract_pages.part.0': events 1-8
       |
       |  363 | static ssize_t iov_iter_extract_pages(struct iov_iter *iter,
       |      |                ^~~~~~~~~~~~~~~~~~~~~~
       |      |                |
       |      |                (1) entry to 'iov_iter_extract_pages.part.0'
       |......
       |  371 |         if (iov_iter_is_bvec(iter))
       |      |            ~    
       |      |            |
       |      |            (2) following 'false' branch...
       |......
       |  374 |         if (iov_iter_is_kvec(iter))
       |      |            ~    
       |      |            |
       |      |            (3) ...to here
       |      |            (4) following 'false' branch...
       |......
       |  377 |         if (iov_iter_is_xarray(iter))
       |      |            ~    
       |      |            |
       |      |            (5) ...to here
       |      |            (6) following 'true' branch...
       |  378 |                 return iov_iter_extract_xarray(iter, array, 
array_max, maxsize,
       |      |                        
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |      |                        |
       |      |                        (7) ...to here
       |      |                        (8) calling 'iov_iter_extract_xarray' 
from 'iov_iter_extract_pages.part.0'
       |  379 |                                                dest);
       |      |                                                ~~~~~
       |
       +--> 'iov_iter_extract_xarray': events 9-10
              |
              |  319 | static ssize_t iov_iter_extract_xarray(struct iov_iter 
*iter,
              |      |                ^~~~~~~~~~~~~~~~~~~~~~~
              |      |                |
              |      |                (9) entry to 'iov_iter_extract_xarray'
              |......
              |  329 |         ssize_t ret;
              |      |                 ~~~
              |      |                 |
              |      |                 (10) region created on stack here
              |
            'iov_iter_extract_xarray': event 11
              |
              |  334 |         xas_for_each(&xas, folio, ULONG_MAX) {
              |      |                            ^~~~~
              |      |                            |
              |      |                            (11) following 'true' branch 
(when 'folio' is non-NULL)...
   include/linux/xarray.h:1770:42: note: in definition of macro 'xas_for_each'
              | 1770 |         for (entry = xas_find(xas, max); entry; \
              |      |                                          ^~~~~
              |
            'iov_iter_extract_xarray': event 12
              |
              |include/linux/compiler.h:78:42:
              |   78 | # define unlikely(x)    __builtin_expect(!!(x), 0)
              |      |                                          ^~~~~
              |      |                                          |
              |      |                                          (12) ...to here
   include/linux/xarray.h:187:16: note: in expansion of macro 'unlikely'
              |  187 |         return unlikely(entry == XA_ZERO_ENTRY);
              |      |                ^~~~~~~~
              |
            'iov_iter_extract_xarray': event 13
              |
              | 1506 |         if (xa_is_zero(entry))
              |      |            ^
              |      |            |
              |      |            (13) following 'false' branch...
              |
            'iov_iter_extract_xarray': event 14
              |
              |include/linux/compiler.h:78:42:
              |   78 | # define unlikely(x)    __builtin_expect(!!(x), 0)
              |      |                                          ^~~~~
              |      |                                          |
              |      |                                          (14) ...to here
   include/linux/xarray.h:1279:16: note: in expansion of macro 'unlikely'
              | 1279 |         return unlikely(entry == XA_RETRY_ENTRY);
              |      |                ^~~~~~~~
              |
            'iov_iter_extract_xarray': events 15-16
              |
              |   81 |         return (unsigned long)entry & 1;
              |      |                ~~~~~~~~~~~~~~~~~~~~
              |      |                |
              |      |                (16) ...to here
              |......
              | 1508 |         if (!xa_is_retry(entry))
              |      |            ^
              |      |            |
              |      |            (15) following 'true' branch...
              |
            'iov_iter_extract_xarray': event 17
              |
              |lib/iov_iter_extract.c:337:20:
              |  337 |                 if (WARN_ON(xa_is_value(folio)))
              |      |                    ^
              |      |                    |
              |      |                    (17) following 'false' branch...
              |
            'iov_iter_extract_xarray': event 18
              |
              |include/linux/mm.h:1771:36:
              | 1771 | #define offset_in_folio(folio, p) ((unsigned long)(p) & 
(folio_size(folio) - 1))
              |      |                                    ^~~~~~~~~~~~~~~~~~
              |      |                                    |
              |      |                                    (18) ...to here
   lib/iov_iter_extract.c:342:26: note: in expansion of macro 'offset_in_folio'
              |  342 |                 offset = offset_in_folio(folio, start);
              |      |                          ^~~~~~~~~~~~~~~
              |
            'iov_iter_extract_xarray': event 19
              |
              |  348 |                 ret += len;
              |      |                     ^~
              |      |                     |
              |      |                     (19) use of uninitialized value 
'ret' here
              |
>> lib/iov_iter_extract.c:348:21: warning: use of uninitialized value 'ret' 
>> [CWE-457] [-Wanalyzer-use-of-uninitialized-value]
     'extract_iter_to_sg': events 1-2
       |
       |  477 | ssize_t extract_iter_to_sg(struct iov_iter *iter, size_t len,
       |      |         ^~~~~~~~~~~~~~~~~~
       |      |         |
       |      |         (1) entry to 'extract_iter_to_sg'
       |......
       |  504 |         if (!sg)
       |      |            ~
       |      |            |
       |      |            (2) following 'false' branch...
       |
     'extract_iter_to_sg': event 3
       |
       |include/linux/fortify-string.h:280:9:
       |  280 |         fortify_memset_chk(__fortify_size, p_size, 
p_size_field),       \
       |      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |      |         |
       |      |         (3) ...to here
   include/linux/fortify-string.h:288:25: note: in expansion of macro 
'__fortify_memset_chk'
       |  288 | #define memset(p, c, s) __fortify_memset_chk(p, c, s,           
        \
       |      |                         ^~~~~~~~~~~~~~~~~~~~
   lib/iov_iter_extract.c:506:9: note: in expansion of macro 'memset'
       |  506 |         memset(sg, 0, sg_size);
       |      |         ^~~~~~
       |
     'extract_iter_to_sg': event 4
       |
       |  511 |         ret = iov_iter_extract_pages(iter, sgtable, sg_max, len,
       |      |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |      |               |
       |      |               (4) calling 'iov_iter_extract_pages' from 
'extract_iter_to_sg'
       |  512 |                                      EXTRACT_TO_SGLIST);
       |      |                                      ~~~~~~~~~~~~~~~~~~
       |
       +--> 'iov_iter_extract_pages': events 5-6
              |
              |  363 | static ssize_t iov_iter_extract_pages(struct iov_iter 
*iter,
              |      |                ^~~~~~~~~~~~~~~~~~~~~~
              |      |                |
              |      |                (5) entry to 'iov_iter_extract_pages'
              |......
              |  368 |         if (likely(user_backed_iter(iter)))
              |      |            ~    
              |      |            |
              |      |            (6) following 'false' branch...
              |
            'iov_iter_extract_pages': event 7
              |
              |cc1:
              | (7): ...to here
              |
            'iov_iter_extract_pages': event 8
              |
              |cc1:
              | (8): calling 'iov_iter_extract_pages.part.0' from 
'iov_iter_extract_pages'
              |
              +--> 'iov_iter_extract_pages.part.0': events 9-16
                     |
                     |  363 | static ssize_t iov_iter_extract_pages(struct 
iov_iter *iter,
                     |      |                ^~~~~~~~~~~~~~~~~~~~~~
                     |      |                |
                     |      |                (9) entry to 
'iov_iter_extract_pages.part.0'
                     |......
                     |  371 |         if (iov_iter_is_bvec(iter))
                     |      |            ~    
                     |      |            |
                     |      |            (10) following 'false' branch...
                     |......
                     |  374 |         if (iov_iter_is_kvec(iter))
                     |      |            ~    
                     |      |            |
                     |      |            (11) ...to here
                     |      |            (12) following 'false' branch...
                     |......
                     |  377 |         if (iov_iter_is_xarray(iter))
                     |      |            ~    
                     |      |            |
                     |      |            (13) ...to here
                     |      |            (14) following 'true' branch...
                     |  378 |                 return 
iov_iter_extract_xarray(iter, array, array_max, maxsize,
                     |      |                        
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     |      |                        |
                     |      |                        (15) ...to here
                     |      |                        (16) calling 
'iov_iter_extract_xarray' from 'iov_iter_extract_pages.part.0'
                     |  379 |                                                
dest);
                     |      |                                                
~~~~~
                     |
                     +--> 'iov_iter_extract_xarray': events 17-18
                            |
                            |  319 | static ssize_t 
iov_iter_extract_xarray(struct iov_iter *iter,
                            |      |                ^~~~~~~~~~~~~~~~~~~~~~~
                            |      |                |
                            |      |                (17) entry to 
'iov_iter_extract_xarray'
                            |......
                            |  329 |         ssize_t ret;
                            |      |                 ~~~
                            |      |                 |
                            |      |                 (18) region created on 
stack here
                            |

vim +/ret +348 lib/iov_iter_extract.c

a8df8a89788037 David Howells 2022-09-10  314  
a8df8a89788037 David Howells 2022-09-10  315  /*
a8df8a89788037 David Howells 2022-09-10  316   * Extract the pages from an 
XARRAY-class iterator and add them to the
a8df8a89788037 David Howells 2022-09-10  317   * destination buffer.  The pages 
are not pinned.
a8df8a89788037 David Howells 2022-09-10  318   */
a8df8a89788037 David Howells 2022-09-10  319  static ssize_t 
iov_iter_extract_xarray(struct iov_iter *iter,
a8df8a89788037 David Howells 2022-09-10  320                                   
void *array, unsigned int array_max,
a8df8a89788037 David Howells 2022-09-10  321                                   
ssize_t maxsize,
a8df8a89788037 David Howells 2022-09-10  322                                   
enum iter_extract_dest dest)
a8df8a89788037 David Howells 2022-09-10  323  {
a8df8a89788037 David Howells 2022-09-10  324    struct xarray *xa = 
iter->xarray;
a8df8a89788037 David Howells 2022-09-10  325    struct folio *folio;
a8df8a89788037 David Howells 2022-09-10  326    unsigned int ix;
a8df8a89788037 David Howells 2022-09-10  327    loff_t start = 
iter->xarray_start + iter->iov_offset;
a8df8a89788037 David Howells 2022-09-10  328    pgoff_t index = start / 
PAGE_SIZE;
a8df8a89788037 David Howells 2022-09-10  329    ssize_t ret;
a8df8a89788037 David Howells 2022-09-10  330    size_t offset, len;
a8df8a89788037 David Howells 2022-09-10  331    XA_STATE(xas, xa, index);
a8df8a89788037 David Howells 2022-09-10  332  
a8df8a89788037 David Howells 2022-09-10  333    rcu_read_lock();
a8df8a89788037 David Howells 2022-09-10  334    xas_for_each(&xas, folio, 
ULONG_MAX) {
a8df8a89788037 David Howells 2022-09-10  335            if (xas_retry(&xas, 
folio))
a8df8a89788037 David Howells 2022-09-10  336                    continue;
a8df8a89788037 David Howells 2022-09-10  337            if 
(WARN_ON(xa_is_value(folio)))
a8df8a89788037 David Howells 2022-09-10  338                    break;
a8df8a89788037 David Howells 2022-09-10  339            if 
(WARN_ON(folio_test_hugetlb(folio)))
a8df8a89788037 David Howells 2022-09-10  340                    break;
a8df8a89788037 David Howells 2022-09-10  341  
a8df8a89788037 David Howells 2022-09-10  342            offset = 
offset_in_folio(folio, start);
a8df8a89788037 David Howells 2022-09-10  343            len = min_t(size_t, 
maxsize, folio_size(folio) - offset);
a8df8a89788037 David Howells 2022-09-10  344  
a8df8a89788037 David Howells 2022-09-10  345            ix = 
extract_contig_pages(array, folio_page(folio, 0),
a8df8a89788037 David Howells 2022-09-10  346                                    
  offset, len, dest);
a8df8a89788037 David Howells 2022-09-10  347            maxsize -= len;
a8df8a89788037 David Howells 2022-09-10 @348            ret += len;
a8df8a89788037 David Howells 2022-09-10  349            if (ix >= array_max) {
a8df8a89788037 David Howells 2022-09-10  350                    WARN_ON_ONCE(ix 
> array_max);
a8df8a89788037 David Howells 2022-09-10  351                    break;
a8df8a89788037 David Howells 2022-09-10  352            }
a8df8a89788037 David Howells 2022-09-10  353  
a8df8a89788037 David Howells 2022-09-10  354            if (maxsize <= 0)
a8df8a89788037 David Howells 2022-09-10  355                    break;
a8df8a89788037 David Howells 2022-09-10  356    }
a8df8a89788037 David Howells 2022-09-10  357  
a8df8a89788037 David Howells 2022-09-10  358    rcu_read_unlock();
a8df8a89788037 David Howells 2022-09-10  359    terminate_array(array, dest);
a8df8a89788037 David Howells 2022-09-10  360    return ret;
a8df8a89788037 David Howells 2022-09-10  361  }
a8df8a89788037 David Howells 2022-09-10  362  

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

Reply via email to