All of lore.kernel.org
 help / color / mirror / Atom feed
* [djwong-xfs:xfs-5.15-merge 23/25] fs/xfs/scrub/bmap.c:617:2: warning: Undefined or garbage value returned to caller [clang-analyzer-core.uninitialized.UndefReturn]
@ 2021-08-07 15:10 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-08-07 15:10 UTC (permalink / raw)
  To: kbuild

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

CC: clang-built-linux(a)googlegroups.com
CC: kbuild-all(a)lists.01.org
CC: "Darrick J. Wong" <darrick.wong@oracle.com>
CC: linux-kernel(a)vger.kernel.org
TO: "Darrick J. Wong" <djwong@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git xfs-5.15-merge
head:   eabe005e2fe7a139233e5e0b7b125042a1b45c8f
commit: da3971f56e345e7a6ba1bc327084dfdebec1cad5 [23/25] xfs: grab active perag ref when reading AG headers
:::::: branch date: 15 hours ago
:::::: commit date: 15 hours ago
config: x86_64-randconfig-c001-20210805 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 41a6b50c25961addc04438b567ee1f4ef9e40f98)
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
        # https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git/commit/?id=da3971f56e345e7a6ba1bc327084dfdebec1cad5
        git remote add djwong-xfs https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git
        git fetch --no-tags djwong-xfs xfs-5.15-merge
        git checkout da3971f56e345e7a6ba1bc327084dfdebec1cad5
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer 

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


clang-analyzer warnings: (new ones prefixed by >>)
                           ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   include/linux/err.h:36:2: note: Returning zero, which participates in a condition later
           return IS_ERR_VALUE((unsigned long)ptr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ntfs/dir.c:1222:6: note: Returning from 'IS_ERR'
           if (IS_ERR(bmp_vi)) {
               ^~~~~~~~~~~~~~
   fs/ntfs/dir.c:1222:2: note: Taking false branch
           if (IS_ERR(bmp_vi)) {
           ^
   fs/ntfs/dir.c:1230:15: note: Assuming the condition is false
           if (unlikely(bmp_pos >> 3 >= i_size_read(bmp_vi))) {
                        ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   fs/ntfs/dir.c:1230:2: note: Taking false branch
           if (unlikely(bmp_pos >> 3 >= i_size_read(bmp_vi))) {
           ^
   fs/ntfs/dir.c:1239:2: note: Taking false branch
           ntfs_debug("Reading bitmap with page index 0x%llx, bit ofs 0x%llx",
           ^
   fs/ntfs/debug.h:39:2: note: expanded from macro 'ntfs_debug'
           if (0)                                                          \
           ^
   fs/ntfs/dir.c:1239:2: note: Loop condition is false.  Exiting loop
           ntfs_debug("Reading bitmap with page index 0x%llx, bit ofs 0x%llx",
           ^
   fs/ntfs/debug.h:37:35: note: expanded from macro 'ntfs_debug'
   #define ntfs_debug(fmt, ...)                                            \
                                                                           ^
   fs/ntfs/dir.c:1245:6: note: Calling 'IS_ERR'
           if (IS_ERR(bmp_page)) {
               ^~~~~~~~~~~~~~~~
   include/linux/err.h:36:2: note: Returning zero, which participates in a condition later
           return IS_ERR_VALUE((unsigned long)ptr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ntfs/dir.c:1245:6: note: Returning from 'IS_ERR'
           if (IS_ERR(bmp_page)) {
               ^~~~~~~~~~~~~~~~
   fs/ntfs/dir.c:1245:2: note: Taking false branch
           if (IS_ERR(bmp_page)) {
           ^
   fs/ntfs/dir.c:1253:2: note: Loop condition is false. Execution continues on line 1272
           while (!(bmp[cur_bmp_pos >> 3] & (1 << (cur_bmp_pos & 7)))) {
           ^
   fs/ntfs/dir.c:1272:2: note: Taking false branch
           ntfs_debug("Handling index buffer 0x%llx.",
           ^
   fs/ntfs/debug.h:39:2: note: expanded from macro 'ntfs_debug'
           if (0)                                                          \
           ^
   fs/ntfs/dir.c:1272:2: note: Loop condition is false.  Exiting loop
           ntfs_debug("Handling index buffer 0x%llx.",
           ^
   fs/ntfs/debug.h:37:35: note: expanded from macro 'ntfs_debug'
   #define ntfs_debug(fmt, ...)                                            \
                                                                           ^
   fs/ntfs/dir.c:1275:6: note: Assuming the condition is false
           if ((prev_ia_pos & (s64)PAGE_MASK) !=
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ntfs/dir.c:1275:2: note: Taking false branch
           if ((prev_ia_pos & (s64)PAGE_MASK) !=
           ^
   fs/ntfs/dir.c:1297:2: note: Null pointer value stored to 'ia'
           ia = (INDEX_ALLOCATION*)(kaddr + (ia_pos & ~PAGE_MASK &
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ntfs/dir.c:1300:15: note: 'ia' is >= 'kaddr'
           if (unlikely((u8*)ia < kaddr || (u8*)ia > kaddr + PAGE_SIZE)) {
                        ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   fs/ntfs/dir.c:1300:15: note: Left side of '||' is false
           if (unlikely((u8*)ia < kaddr || (u8*)ia > kaddr + PAGE_SIZE)) {
                        ^
   fs/ntfs/dir.c:1300:2: note: Taking false branch
           if (unlikely((u8*)ia < kaddr || (u8*)ia > kaddr + PAGE_SIZE)) {
           ^
   fs/ntfs/dir.c:1306:36: note: Access to field 'magic' results in a dereference of a null pointer (loaded from variable 'ia')
           if (unlikely(!ntfs_is_indx_record(ia->magic))) {
                                             ^
   fs/ntfs/layout.h:139:50: note: expanded from macro 'ntfs_is_indx_record'
   #define ntfs_is_indx_record(x)          ( ntfs_is_magic (x, INDX) )
                                                            ^
   fs/ntfs/layout.h:124:45: note: expanded from macro 'ntfs_is_magic'
   #define ntfs_is_magic(x, m)     __ntfs_is_magic(x, magic_##m)
                                                   ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   7 warnings generated.
>> fs/xfs/scrub/bmap.c:617:2: warning: Undefined or garbage value returned to caller [clang-analyzer-core.uninitialized.UndefReturn]
           return error;
           ^
   fs/xfs/scrub/bmap.c:738:9: note: Calling 'xchk_bmap'
           return xchk_bmap(sc, XFS_ATTR_FORK);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/scrub/bmap.c:635:26: note: 'whichfork' is not equal to 0
           struct xfs_ifork        *ifp = XFS_IFORK_PTR(ip, whichfork);
                                          ^
   fs/xfs/libxfs/xfs_inode_fork.h:98:3: note: expanded from macro 'XFS_IFORK_PTR'
           ((w) == XFS_DATA_FORK ? \
            ^~~
   fs/xfs/scrub/bmap.c:635:26: note: '?' condition is false
           struct xfs_ifork        *ifp = XFS_IFORK_PTR(ip, whichfork);
                                          ^
   fs/xfs/libxfs/xfs_inode_fork.h:98:3: note: expanded from macro 'XFS_IFORK_PTR'
           ((w) == XFS_DATA_FORK ? \
            ^
   fs/xfs/scrub/bmap.c:635:26: note: 'whichfork' is equal to 1
           struct xfs_ifork        *ifp = XFS_IFORK_PTR(ip, whichfork);
                                          ^
   fs/xfs/libxfs/xfs_inode_fork.h:100:4: note: expanded from macro 'XFS_IFORK_PTR'
                   ((w) == XFS_ATTR_FORK ? \
                    ^~~
   fs/xfs/scrub/bmap.c:635:26: note: '?' condition is true
           struct xfs_ifork        *ifp = XFS_IFORK_PTR(ip, whichfork);
                                          ^
   fs/xfs/libxfs/xfs_inode_fork.h:100:4: note: expanded from macro 'XFS_IFORK_PTR'
                   ((w) == XFS_ATTR_FORK ? \
                    ^
   fs/xfs/scrub/bmap.c:641:6: note: Assuming 'ifp' is non-null
           if (!ifp)
               ^~~~
   fs/xfs/scrub/bmap.c:641:2: note: Taking false branch
           if (!ifp)
           ^
   fs/xfs/scrub/bmap.c:644:15: note: 'whichfork' is not equal to XFS_DATA_FORK
           info.is_rt = whichfork == XFS_DATA_FORK && XFS_IS_REALTIME_INODE(ip);
                        ^~~~~~~~~
   fs/xfs/scrub/bmap.c:644:42: note: Left side of '&&' is false
           info.is_rt = whichfork == XFS_DATA_FORK && XFS_IS_REALTIME_INODE(ip);
                                                   ^
   fs/xfs/scrub/bmap.c:646:19: note: 'whichfork' is not equal to XFS_DATA_FORK
           info.is_shared = whichfork == XFS_DATA_FORK && xfs_is_reflink_inode(ip);
                            ^~~~~~~~~
   fs/xfs/scrub/bmap.c:646:46: note: Left side of '&&' is false
           info.is_shared = whichfork == XFS_DATA_FORK && xfs_is_reflink_inode(ip);
                                                       ^
   fs/xfs/scrub/bmap.c:649:2: note: Control jumps to 'case 1:'  at line 657
           switch (whichfork) {
           ^
   fs/xfs/scrub/bmap.c:658:7: note: Assuming the condition is false
                   if (!xfs_sb_version_hasattr(&mp->m_sb) &&
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/scrub/bmap.c:658:42: note: Left side of '&&' is false
                   if (!xfs_sb_version_hasattr(&mp->m_sb) &&
                                                          ^
   fs/xfs/scrub/bmap.c:661:3: note:  Execution continues on line 668
                   break;
                   ^
   fs/xfs/scrub/bmap.c:668:2: note: Control jumps to 'case XFS_DINODE_FMT_EXTENTS:'  at line 674
           switch (ifp->if_format) {
           ^
   fs/xfs/scrub/bmap.c:675:3: note:  Execution continues on line 691
                   break;
                   ^
   fs/xfs/scrub/bmap.c:691:6: note: Assuming the condition is false
           if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/scrub/bmap.c:691:2: note: Taking false branch
           if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
           ^
   fs/xfs/scrub/bmap.c:696:6: note: Assuming the condition is false
           if (!xchk_fblock_process_error(sc, whichfork, 0, &error))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/scrub/bmap.c:696:2: note: Taking false branch
           if (!xchk_fblock_process_error(sc, whichfork, 0, &error))
           ^
   fs/xfs/scrub/bmap.c:701:8: note: 'whichfork' is not equal to 0
           ifp = XFS_IFORK_PTR(ip, whichfork);
                 ^
   fs/xfs/libxfs/xfs_inode_fork.h:98:3: note: expanded from macro 'XFS_IFORK_PTR'
           ((w) == XFS_DATA_FORK ? \
            ^~~
   fs/xfs/scrub/bmap.c:701:8: note: '?' condition is false
           ifp = XFS_IFORK_PTR(ip, whichfork);
                 ^
   fs/xfs/libxfs/xfs_inode_fork.h:98:3: note: expanded from macro 'XFS_IFORK_PTR'
           ((w) == XFS_DATA_FORK ? \
            ^
   fs/xfs/scrub/bmap.c:701:8: note: 'whichfork' is equal to 1
           ifp = XFS_IFORK_PTR(ip, whichfork);
                 ^
   fs/xfs/libxfs/xfs_inode_fork.h:100:4: note: expanded from macro 'XFS_IFORK_PTR'
                   ((w) == XFS_ATTR_FORK ? \
                    ^~~
   fs/xfs/scrub/bmap.c:701:8: note: '?' condition is true
           ifp = XFS_IFORK_PTR(ip, whichfork);
                 ^
   fs/xfs/libxfs/xfs_inode_fork.h:100:4: note: expanded from macro 'XFS_IFORK_PTR'
                   ((w) == XFS_ATTR_FORK ? \

vim +617 fs/xfs/scrub/bmap.c

5e777b62b0bcb6 Darrick J. Wong   2018-03-23  571  
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  572  /* Make sure each rmap has a corresponding bmbt entry. */
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  573  STATIC int
c517b3aa02cff1 Darrick J. Wong   2018-07-19  574  xchk_bmap_check_rmaps(
1d8a748a8aa94a Darrick J. Wong   2018-07-19  575  	struct xfs_scrub	*sc,
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  576  	int			whichfork)
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  577  {
daf83964a3681c Christoph Hellwig 2020-05-18  578  	struct xfs_ifork	*ifp = XFS_IFORK_PTR(sc->ip, whichfork);
5fd68bdb5a87c9 Darrick J. Wong   2020-05-16  579  	bool			zero_size;
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  580  	int			error;
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  581  
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  582  	if (!xfs_sb_version_hasrmapbt(&sc->mp->m_sb) ||
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  583  	    whichfork == XFS_COW_FORK ||
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  584  	    (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  585  		return 0;
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  586  
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  587  	/* Don't support realtime rmap checks yet. */
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  588  	if (XFS_IS_REALTIME_INODE(sc->ip) && whichfork == XFS_DATA_FORK)
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  589  		return 0;
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  590  
5fd68bdb5a87c9 Darrick J. Wong   2020-05-16  591  	ASSERT(XFS_IFORK_PTR(sc->ip, whichfork) != NULL);
5fd68bdb5a87c9 Darrick J. Wong   2020-05-16  592  
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  593  	/*
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  594  	 * Only do this for complex maps that are in btree format, or for
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  595  	 * situations where we would seem to have a size but zero extents.
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  596  	 * The inode repair code can zap broken iforks, which means we have
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  597  	 * to flag this bmap as corrupt if there are rmaps that need to be
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  598  	 * reattached.
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  599  	 */
f7e67b20ecbbcb Christoph Hellwig 2020-05-18  600  
5fd68bdb5a87c9 Darrick J. Wong   2020-05-16  601  	if (whichfork == XFS_DATA_FORK)
5fd68bdb5a87c9 Darrick J. Wong   2020-05-16  602  		zero_size = i_size_read(VFS_I(sc->ip)) == 0;
5fd68bdb5a87c9 Darrick J. Wong   2020-05-16  603  	else
5fd68bdb5a87c9 Darrick J. Wong   2020-05-16  604  		zero_size = false;
5fd68bdb5a87c9 Darrick J. Wong   2020-05-16  605  
f7e67b20ecbbcb Christoph Hellwig 2020-05-18  606  	if (ifp->if_format != XFS_DINODE_FMT_BTREE &&
daf83964a3681c Christoph Hellwig 2020-05-18  607  	    (zero_size || ifp->if_nextents > 0))
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  608  		return 0;
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  609  
7354f20c8c6f61 Darrick J. Wong   2021-08-06  610  	for_each_perag(sc->mp, iter) {
7354f20c8c6f61 Darrick J. Wong   2021-08-06  611  		error = xchk_bmap_check_ag_rmaps(sc, whichfork, iter.pag);
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  612  		if (error)
934933c3eec9e4 Dave Chinner      2021-06-02  613  			break;
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  614  		if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  615  			break;
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  616  	}
934933c3eec9e4 Dave Chinner      2021-06-02 @617  	return error;
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  618  }
5e777b62b0bcb6 Darrick J. Wong   2018-03-23  619  

:::::: The code at line 617 was first introduced by commit
:::::: 934933c3eec9e4a5826d3d7a47aca0742337fded xfs: convert raw ag walks to use for_each_perag

:::::: TO: Dave Chinner <dchinner@redhat.com>
:::::: CC: Dave Chinner <david@fromorbit.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33329 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-08-07 15:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-07 15:10 [djwong-xfs:xfs-5.15-merge 23/25] fs/xfs/scrub/bmap.c:617:2: warning: Undefined or garbage value returned to caller [clang-analyzer-core.uninitialized.UndefReturn] 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.