From: Xiangyu Chen <xiangyu.chen@windriver.com>
To: catalin.marinas@arm.com, gregkh@linuxfoundation.org
Cc: stable@vger.kernel.org, will@kernel.org
Subject: [PATCH v2 6.12.y 0/2] proposal to fix CVE-2026-23346 on 6.12 or older kernel
Date: Wed, 3 Jun 2026 09:23:12 +0800 [thread overview]
Message-ID: <20260603012314.4100773-1-xiangyu.chen@windriver.com> (raw)
Changes:
V1 -> V2: According to Catalin's review comment, using backport instead of reimplementing fix.
Verified on linux-6.12 with Yocto environment.
Verification code & script:
C code:
------
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
// Using QEMU RTC HW address
#define PHYSICAL_ADDR 0x09010000
#define MAP_SIZE 4096
int main() {
int i = 180;
int fd = open("/dev/mem", O_RDWR | O_SYNC);
if (fd < 0) {
perror("failed to open /dev/mem");
return 1;
}
// Start map
void *map_base = mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, PHYSICAL_ADDR);
if (map_base == MAP_FAILED) {
perror("failed to mmap");
close(fd);
return 1;
}
printf("Put those info to script PID:%d, VADDR:%p\n", getpid(), map_base);
// Keep running for script trigger the issue.
while(i > 0) {
sleep(1);
i--;
}
munmap(map_base, MAP_SIZE);
close(fd);
return 0;
}
------ End of C code ------
Python code:
-----------
python3 -c '
pid = 506
vaddr = 0x7f9de3f000
f = open(f"/proc/{pid}/mem", "rb")
f.seek(vaddr)
f.read(4)
'
------End of Python code------
Usage:
Ensure kernel enabled the CONFIG_ARM64_PAN and CONFIG_DEVMEM
Start Qemuarm64 with -cpu cortex-a55 -M virt, e.g.:
qemu-system-aarch64 \
-cpu cortex-a55 \
-M virt \
-m 2G \
-smp 2 \
-kernel ./arch/arm64/boot/Image \
-append "console=ttyAMA0 root=/dev/vda rw earlycon" \
-drive if=none,file=rootfs.img,id=hd0,format=raw \
-device virtio-blk-device,drive=hd0 \
-nographic
After enter the qemu, using cat /proc/iomem to get a vaild MMIO
address, here is using RTC address (#define PHYSICAL_ADDR 0x09010000).
Build the C code, put the binary to target qemu system and run it, the
C reproducer would output the PID and mapped address, here example pid
is 506 and virtual address is 0x7f9de3f000.
Fill pid and virtual address to python code, without fix, kernel would crash
with "Unable to handle kernel read from unreadable memory".
Based on crash info, pstate: 20400005 (... +PAN ...) and FSC = 0x0f: level 3 permission fault
Call trace:
[ 678.563102] __memcpy_fromio+0x50/0x98
[ 678.563436] __access_remote_vm+0x294/0x3a8
[ 678.563901] access_remote_vm+0x18/0x30
[ 678.564308] mem_rw+0x1e0/0x370
[ 678.564534] mem_read+0x1c/0x30
[ 678.564754] vfs_read+0xcc/0x2d0
[ 678.564975] ksys_read+0x7c/0x120
[ 678.565192] __arm64_sys_read+0x24/0x38
[ 678.565450] invoke_syscall+0x5c/0x138
[ 678.565729] el0_svc_common.constprop.0+0x48/0xf0
[ 678.566038] do_el0_svc+0x24/0x38
[ 678.566264] el0_svc+0x38/0x108
[ 678.566514] el0t_64_sync_handler+0x120/0x130
[ 678.566823] el0t_64_sync+0x190/0x198
....
The behavior is the same as description of
commit:8f098037139b ("arm64: io: Extract user memory type in ioremap_prot()")
Will Deacon (2):
arm64: io: Rename ioremap_prot() to __ioremap_prot()
arm64: io: Extract user memory type in ioremap_prot()
arch/arm64/include/asm/io.h | 24 +++++++++++++++++++-----
arch/arm64/kernel/acpi.c | 2 +-
arch/arm64/mm/ioremap.c | 7 +++----
3 files changed, 23 insertions(+), 10 deletions(-)
--
2.49.1
next reply other threads:[~2026-06-03 1:23 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-03 1:23 Xiangyu Chen [this message]
2026-06-03 1:23 ` [PATCH v2 6.12.y 1/2] arm64: io: Rename ioremap_prot() to __ioremap_prot() Xiangyu Chen
2026-06-03 1:23 ` [PATCH v2 6.12.y 2/2] arm64: io: Extract user memory type in ioremap_prot() Xiangyu Chen
2026-06-03 8:32 ` [PATCH v2 6.12.y 0/2] proposal to fix CVE-2026-23346 on 6.12 or older kernel Catalin Marinas
2026-06-03 8:51 ` Xiangyu Chen
2026-06-04 0:05 ` Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260603012314.4100773-1-xiangyu.chen@windriver.com \
--to=xiangyu.chen@windriver.com \
--cc=catalin.marinas@arm.com \
--cc=gregkh@linuxfoundation.org \
--cc=stable@vger.kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox