In the Linux kernel, the following vulnerability has been resolved: mm:
migrate: fix getting incorrect page mapping during page migration When
running stress-ng testing, we found below kernel crash after a few hours:
Unable to handle kernel NULL pointer dereference at virtual address
0000000000000000 pc : dentry_name+0xd8/0x224 lr : pointer+0x22c/0x370 sp :
ffff800025f134c0 … Call trace: dentry_name+0xd8/0x224
pointer+0x22c/0x370 vsnprintf+0x1ec/0x730 vscnprintf+0x2c/0x60
vprintk_store+0x70/0x234 vprintk_emit+0xe0/0x24c vprintk_default+0x3c/0x44
vprintk_func+0x84/0x2d0 printk+0x64/0x88 __dump_page+0x52c/0x530
dump_page+0x14/0x20 set_migratetype_isolate+0x110/0x224
start_isolate_page_range+0xc4/0x20c offline_pages+0x124/0x474
memory_block_offline+0x44/0xf4 memory_subsys_offline+0x3c/0x70
device_offline+0xf0/0x120 … After analyzing the vmcore, I found this
issue is caused by page migration. The scenario is that, one thread is
doing page migration, and we will use the target page’s ->mapping field to
save ‘anon_vma’ pointer between page unmap and page move, and now the
target page is locked and refcount is 1. Currently, there is another
stress-ng thread performing memory hotplug, attempting to offline the
target page that is being migrated. It discovers that the refcount of this
target page is 1, preventing the offline operation, thus proceeding to dump
the page. However, page_mapping() of the target page may return an
incorrect file mapping to crash the system in dump_mapping(), since the
target page->mapping only saves ‘anon_vma’ pointer without setting
PAGE_MAPPING_ANON flag. There are seveval ways to fix this issue: (1)
Setting the PAGE_MAPPING_ANON flag for target page’s ->mapping when saving
‘anon_vma’, but this can confuse PageAnon() for PFN walkers, since the
target page has not built mappings yet. (2) Getting the page lock to call
page_mapping() in __dump_page() to avoid crashing the system, however,
there are still some PFN walkers that call page_mapping() without holding
the page lock, such as compaction. (3) Using target page->private field to
save the ‘anon_vma’ pointer and 2 bits page state, just as page->mapping
records an anonymous page, which can remove the page_mapping() impact for
PFN walkers and also seems a simple way. So I choose option 3 to fix this
issue, and this can also fix other potential issues for PFN walkers, such
as compaction.
Author | Note |
---|---|
rodrigo-zaiden | USN-6765-1 for linux-oem-6.5 wrongly stated that this CVE was fixed in version 6.5.0-1022.23. The mentioned notice was revoked and the state of the fix for linux-oem-6.5 was recovered to the previous state. |
OS | Version | Architecture | Package | Version | Filename |
---|---|---|---|---|---|
ubuntu | 23.10 | noarch | linux | < 6.5.0-41.41 | UNKNOWN |
ubuntu | 23.10 | noarch | linux-aws | < 6.5.0-1021.21 | UNKNOWN |
ubuntu | 22.04 | noarch | linux-aws-6.5 | < any | UNKNOWN |
ubuntu | 23.10 | noarch | linux-azure | < 6.5.0-1022.23 | UNKNOWN |
ubuntu | 22.04 | noarch | linux-azure-6.5 | < 6.5.0-1022.23~22.04.1 | UNKNOWN |
ubuntu | 23.10 | noarch | linux-gcp | < 6.5.0-1022.24 | UNKNOWN |
ubuntu | 22.04 | noarch | linux-gcp-6.5 | < 6.5.0-1022.24~22.04.1 | UNKNOWN |
ubuntu | 22.04 | noarch | linux-hwe-6.5 | < 6.5.0-41.41~22.04.2 | UNKNOWN |
ubuntu | 23.10 | noarch | linux-laptop | < 6.5.0-1017.20 | UNKNOWN |
ubuntu | 23.10 | noarch | linux-lowlatency | < 6.5.0-41.41.1 | UNKNOWN |
git.kernel.org/linus/d1adb25df7111de83b64655a80b5a135adbded61 (6.8-rc1)
git.kernel.org/stable/c/3889a418b6eb9a1113fb989aaadecf2f64964767
git.kernel.org/stable/c/9128bfbc5c80d8f4874dd0a0424d1f5fb010df1b
git.kernel.org/stable/c/d1adb25df7111de83b64655a80b5a135adbded61
launchpad.net/bugs/cve/CVE-2023-52490
nvd.nist.gov/vuln/detail/CVE-2023-52490
security-tracker.debian.org/tracker/CVE-2023-52490
ubuntu.com/security/notices/USN-6818-1
ubuntu.com/security/notices/USN-6818-2
ubuntu.com/security/notices/USN-6818-3
ubuntu.com/security/notices/USN-6818-4
ubuntu.com/security/notices/USN-6819-1
ubuntu.com/security/notices/USN-6819-2
ubuntu.com/security/notices/USN-6819-3
ubuntu.com/security/notices/USN-6819-4
www.cve.org/CVERecord?id=CVE-2023-52490