summaryrefslogtreecommitdiff
path: root/lib/swiotlb.c
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2017-05-19 16:42:00 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2020-11-15 15:31:22 +0000
commitf9eabbd3d21b9bd1eae5a86b14cb7072dad63f82 (patch)
treef1a14bfa1fb8130fbab758aab6570c52449b2b65 /lib/swiotlb.c
parent2db1fabeccc1151c48a9b2d075b3985f74e7c0cf (diff)
UPSTREAM: arm64: kernel: restrict /dev/mem read() calls to linear region
When running lscpu on an AArch64 system that has SMBIOS version 2.0 tables, it will segfault in the following way: Unable to handle kernel paging request at virtual address ffff8000bfff0000 pgd = ffff8000f9615000 [ffff8000bfff0000] *pgd=0000000000000000 Internal error: Oops: 96000007 [#1] PREEMPT SMP Modules linked in: CPU: 0 PID: 1284 Comm: lscpu Not tainted 4.11.0-rc3+ #103 Hardware name: QEMU QEMU Virtual Machine, BIOS 0.0.0 02/06/2015 task: ffff8000fa78e800 task.stack: ffff8000f9780000 PC is at __arch_copy_to_user+0x90/0x220 LR is at read_mem+0xcc/0x140 This is caused by the fact that lspci issues a read() on /dev/mem at the offset where it expects to find the SMBIOS structure array. However, this region is classified as EFI_RUNTIME_SERVICE_DATA (as per the UEFI spec), and so it is omitted from the linear mapping. So let's restrict /dev/mem read/write access to those areas that are covered by the linear region. Reported-by: Alexander Graf <agraf@suse.de> Fixes: 4dffbfc48d65 ("arm64/efi: mark UEFI reserved regions as MEMBLOCK_NOMAP") Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Will Deacon <will.deacon@arm.com> (cherry picked from commit 1151f838cb626005f4d69bf675dacaaa5ea909d6) Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I89d897b56819b50efbd5f3b08cf542b33190e4f1 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'lib/swiotlb.c')
0 files changed, 0 insertions, 0 deletions