CC: [email protected] CC: [email protected] BCC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Joao Martins <[email protected]> CC: Muchun Song <[email protected]> CC: Andrew Morton <[email protected]> CC: Linux Memory Management List <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: e7d6987e09a328d4a949701db40ef63fbb970670 commit: 7e0f4d6f220853c6b9272c90734f4e4dc30e0303 [5080/5845] mm/sparse-vmemmap: improve memory savings for compound devmaps :::::: branch date: 30 hours ago :::::: commit date: 3 days ago config: x86_64-randconfig-c007 (https://download.01.org/0day-ci/archive/20220423/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 5bd87350a5ae429baf8f373cb226a57b62f87280) 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/next/linux-next.git/commit/?id=7e0f4d6f220853c6b9272c90734f4e4dc30e0303 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout 7e0f4d6f220853c6b9272c90734f4e4dc30e0303 # save the config file 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 <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk' __underlying_memset(p, c, __fortify_size); \ ^~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset' #define __underlying_memset __builtin_memset ^~~~~~~~~~~~~~~~ fs/gfs2/glock.c:2414:3: warning: Call to function 'sprintf' is insecure as it does not provide bounding of the memory buffer or security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] sprintf(fs_id_buf, "fsid=%s: ", sdp->sd_fsname); ^~~~~~~ fs/gfs2/glock.c:2414:3: note: Call to function 'sprintf' is insecure as it does not provide bounding of the memory buffer or security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 sprintf(fs_id_buf, "fsid=%s: ", sdp->sd_fsname); ^~~~~~~ include/linux/jhash.h:127:5: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] b += k[1]; ^ fs/gfs2/glock.c:1747:10: note: Calling 'gfs2_glock_get' error = gfs2_glock_get(sdp, number, glops, CREATE, &gl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/gfs2/glock.c:1165:7: note: Calling 'find_insert_glock' gl = find_insert_glock(&name, NULL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/gfs2/glock.c:1109:26: note: Calling 'glock_waitqueue' wait_queue_head_t *wq = glock_waitqueue(name); ^~~~~~~~~~~~~~~~~~~~~ fs/gfs2/glock.c:108:13: note: Calling 'jhash2' u32 hash = jhash2((u32 *)name, ht_parms.key_len / 4, 0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/jhash.h:125:2: note: Loop condition is true. Entering loop body while (length > 3) { ^ include/linux/jhash.h:127:5: note: Assigned value is garbage or undefined b += k[1]; ^ ~~~~ Suppressed 50 warnings (50 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. 47 warnings generated. mm/backing-dev.c:293: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(wb, 0, sizeof(*wb)); ^ include/linux/fortify-string.h:272:25: note: expanded from macro 'memset' #define memset(p, c, s) __fortify_memset_chk(p, c, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk' __underlying_memset(p, c, __fortify_size); \ ^~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset' #define __underlying_memset __builtin_memset ^~~~~~~~~~~~~~~~ mm/backing-dev.c:293: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(wb, 0, sizeof(*wb)); ^ include/linux/fortify-string.h:272:25: note: expanded from macro 'memset' #define memset(p, c, s) __fortify_memset_chk(p, c, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk' __underlying_memset(p, c, __fortify_size); \ ^~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset' #define __underlying_memset __builtin_memset ^~~~~~~~~~~~~~~~ mm/backing-dev.c:880:2: warning: Call to function 'vsnprintf' 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 'vsnprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] vsnprintf(bdi->dev_name, sizeof(bdi->dev_name), fmt, args); ^~~~~~~~~ mm/backing-dev.c:880:2: note: Call to function 'vsnprintf' 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 'vsnprintf_s' in case of C11 vsnprintf(bdi->dev_name, sizeof(bdi->dev_name), fmt, args); ^~~~~~~~~ Suppressed 45 warnings (45 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. 44 warnings generated. Suppressed 44 warnings (44 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. 45 warnings generated. Suppressed 45 warnings (44 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. 46 warnings generated. mm/sparse-vmemmap.c:573: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(p, 0, size); ^ include/linux/fortify-string.h:272:25: note: expanded from macro 'memset' #define memset(p, c, s) __fortify_memset_chk(p, c, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk' __underlying_memset(p, c, __fortify_size); \ ^~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset' #define __underlying_memset __builtin_memset ^~~~~~~~~~~~~~~~ mm/sparse-vmemmap.c:573: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(p, 0, size); ^ include/linux/fortify-string.h:272:25: note: expanded from macro 'memset' #define memset(p, c, s) __fortify_memset_chk(p, c, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:265:2: note: expanded from macro '__fortify_memset_chk' __underlying_memset(p, c, __fortify_size); \ ^~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:47:29: note: expanded from macro '__underlying_memset' #define __underlying_memset __builtin_memset ^~~~~~~~~~~~~~~~ >> mm/sparse-vmemmap.c:740:17: warning: Value stored to 'next' during its >> initialization is never read [clang-analyzer-deadcode.DeadStores] unsigned long next = addr, last = addr + size; ^~~~ ~~~~ mm/sparse-vmemmap.c:740:17: note: Value stored to 'next' during its initialization is never read unsigned long next = addr, last = addr + size; ^~~~ ~~~~ Suppressed 44 warnings (44 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. 36 warnings generated. Suppressed 36 warnings (36 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. 18 warnings generated. Suppressed 18 warnings (18 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. 24 warnings generated. Suppressed 24 warnings (24 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. 24 warnings generated. Suppressed 24 warnings (24 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. 54 warnings generated. drivers/clk/clk.c:1972:3: warning: Value stored to 'best_parent_rate' is never read [clang-analyzer-deadcode.DeadStores] best_parent_rate = parent->rate; ^ ~~~~~~~~~~~~ drivers/clk/clk.c:1972:3: note: Value stored to 'best_parent_rate' is never read best_parent_rate = parent->rate; ^ ~~~~~~~~~~~~ drivers/clk/clk.c:2793:3: 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(&core->duty, &core->parent->duty, sizeof(core->duty)); ^ include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy' #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk' __underlying_##op(p, q, __fortify_size); \ ^~~~~~~~~~~~~~~~~ note: expanded from here include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy' #define __underlying_memcpy __builtin_memcpy ^~~~~~~~~~~~~~~~ drivers/clk/clk.c:2793:3: 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(&core->duty, &core->parent->duty, sizeof(core->duty)); ^ include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy' #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk' __underlying_##op(p, q, __fortify_size); \ ^~~~~~~~~~~~~~~~~ note: expanded from here include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy' #define __underlying_memcpy __builtin_memcpy ^~~~~~~~~~~~~~~~ drivers/clk/clk.c:2821:3: 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(&core->duty, duty, sizeof(*duty)); ^ include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy' #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk' __underlying_##op(p, q, __fortify_size); \ ^~~~~~~~~~~~~~~~~ note: expanded from here include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy' #define __underlying_memcpy __builtin_memcpy ^~~~~~~~~~~~~~~~ drivers/clk/clk.c:2821:3: 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(&core->duty, duty, sizeof(*duty)); ^ include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy' #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk' __underlying_##op(p, q, __fortify_size); \ ^~~~~~~~~~~~~~~~~ note: expanded from here include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy' #define __underlying_memcpy __builtin_memcpy ^~~~~~~~~~~~~~~~ drivers/clk/clk.c:2836:3: 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(&core->duty, &core->parent->duty, sizeof(core->duty)); ^ include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy' #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk' __underlying_##op(p, q, __fortify_size); \ ^~~~~~~~~~~~~~~~~ note: expanded from here include/linux/fortify-string.h:45:29: note: expanded from macro '__underlying_memcpy' #define __underlying_memcpy __builtin_memcpy ^~~~~~~~~~~~~~~~ drivers/clk/clk.c:2836:3: 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(&core->duty, &core->parent->duty, sizeof(core->duty)); ^ include/linux/fortify-string.h:369:26: note: expanded from macro 'memcpy' #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/fortify-string.h:362:2: note: expanded from macro '__fortify_memcpy_chk' __underlying_##op(p, q, __fortify_size); \ ^~~~~~~~~~~~~~~~~ vim +/next +740 mm/sparse-vmemmap.c 7e0f4d6f220853 Joao Martins 2022-04-21 715 7e0f4d6f220853 Joao Martins 2022-04-21 716 static int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, 7e0f4d6f220853 Joao Martins 2022-04-21 717 unsigned long start, 7e0f4d6f220853 Joao Martins 2022-04-21 718 unsigned long end, int node, 7e0f4d6f220853 Joao Martins 2022-04-21 719 struct dev_pagemap *pgmap) 7e0f4d6f220853 Joao Martins 2022-04-21 720 { 7e0f4d6f220853 Joao Martins 2022-04-21 721 unsigned long size, addr; 7e0f4d6f220853 Joao Martins 2022-04-21 722 pte_t *pte; 7e0f4d6f220853 Joao Martins 2022-04-21 723 int rc; 7e0f4d6f220853 Joao Martins 2022-04-21 724 7e0f4d6f220853 Joao Martins 2022-04-21 725 if (reuse_compound_section(start_pfn, pgmap)) { 7e0f4d6f220853 Joao Martins 2022-04-21 726 pte = compound_section_tail_page(start); 7e0f4d6f220853 Joao Martins 2022-04-21 727 if (!pte) 7e0f4d6f220853 Joao Martins 2022-04-21 728 return -ENOMEM; 7e0f4d6f220853 Joao Martins 2022-04-21 729 7e0f4d6f220853 Joao Martins 2022-04-21 730 /* 7e0f4d6f220853 Joao Martins 2022-04-21 731 * Reuse the page that was populated in the prior iteration 7e0f4d6f220853 Joao Martins 2022-04-21 732 * with just tail struct pages. 7e0f4d6f220853 Joao Martins 2022-04-21 733 */ 7e0f4d6f220853 Joao Martins 2022-04-21 734 return vmemmap_populate_range(start, end, node, NULL, 7e0f4d6f220853 Joao Martins 2022-04-21 735 pte_page(*pte)); 7e0f4d6f220853 Joao Martins 2022-04-21 736 } 7e0f4d6f220853 Joao Martins 2022-04-21 737 7e0f4d6f220853 Joao Martins 2022-04-21 738 size = min(end - start, pgmap_vmemmap_nr(pgmap) * sizeof(struct page)); 7e0f4d6f220853 Joao Martins 2022-04-21 739 for (addr = start; addr < end; addr += size) { 7e0f4d6f220853 Joao Martins 2022-04-21 @740 unsigned long next = addr, last = addr + size; 7e0f4d6f220853 Joao Martins 2022-04-21 741 7e0f4d6f220853 Joao Martins 2022-04-21 742 /* Populate the head page vmemmap page */ 7e0f4d6f220853 Joao Martins 2022-04-21 743 pte = vmemmap_populate_address(addr, node, NULL, NULL); 7e0f4d6f220853 Joao Martins 2022-04-21 744 if (!pte) 7e0f4d6f220853 Joao Martins 2022-04-21 745 return -ENOMEM; 7e0f4d6f220853 Joao Martins 2022-04-21 746 7e0f4d6f220853 Joao Martins 2022-04-21 747 /* Populate the tail pages vmemmap page */ 7e0f4d6f220853 Joao Martins 2022-04-21 748 next = addr + PAGE_SIZE; 7e0f4d6f220853 Joao Martins 2022-04-21 749 pte = vmemmap_populate_address(next, node, NULL, NULL); 7e0f4d6f220853 Joao Martins 2022-04-21 750 if (!pte) 7e0f4d6f220853 Joao Martins 2022-04-21 751 return -ENOMEM; 7e0f4d6f220853 Joao Martins 2022-04-21 752 7e0f4d6f220853 Joao Martins 2022-04-21 753 /* 7e0f4d6f220853 Joao Martins 2022-04-21 754 * Reuse the previous page for the rest of tail pages 7e0f4d6f220853 Joao Martins 2022-04-21 755 * See layout diagram in Documentation/vm/vmemmap_dedup.rst 7e0f4d6f220853 Joao Martins 2022-04-21 756 */ 7e0f4d6f220853 Joao Martins 2022-04-21 757 next += PAGE_SIZE; 7e0f4d6f220853 Joao Martins 2022-04-21 758 rc = vmemmap_populate_range(next, last, node, NULL, 7e0f4d6f220853 Joao Martins 2022-04-21 759 pte_page(*pte)); 7e0f4d6f220853 Joao Martins 2022-04-21 760 if (rc) 7e0f4d6f220853 Joao Martins 2022-04-21 761 return -ENOMEM; 7e0f4d6f220853 Joao Martins 2022-04-21 762 } 7e0f4d6f220853 Joao Martins 2022-04-21 763 7e0f4d6f220853 Joao Martins 2022-04-21 764 return 0; 73e8e90545569b Joao Martins 2022-04-21 765 } 73e8e90545569b Joao Martins 2022-04-21 766 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
