Description
In the Linux kernel, the following vulnerability has been resolved: mm/mempool: fix poisoning order>0 pages with HIGHMEM The kernel test has reported: BUG: unable to handle page fault for address: fffba000 #PF: supervisor write access in kernel mode #PF: error_code(0x0002) - not-present page *pde = 03171067 *pte = 00000000 Oops: Oops: 0002 [#1] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Tainted: G T 6.18.0-rc2-00031-gec7f31b2a2d3 #1 NONE a1d066dfe789f54bc7645c7989957d2bdee593ca Tainted: [T]=RANDSTRUCT Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 EIP: memset (arch/x86/include/asm/string_32.h:168 arch/x86/lib/memcpy_32.c:17) Code: a5 8b 4d f4 83 e1 03 74 02 f3 a4 83 c4 04 5e 5f 5d 2e e9 73 41 01 00 90 90 90 3e 8d 74 26 00 55 89 e5 57 56 89 c6 89 d0 89 f7 <f3> aa 89 f0 5e 5f 5d 2e e9 53 41 01 00 cc cc cc 55 89 e5 53 57 56 EAX: 0000006b EBX: 00000015 ECX: 001fefff EDX: 0000006b ESI: fffb9000 EDI: fffba000 EBP: c611fbf0 ESP: c611fbe8 DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068 EFLAGS: 00010287 CR0: 80050033 CR2: fffba000 CR3: 0316e000 CR4: 00040690 Call Trace: poison_element (mm/mempool.c:83 mm/mempool.c:102) mempool_init_node (mm/mempool.c:142 mm/mempool.c:226) mempool_init_noprof (mm/mempool.c:250 (discriminator 1)) ? mempool_alloc_pages (mm/mempool.c:640) bio_integrity_initfn (block/bio-integrity.c:483 (discriminator 8)) ? mempool_alloc_pages (mm/mempool.c:640) do_one_initcall (init/main.c:1283) Christoph found out this is due to the poisoning code not dealing properly with CONFIG_HIGHMEM because only the first page is mapped but then the whole potentially high-order page is accessed. We could give up on HIGHMEM here, but it's straightforward to fix this with a loop that's mapping, poisoning or checking and unmapping individual pages.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
bdfedb76f4f5aa5e37380e3b71adee4a39f30fc6 to < ea4131665107e66ece90e66bcec1a2f1246cbd41affectedbdfedb76f4f5aa5e37380e3b71adee4a39f30fc6 to < 19de79aaea33ee1ea058c8711b3b2b4a7e4decd4affectedbdfedb76f4f5aa5e37380e3b71adee4a39f30fc6 to < 6a13b56537e7b0d97f4bb74e8038ce471f9770d7affectedbdfedb76f4f5aa5e37380e3b71adee4a39f30fc6 to < a79e49e1704367b635edad1479db23d7cf1fb71aaffectedbdfedb76f4f5aa5e37380e3b71adee4a39f30fc6 to < ec33b59542d96830e3c89845ff833cf7b25ef172affected
Linux Linux
Default version status: affected
4.1affected0 to < 4.1unaffected6.1.159 to ≤ 6.1.*unaffected6.6.118 to ≤ 6.6.*unaffected6.12.60 to ≤ 6.12.*unaffected6.17.10 to ≤ 6.17.*unaffected6.18 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/ea4131665107e66ece90e66bcec1a2f1246cbd41 ↗
- https://git.kernel.org/stable/c/19de79aaea33ee1ea058c8711b3b2b4a7e4decd4 ↗
- https://git.kernel.org/stable/c/6a13b56537e7b0d97f4bb74e8038ce471f9770d7 ↗
- https://git.kernel.org/stable/c/a79e49e1704367b635edad1479db23d7cf1fb71a ↗
- https://git.kernel.org/stable/c/ec33b59542d96830e3c89845ff833cf7b25ef172 ↗