summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorZhao Gongyi <zhaogongyi@bytedance.com>2026-11-02 01:10:30 +0800
committerCatalin Marinas <catalin.marinas@arm.com>2026-11-04 18:46:10 +0000
commitb0958b1397fb5ffdb995c0ccc74349841929c08d (patch)
tree2774c9a4c8c81dbeac0d3c7ea72ab48adbcf8a23 /scripts
parentbeeec04046227eba42b7cc5ab32498aa43da9632 (diff)
arm64: mm: validate /dev/mem mmap ranges without overflow
An arm64 syzkaller reproducer creates a FUSE character device with major:minor 1:1, so opening it uses the /dev/mem file operations. It maps one page from offset 0xfffffffffffff000 at user address zero. The next openat() with a NULL pathname triggers a synchronous external abort (SEA, ESR 0x96000010) in strncpy_from_user() via do_getname(), panicking the kernel. valid_mmap_phys_addr_range() checks the exclusive end by adding the mapping size to the starting address. For this offset, the sum wraps to zero and passes the PHYS_MASK test, allowing an out-of-range PFN to reach remap_pfn_range(). The inclusive-end overflow check in mmap_mem_prepare() does not catch it because the end is ULONG_MAX. Reject starting PFNs outside PHYS_MASK and compare the inclusive length against the remaining physical range without overflowing. This also allows mappings that end exactly at PHYS_MASK, which the old check incorrectly rejects. Fixes: 1d18c47c735e ("arm64: MMU fault handling and page table management") Cc: stable@vger.kernel.org Signed-off-by: Zhao Gongyi <zhaogongyi@bytedance.com> [catalin.marinas@arm.com: changed the check to look more like __access_ok()] Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions