"value":"In the Linux kernel, the following vulnerability has been resolved:\n\nmm/huge_memory: avoid PMD-size page cache if needed\n\nxarray can't support arbitrary page cache size. the largest and supported\npage cache size is defined as MAX_PAGECACHE_ORDER by commit 099d90642a71\n(\"mm/filemap: make MAX_PAGECACHE_ORDER acceptable to xarray\"). However,\nit's possible to have 512MB page cache in the huge memory's collapsing\npath on ARM64 system whose base page size is 64KB. 512MB page cache is\nbreaking the limitation and a warning is raised when the xarray entry is\nsplit as shown in the following example.\n\n[root@dhcp-10-26-1-207 ~]# cat /proc/1/smaps | grep KernelPageSize\nKernelPageSize: 64 kB\n[root@dhcp-10-26-1-207 ~]# cat /tmp/test.c\n :\nint main(int argc, char **argv)\n{\n\tconst char *filename = TEST_XFS_FILENAME;\n\tint fd = 0;\n\tvoid *buf = (void *)-1, *p;\n\tint pgsize = getpagesize();\n\tint ret = 0;\n\n\tif (pgsize != 0x10000) {\n\t\tfprintf(stdout, \"System with 64KB base page size is required!\\n\");\n\t\treturn -EPERM;\n\t}\n\n\tsystem(\"echo 0 > /sys/devices/virtual/bdi/253:0/read_ahead_kb\");\n\tsystem(\"echo 1 > /proc/sys/vm/drop_caches\");\n\n\t/* Open the xfs file */\n\tfd = open(filename, O_RDONLY);\n\tassert(fd > 0);\n\n\t/* Create VMA */\n\tbuf = mmap(NULL, TEST_MEM_SIZE, PROT_READ, MAP_SHARED, fd, 0);\n\tassert(buf != (void *)-1);\n\tfprintf(stdout, \"mapped buffer at 0x%p\\n\", buf);\n\n\t/* Populate VMA */\n\tret = madvise(buf, TEST_MEM_SIZE, MADV_NOHUGEPAGE);\n\tassert(ret == 0);\n\tret = madvise(buf, TEST_MEM_SIZE, MADV_POPULATE_READ);\n\tassert(ret == 0);\n\n\t/* Collapse VMA */\n\tret = madvise(buf, TEST_MEM_SIZE, MADV_HUGEPAGE);\n\tassert(ret == 0);\n\tret = madvise(buf, TEST_MEM_SIZE, MADV_COLLAPSE);\n\tif (ret) {\n\t\tfprintf(stdout, \"Error %d to madvise(MADV_COLLAPSE)\\n\",errno);\n\t\tgotoout;\n\t}\n\n\t/*Splitxarrayentry.Writepermissionisneeded*/\n\tmunmap(buf,TEST_MEM_SIZE);\n\tbuf=(void*)-1;\n\tclose(fd);\n\tfd=open(filename,O_RDWR);\n\tassert(fd>0);\n\tfallocate(fd,FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE,\n\t\tTEST_MEM_SIZE-pgsize,pgsize);\nout:\n\tif(buf!=(void*)-1)\n\t\tmunmap(buf,TEST_MEM_SIZE);\n\tif(fd>0)\n\t\tclose(fd);\n\n\treturnret;\n}\n\n[root@dhcp-10-26-1-207~]#gcc/tmp/test.c-o/tmp/test\n[root@dhcp-10-26-1-207~]#/tmp/test\n------------[cuthere]------------\nWARNING:CPU:25PID:7560atlib/xarray.c:1025xas_split_alloc+0xf8/0x128\nModuleslinkedin:nft_fib_inetnft_fib_ipv4nft_fib_ipv6nft_fib\\\nnft_reject_inetnf_reject_ipv4nf_reject_ipv6nft_rejectnft_ct\\\nnft_chain_natnf_natnf_conntracknf_defrag_ipv6nf_defrag_ipv4\\\nip_setrfkillnf_tablesnfnetlinkvfatfatvirtio_balloondrmfuse\\\nxfslibcrc32ccrct10dif_ceghash_cesha2_cesha256_arm64virtio_net\\\nsha1_cenet_failovervirtio_blkvirtio_consolefailoverdimlibvirtio_mmio\nCPU:25PID:7560Comm:testKdump:loadedNottainted6.10.0-rc7-gavin+#9\nHardwarename:QEMUKVMVirtualMachine,BIOSedk2-20240524-1.el905/24/2024\npstate:83400005(Nzcvdaif+PAN-UAO+TCO+DIT-SSBSBTYPE=--)\npc:xas_split_alloc+0xf8/0x128\nlr:split_huge_page_to_list_to_order+0x1c4/0x780\nsp:ffff8000ac32f660\nx29:ffff8000ac32f660x28:ffff0000e0969eb0x27:ffff8000ac32f6c0\nx26:0000000000000c40x25:ffff0000e0969eb0x24:000000000000000d\nx23:ffff8000ac32f6c0x22:ffffffdfc0700000x21:0000000000000000\nx20:0000000000000000x19:ffffffdfc0700000x18:0000000000000000\nx17:0000000000000000x16:ffffd5f3708ffc70x15:0000000000000000\nx14:0000000000000000x13:0000000000000000x12:0000000000000000\nx11:ffffffffffffffc0x10:0000000000000040x9:ffffd5f3708e692c\nx8:0000000000000003x7:0000000000000000x6:ffff0000e0969eb8\nx5:ffffd5f37289e378x4:0000000000000000x3:0000000000000c40\nx2:000000000000000dx1:000000000000000cx0:0000000000000000\nCalltrace:\nxas_split_alloc+0xf8/0x128\nsplit_huge_page_to_list_to_order+0x1c4/0x780\ntruncate_inode_partial_folio+0