CC: l...@lists.linux.dev CC: kbuild-...@lists.01.org BCC: l...@intel.com In-Reply-To: <1652181274-136198-3-git-send-email-john.ga...@huawei.com> References: <1652181274-136198-3-git-send-email-john.ga...@huawei.com> TO: John Garry <john.ga...@huawei.com>
Hi John, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on axboe-block/for-next] [also build test WARNING on linux/master linus/master v5.18-rc6 next-20220510] [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/intel-lab-lkp/linux/commits/John-Garry/sbitmap-NUMA-node-spreading/20220510-192122 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next :::::: branch date: 21 hours ago :::::: commit date: 21 hours ago config: i386-randconfig-c001-20220509 (https://download.01.org/0day-ci/archive/20220511/202205111616.bvssfweh-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 18dd123c56754edf62c7042dcf23185c3727610f) 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/9cb4cd7060790dcb3d7f9405c11a0da884a0c616 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review John-Garry/sbitmap-NUMA-node-spreading/20220510-192122 git checkout 9cb4cd7060790dcb3d7f9405c11a0da884a0c616 # save the config file COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=i386 clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> clang-analyzer warnings: (new ones prefixed by >>) ^ fs/ntfs/mft.c:1798:2: note: Taking false branch if (IS_ERR(rl)) { ^ fs/ntfs/mft.c:1811:2: note: Taking false branch ntfs_debug("Allocated %lli clusters.", (long long)nr); ^ fs/ntfs/debug.h:39:2: note: expanded from macro 'ntfs_debug' if (0) \ ^ fs/ntfs/mft.c:1811:2: note: Loop condition is false. Exiting loop ntfs_debug("Allocated %lli clusters.", (long long)nr); ^ fs/ntfs/debug.h:37:35: note: expanded from macro 'ntfs_debug' #define ntfs_debug(fmt, ...) \ ^ fs/ntfs/mft.c:1813:2: note: Loop condition is false. Execution continues on line 1816 for (; rl[1].length; rl++) ^ fs/ntfs/mft.c:1817:2: note: Taking true branch if (IS_ERR(mrec)) { ^ fs/ntfs/mft.c:1820:3: note: Control jumps to line 1953 goto undo_alloc; ^ fs/ntfs/mft.c:1953:6: note: Assuming the condition is false if (ntfs_cluster_free(mft_ni, old_last_vcn, -1, ctx) < 0) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/ntfs/mft.c:1953:2: note: Taking false branch if (ntfs_cluster_free(mft_ni, old_last_vcn, -1, ctx) < 0) { ^ fs/ntfs/mft.c:1958:6: note: Access to field 'attr' results in a dereference of a null pointer (loaded from variable 'ctx') a = ctx->attr; ^~~ fs/ntfs/mft.c:2019:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memset(m, 0, vol->mft_record_size); ^ arch/x86/include/asm/string_32.h:195:29: note: expanded from macro 'memset' #define memset(s, c, count) __builtin_memset(s, c, count) ^~~~~~~~~~~~~~~~ fs/ntfs/mft.c:2019:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 memset(m, 0, vol->mft_record_size); ^ arch/x86/include/asm/string_32.h:195:29: note: expanded from macro 'memset' #define memset(s, c, count) __builtin_memset(s, c, count) ^~~~~~~~~~~~~~~~ fs/ntfs/mft.c:2813:3: warning: Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memmove_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memmove(extent_nis, extent_nis + 1, (base_ni->nr_extents - i) * ^~~~~~~ fs/ntfs/mft.c:2813:3: note: Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memmove_s' in case of C11 memmove(extent_nis, extent_nis + 1, (base_ni->nr_extents - i) * ^~~~~~~ fs/ntfs/mft.c:2893:4: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memcpy(extent_nis, base_ni->ext.extent_ntfs_inos, ^ arch/x86/include/asm/string_32.h:150:25: note: expanded from macro 'memcpy' #define memcpy(t, f, n) __builtin_memcpy(t, f, n) ^~~~~~~~~~~~~~~~ fs/ntfs/mft.c:2893:4: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 memcpy(extent_nis, base_ni->ext.extent_ntfs_inos, ^ arch/x86/include/asm/string_32.h:150:25: note: expanded from macro 'memcpy' #define memcpy(t, f, n) __builtin_memcpy(t, f, n) ^~~~~~~~~~~~~~~~ Suppressed 43 warnings (43 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. 20 warnings generated. lib/oid_registry.c:142:16: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] ret = count = snprintf(buffer, bufsize, "%u.%u", n / 40, n % 40); ^~~~~~~~ lib/oid_registry.c:142:16: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 ret = count = snprintf(buffer, bufsize, "%u.%u", n / 40, n % 40); ^~~~~~~~ lib/oid_registry.c:149:3: warning: Value stored to 'num' is never read [clang-analyzer-deadcode.DeadStores] num = 0; ^ ~ lib/oid_registry.c:149:3: note: Value stored to 'num' is never read num = 0; ^ ~ lib/oid_registry.c:163:18: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] ret += count = snprintf(buffer, bufsize, ".%lu", num); ^~~~~~~~ lib/oid_registry.c:163:18: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 ret += count = snprintf(buffer, bufsize, ".%lu", num); ^~~~~~~~ lib/oid_registry.c:173:2: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] snprintf(buffer, bufsize, "(bad)"); ^~~~~~~~ lib/oid_registry.c:173:2: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 snprintf(buffer, bufsize, "(bad)"); ^~~~~~~~ Suppressed 16 warnings (16 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. 16 warnings generated. Suppressed 16 warnings (16 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. 19 warnings generated. Suppressed 19 warnings (12 in non-user code, 7 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. 31 warnings generated. >> lib/sbitmap.c:138:63: warning: The expression is an uninitialized value. The >> computed value will also be garbage >> [clang-analyzer-core.uninitialized.Assign] for (index = 0, nid = 0; index < sb->map_nr; index++, map++, map_nr_cnt++) { ^ lib/sbitmap.c:481:8: note: Calling 'sbitmap_init_node' ret = sbitmap_init_node(&sbq->sb, depth, shift, flags, node, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lib/sbitmap.c:103:11: note: 'map_nr_cnt' declared without an initial value int nid, map_nr_cnt; ^~~~~~~~~~ lib/sbitmap.c:105:6: note: Assuming 'shift' is >= 0 if (shift < 0) ^~~~~~~~~ lib/sbitmap.c:105:2: note: Taking false branch if (shift < 0) ^ lib/sbitmap.c:109:6: note: Assuming 'bits_per_word' is <= BITS_PER_LONG if (bits_per_word > BITS_PER_LONG) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lib/sbitmap.c:109:2: note: Taking false branch if (bits_per_word > BITS_PER_LONG) ^ lib/sbitmap.c:117:6: note: Assuming 'depth' is not equal to 0 if (depth == 0) { ^~~~~~~~~~ lib/sbitmap.c:117:2: note: Taking false branch if (depth == 0) { ^ lib/sbitmap.c:122:6: note: Assuming 'num_nodes' is <= field 'map_nr' if (sb->map_nr < num_nodes) { ^~~~~~~~~~~~~~~~~~~~~~ lib/sbitmap.c:122:2: note: Taking false branch if (sb->map_nr < num_nodes) { ^ lib/sbitmap.c:127:6: note: 'alloc_hint' is true if (alloc_hint) { ^~~~~~~~~~ lib/sbitmap.c:127:2: note: Taking true branch if (alloc_hint) { ^ lib/sbitmap.c:128:7: note: Calling 'init_alloc_hint' if (init_alloc_hint(sb, flags)) ^~~~~~~~~~~~~~~~~~~~~~~~~~ lib/sbitmap.c:28:6: note: Assuming field 'alloc_hint' is non-null if (!sb->alloc_hint) ^~~~~~~~~~~~~~~ lib/sbitmap.c:28:2: note: Taking false branch if (!sb->alloc_hint) ^ lib/sbitmap.c:31:6: note: 'depth' is not equal to 0 if (depth && !sb->round_robin) { ^~~~~ lib/sbitmap.c:31:6: note: Left side of '&&' is true lib/sbitmap.c:31:15: note: Assuming field 'round_robin' is true if (depth && !sb->round_robin) { ^~~~~~~~~~~~~~~~ lib/sbitmap.c:31:2: note: Taking false branch if (depth && !sb->round_robin) { ^ lib/sbitmap.c:39:2: note: Returning without writing to 'sb->map', which participates in a condition later return 0; ^ lib/sbitmap.c:128:7: note: Returning from 'init_alloc_hint' if (init_alloc_hint(sb, flags)) ^~~~~~~~~~~~~~~~~~~~~~~~~~ lib/sbitmap.c:128:3: note: Taking false branch if (init_alloc_hint(sb, flags)) ^ lib/sbitmap.c:135:6: note: Assuming field 'map' is non-null if (!sb->map) ^~~~~~~~ lib/sbitmap.c:135:2: note: Taking false branch if (!sb->map) ^ lib/sbitmap.c:138:27: note: 'index' is < field 'map_nr' for (index = 0, nid = 0; index < sb->map_nr; index++, map++, map_nr_cnt++) { ^~~~~ lib/sbitmap.c:138:2: note: Loop condition is true. Entering loop body for (index = 0, nid = 0; index < sb->map_nr; index++, map++, map_nr_cnt++) { ^ lib/sbitmap.c:141:3: note: Taking true branch if ((index % sb->map_nr_per_node) == 0) { ^ lib/sbitmap.c:144:8: note: 'index' is equal to 0 if (index == 0) { ^~~~~ lib/sbitmap.c:144:4: note: Taking true branch if (index == 0) { ^ lib/sbitmap.c:152:8: note: Assuming 'map' is non-null if (!map) ^~~~ lib/sbitmap.c:152:4: note: Taking false branch if (!map) ^ lib/sbitmap.c:138:63: note: The expression is an uninitialized value. The computed value will also be garbage for (index = 0, nid = 0; index < sb->map_nr; index++, map++, map_nr_cnt++) { ^~~~~~~~~~ Suppressed 30 warnings (29 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. 36 warnings generated. Suppressed 36 warnings (36 in non-user code). vim +138 lib/sbitmap.c b2dbff1bb893d5 Jens Axboe 2018-12-11 95 88459642cba452 Omar Sandoval 2016-09-17 96 int sbitmap_init_node(struct sbitmap *sb, unsigned int depth, int shift, c548e62bcf6adc Ming Lei 2021-01-22 97 gfp_t flags, int node, bool round_robin, c548e62bcf6adc Ming Lei 2021-01-22 98 bool alloc_hint) 88459642cba452 Omar Sandoval 2016-09-17 99 { 88459642cba452 Omar Sandoval 2016-09-17 100 unsigned int bits_per_word; 829ed3bea2e697 John Garry 2022-05-10 101 struct sbitmap_word *map; 9cb4cd7060790d John Garry 2022-05-10 102 int index, num_nodes = num_online_nodes(); 9cb4cd7060790d John Garry 2022-05-10 103 int nid, map_nr_cnt; 88459642cba452 Omar Sandoval 2016-09-17 104 2d13b1ea9f4aff Ming Lei 2021-01-22 105 if (shift < 0) 2d13b1ea9f4aff Ming Lei 2021-01-22 106 shift = sbitmap_calculate_shift(depth); 2d13b1ea9f4aff Ming Lei 2021-01-22 107 88459642cba452 Omar Sandoval 2016-09-17 108 bits_per_word = 1U << shift; 88459642cba452 Omar Sandoval 2016-09-17 109 if (bits_per_word > BITS_PER_LONG) 88459642cba452 Omar Sandoval 2016-09-17 110 return -EINVAL; 88459642cba452 Omar Sandoval 2016-09-17 111 88459642cba452 Omar Sandoval 2016-09-17 112 sb->shift = shift; 88459642cba452 Omar Sandoval 2016-09-17 113 sb->depth = depth; 88459642cba452 Omar Sandoval 2016-09-17 114 sb->map_nr = DIV_ROUND_UP(sb->depth, bits_per_word); efe1f3a1d5833c Ming Lei 2021-01-22 115 sb->round_robin = round_robin; 88459642cba452 Omar Sandoval 2016-09-17 116 88459642cba452 Omar Sandoval 2016-09-17 117 if (depth == 0) { 88459642cba452 Omar Sandoval 2016-09-17 118 sb->map = NULL; 88459642cba452 Omar Sandoval 2016-09-17 119 return 0; 88459642cba452 Omar Sandoval 2016-09-17 120 } 88459642cba452 Omar Sandoval 2016-09-17 121 9cb4cd7060790d John Garry 2022-05-10 122 if (sb->map_nr < num_nodes) { 9cb4cd7060790d John Garry 2022-05-10 123 sb->map_nr_per_node = 1; 9cb4cd7060790d John Garry 2022-05-10 124 } else { 9cb4cd7060790d John Garry 2022-05-10 125 sb->map_nr_per_node = sb->map_nr / num_nodes; 9cb4cd7060790d John Garry 2022-05-10 126 } c548e62bcf6adc Ming Lei 2021-01-22 127 if (alloc_hint) { c548e62bcf6adc Ming Lei 2021-01-22 128 if (init_alloc_hint(sb, flags)) c548e62bcf6adc Ming Lei 2021-01-22 129 return -ENOMEM; c548e62bcf6adc Ming Lei 2021-01-22 130 } else { c548e62bcf6adc Ming Lei 2021-01-22 131 sb->alloc_hint = NULL; c548e62bcf6adc Ming Lei 2021-01-22 132 } c548e62bcf6adc Ming Lei 2021-01-22 133 863a66cdb4df25 Ming Lei 2022-03-16 134 sb->map = kvzalloc_node(sb->map_nr * sizeof(*sb->map), flags, node); 9cb4cd7060790d John Garry 2022-05-10 135 if (!sb->map) 9cb4cd7060790d John Garry 2022-05-10 136 goto err_map; 9cb4cd7060790d John Garry 2022-05-10 137 9cb4cd7060790d John Garry 2022-05-10 @138 for (index = 0, nid = 0; index < sb->map_nr; index++, map++, map_nr_cnt++) { 9cb4cd7060790d John Garry 2022-05-10 139 struct sbitmap_word **_map; 9cb4cd7060790d John Garry 2022-05-10 140 9cb4cd7060790d John Garry 2022-05-10 141 if ((index % sb->map_nr_per_node) == 0) { 9cb4cd7060790d John Garry 2022-05-10 142 int cnt; 9cb4cd7060790d John Garry 2022-05-10 143 9cb4cd7060790d John Garry 2022-05-10 144 if (index == 0) { 9cb4cd7060790d John Garry 2022-05-10 145 cnt = sb->map_nr_per_node + 9cb4cd7060790d John Garry 2022-05-10 146 (sb->map_nr % sb->map_nr_per_node); 9cb4cd7060790d John Garry 2022-05-10 147 } else { 9cb4cd7060790d John Garry 2022-05-10 148 cnt = sb->map_nr_per_node; c548e62bcf6adc Ming Lei 2021-01-22 149 } 88459642cba452 Omar Sandoval 2016-09-17 150 9cb4cd7060790d John Garry 2022-05-10 151 map = kvzalloc_node(cnt * sizeof(**sb->map), flags, nid); 829ed3bea2e697 John Garry 2022-05-10 152 if (!map) 9cb4cd7060790d John Garry 2022-05-10 153 goto err_map_numa; 9cb4cd7060790d John Garry 2022-05-10 154 nid++; 9cb4cd7060790d John Garry 2022-05-10 155 } 829ed3bea2e697 John Garry 2022-05-10 156 829ed3bea2e697 John Garry 2022-05-10 157 _map = &sb->map[index]; 829ed3bea2e697 John Garry 2022-05-10 158 *_map = map; 829ed3bea2e697 John Garry 2022-05-10 159 } 829ed3bea2e697 John Garry 2022-05-10 160 88459642cba452 Omar Sandoval 2016-09-17 161 return 0; 9cb4cd7060790d John Garry 2022-05-10 162 err_map_numa: 9cb4cd7060790d John Garry 2022-05-10 163 for (index = 0; index < sb->map_nr; index++, map++) { 9cb4cd7060790d John Garry 2022-05-10 164 if ((index % sb->map_nr_per_node) == 0) { 9cb4cd7060790d John Garry 2022-05-10 165 kfree(map); 9cb4cd7060790d John Garry 2022-05-10 166 } 9cb4cd7060790d John Garry 2022-05-10 167 } 9cb4cd7060790d John Garry 2022-05-10 168 err_map: 9cb4cd7060790d John Garry 2022-05-10 169 free_percpu(sb->alloc_hint); 9cb4cd7060790d John Garry 2022-05-10 170 9cb4cd7060790d John Garry 2022-05-10 171 return -ENOMEM; 88459642cba452 Omar Sandoval 2016-09-17 172 } 88459642cba452 Omar Sandoval 2016-09-17 173 EXPORT_SYMBOL_GPL(sbitmap_init_node); 88459642cba452 Omar Sandoval 2016-09-17 174 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org