In the Linux kernel, the following vulnerability has been resolved:
mm/memory-failure: fix VMBUGON_PAGE(PagePoisoned(page)) when unpoison memory
When I did memory failure tests, below panic occurs:
page dumped because: VMBUGONPAGE(PagePoisoned(page)) kernel BUG at include/linux/page-flags.h:616! Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI CPU: 3 PID: 720 Comm: bash Not tainted 6.10.0-rc1-00195-g148743902568 #40 RIP: 0010:unpoisonmemory+0x2f3/0x590 RSP: 0018:ffffa57fc8787d60 EFLAGS: 00000246 RAX: 0000000000000037 RBX: 0000000000000009 RCX: ffff9be25fcdc9c8 RDX: 0000000000000000 RSI: 0000000000000027 RDI: ffff9be25fcdc9c0 RBP: 0000000000300000 R08: ffffffffb4956f88 R09: 0000000000009ffb R10: 0000000000000284 R11: ffffffffb4926fa0 R12: ffffe6b00c000000 R13: ffff9bdb453dfd00 R14: 0000000000000000 R15: fffffffffffffffe FS: 00007f08f04e4740(0000) GS:ffff9be25fcc0000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000564787a30410 CR3: 000000010d4e2000 CR4: 00000000000006f0 Call Trace: <TASK> unpoisonmemory+0x2f3/0x590 simpleattrwritexsigned.constprop.0.isra.0+0xb3/0x110 debugfsattrwrite+0x42/0x60 fullproxywrite+0x5b/0x80 vfswrite+0xd5/0x540 ksyswrite+0x64/0xe0 dosyscall64+0xb9/0x1d0 entrySYSCALL64afterhwframe+0x77/0x7f RIP: 0033:0x7f08f0314887 RSP: 002b:00007ffece710078 EFLAGS: 00000246 ORIGRAX: 0000000000000001 RAX: ffffffffffffffda RBX: 0000000000000009 RCX: 00007f08f0314887 RDX: 0000000000000009 RSI: 0000564787a30410 RDI: 0000000000000001 RBP: 0000564787a30410 R08: 000000000000fefe R09: 000000007fffffff R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000009 R13: 00007f08f041b780 R14: 00007f08f0417600 R15: 00007f08f0416a00 </TASK> Modules linked in: hwpoisoninject ---[ end trace 0000000000000000 ]--- RIP: 0010:unpoison_memory+0x2f3/0x590 RSP: 0018:ffffa57fc8787d60 EFLAGS: 00000246 RAX: 0000000000000037 RBX: 0000000000000009 RCX: ffff9be25fcdc9c8 RDX: 0000000000000000 RSI: 0000000000000027 RDI: ffff9be25fcdc9c0 RBP: 0000000000300000 R08: ffffffffb4956f88 R09: 0000000000009ffb R10: 0000000000000284 R11: ffffffffb4926fa0 R12: ffffe6b00c000000 R13: ffff9bdb453dfd00 R14: 0000000000000000 R15: fffffffffffffffe FS: 00007f08f04e4740(0000) GS:ffff9be25fcc0000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000564787a30410 CR3: 000000010d4e2000 CR4: 00000000000006f0 Kernel panic - not syncing: Fatal exception Kernel Offset: 0x31c00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff) ---[ end Kernel panic - not syncing: Fatal exception ]---
The root cause is that unpoisonmemory() tries to check the PGHWPoison flags of an uninitialized page. So VMBUGON_PAGE(PagePoisoned(page)) is triggered. This can be reproduced by below steps:
1.Offline memory block:
echo offline > /sys/devices/system/memory/memory12/state
2.Get offlined memory pfn:
page-types -b n -rlN
3.Write pfn to unpoison-pfn
echo <pfn> > /sys/kernel/debug/hwpoison/unpoison-pfn
This scenario can be identified by pfntoonlinepage() returning NULL. And ZONEDEVICE pages are never expected, so we can simply fail if pfntoonline_page() == NULL to fix the bug.
[
{
"digest": {
"function_hash": "54343090885470151875421048783841663748",
"length": 2082.0
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7618fd443aa4cfa553a64cacf5721581653ee7b0",
"target": {
"function": "unpoison_memory",
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-013eb496"
},
{
"digest": {
"function_hash": "100648418341373321631999004137563918569",
"length": 1409.0
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@fb65803ccff37cf9123c50c1c02efd1ed73c4ed5",
"target": {
"function": "unpoison_memory",
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-1ac25b19"
},
{
"digest": {
"function_hash": "100648418341373321631999004137563918569",
"length": 1409.0
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@8e01ea186a52c90694c08a9ff57bea1b0e78256a",
"target": {
"function": "unpoison_memory",
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-33d7286c"
},
{
"digest": {
"function_hash": "77530737689755173551771532930012608333",
"length": 2126.0
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e4ec6def5643a1c9511115b3884eb879572294c6",
"target": {
"function": "unpoison_memory",
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-3c9937c2"
},
{
"digest": {
"function_hash": "54343090885470151875421048783841663748",
"length": 2082.0
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d613f53c83ec47089c4e25859d5e8e0359f6f8da",
"target": {
"function": "unpoison_memory",
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-5bc1ebb8"
},
{
"digest": {
"function_hash": "865633720821969890739269030656899656",
"length": 1539.0
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@99f7048957f5ae3cee1c01189147e73a9a96de02",
"target": {
"function": "unpoison_memory",
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-63262ec6"
},
{
"digest": {
"line_hashes": [
"261848672321064950439942092837722510641",
"98480093464028732077670711163615622453",
"57876287445276755078355747873711838339",
"125288516959096643024657144907107551136",
"290062511512055286831719939345583706450",
"130293658990782521125158297718752045259"
],
"threshold": 0.9
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@d613f53c83ec47089c4e25859d5e8e0359f6f8da",
"target": {
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-6f72c5d9"
},
{
"digest": {
"line_hashes": [
"261848672321064950439942092837722510641",
"98480093464028732077670711163615622453",
"57876287445276755078355747873711838339",
"125288516959096643024657144907107551136",
"290062511512055286831719939345583706450",
"130293658990782521125158297718752045259"
],
"threshold": 0.9
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@63a327a2375a8ce7a47dec5aaa4d8a9ae0a00b96",
"target": {
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-75985ca0"
},
{
"digest": {
"line_hashes": [
"261848672321064950439942092837722510641",
"98480093464028732077670711163615622453",
"57876287445276755078355747873711838339",
"125288516959096643024657144907107551136",
"290062511512055286831719939345583706450",
"130293658990782521125158297718752045259"
],
"threshold": 0.9
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3d278e89c2ea62b1aaa4b0d8a9766a35b3a3164a",
"target": {
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-94a33155"
},
{
"digest": {
"line_hashes": [
"25615498535974566038435309058525894908",
"98480093464028732077670711163615622453",
"57876287445276755078355747873711838339",
"60952229130658087367072777217666638222",
"155183296032512867811169285133280533256",
"321594266697474937866024749069046051335"
],
"threshold": 0.9
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@fb65803ccff37cf9123c50c1c02efd1ed73c4ed5",
"target": {
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-aabb95b8"
},
{
"digest": {
"line_hashes": [
"261848672321064950439942092837722510641",
"98480093464028732077670711163615622453",
"57876287445276755078355747873711838339",
"125288516959096643024657144907107551136",
"290062511512055286831719939345583706450",
"130293658990782521125158297718752045259"
],
"threshold": 0.9
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7618fd443aa4cfa553a64cacf5721581653ee7b0",
"target": {
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-ad504a99"
},
{
"digest": {
"function_hash": "243947478567081942995583494527354086006",
"length": 2188.0
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3d278e89c2ea62b1aaa4b0d8a9766a35b3a3164a",
"target": {
"function": "unpoison_memory",
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-c11aed5d"
},
{
"digest": {
"line_hashes": [
"99699617005716360790794309202154466229",
"98480093464028732077670711163615622453",
"57876287445276755078355747873711838339",
"60952229130658087367072777217666638222",
"239528578182791730082272805484329978353",
"234011638816108707566356690142237906893"
],
"threshold": 0.9
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e4ec6def5643a1c9511115b3884eb879572294c6",
"target": {
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-dbe0de63"
},
{
"digest": {
"line_hashes": [
"152695266630334886605281842527676729261",
"98480093464028732077670711163615622453",
"57876287445276755078355747873711838339",
"60952229130658087367072777217666638222",
"239528578182791730082272805484329978353",
"221384527717971986214012464006692299884"
],
"threshold": 0.9
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@99f7048957f5ae3cee1c01189147e73a9a96de02",
"target": {
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-ea35dba1"
},
{
"digest": {
"line_hashes": [
"25615498535974566038435309058525894908",
"98480093464028732077670711163615622453",
"57876287445276755078355747873711838339",
"60952229130658087367072777217666638222",
"155183296032512867811169285133280533256",
"321594266697474937866024749069046051335"
],
"threshold": 0.9
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@8e01ea186a52c90694c08a9ff57bea1b0e78256a",
"target": {
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-ef6f13fc"
},
{
"digest": {
"function_hash": "54343090885470151875421048783841663748",
"length": 2082.0
},
"deprecated": false,
"signature_version": "v1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@63a327a2375a8ce7a47dec5aaa4d8a9ae0a00b96",
"target": {
"function": "unpoison_memory",
"file": "mm/memory-failure.c"
},
"id": "CVE-2025-39883-fcb75f42"
}
]