Revision e512a59b472684d8585125101ab03b86c2c1348a authored by Anjali K on 14 June 2024, 17:38:44 UTC, committed by Greg Kroah-Hartman on 25 July 2024, 07:50:53 UTC
[ Upstream commit 1a14150e1656f7a332a943154fc486504db4d586 ]

Reading the dispatch trace log from /sys/kernel/debug/powerpc/dtl/cpu-*
results in a BUG() when the config CONFIG_HARDENED_USERCOPY is enabled as
shown below.

    kernel BUG at mm/usercopy.c:102!
    Oops: Exception in kernel mode, sig: 5 [#1]
    LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA pSeries
    Modules linked in: xfs libcrc32c dm_service_time sd_mod t10_pi sg ibmvfc
    scsi_transport_fc ibmveth pseries_wdt dm_multipath dm_mirror dm_region_hash dm_log dm_mod fuse
    CPU: 27 PID: 1815 Comm: python3 Not tainted 6.10.0-rc3 #85
    Hardware name: IBM,9040-MRX POWER10 (raw) 0x800200 0xf000006 of:IBM,FW1060.00 (NM1060_042) hv:phyp pSeries
    NIP:  c0000000005d23d4 LR: c0000000005d23d0 CTR: 00000000006ee6f8
    REGS: c000000120c078c0 TRAP: 0700   Not tainted  (6.10.0-rc3)
    MSR:  8000000000029033 <SF,EE,ME,IR,DR,RI,LE>  CR: 2828220f  XER: 0000000e
    CFAR: c0000000001fdc80 IRQMASK: 0
    [ ... GPRs omitted ... ]
    NIP [c0000000005d23d4] usercopy_abort+0x78/0xb0
    LR [c0000000005d23d0] usercopy_abort+0x74/0xb0
    Call Trace:
     usercopy_abort+0x74/0xb0 (unreliable)
     __check_heap_object+0xf8/0x120
     check_heap_object+0x218/0x240
     __check_object_size+0x84/0x1a4
     dtl_file_read+0x17c/0x2c4
     full_proxy_read+0x8c/0x110
     vfs_read+0xdc/0x3a0
     ksys_read+0x84/0x144
     system_call_exception+0x124/0x330
     system_call_vectored_common+0x15c/0x2ec
    --- interrupt: 3000 at 0x7fff81f3ab34

Commit 6d07d1cd300f ("usercopy: Restrict non-usercopy caches to size 0")
requires that only whitelisted areas in slab/slub objects can be copied to
userspace when usercopy hardening is enabled using CONFIG_HARDENED_USERCOPY.
Dtl contains hypervisor dispatch events which are expected to be read by
privileged users. Hence mark this safe for user access.
Specify useroffset=0 and usersize=DISPATCH_LOG_BYTES to whitelist the
entire object.

Co-developed-by: Vishal Chourasia <vishalc@linux.ibm.com>
Signed-off-by: Vishal Chourasia <vishalc@linux.ibm.com>
Signed-off-by: Anjali K <anjalik@linux.ibm.com>
Reviewed-by: Srikar Dronamraju <srikar@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240614173844.746818-1-anjalik@linux.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent cf3f203
History
File Mode Size
damon
kasan
kfence
kmsan
Kconfig -rw-r--r-- 39.3 KB
Kconfig.debug -rw-r--r-- 10.3 KB
Makefile -rw-r--r-- 5.1 KB
backing-dev.c -rw-r--r-- 27.6 KB
balloon_compaction.c -rw-r--r-- 8.2 KB
bootmem_info.c -rw-r--r-- 3.4 KB
cma.c -rw-r--r-- 15.6 KB
cma.h -rw-r--r-- 1.4 KB
cma_debug.c -rw-r--r-- 4.5 KB
cma_sysfs.c -rw-r--r-- 2.4 KB
compaction.c -rw-r--r-- 88.6 KB
debug.c -rw-r--r-- 7.0 KB
debug_page_alloc.c -rw-r--r-- 1.6 KB
debug_page_ref.c -rw-r--r-- 1.4 KB
debug_vm_pgtable.c -rw-r--r-- 40.4 KB
dmapool.c -rw-r--r-- 13.1 KB
dmapool_test.c -rw-r--r-- 2.9 KB
early_ioremap.c -rw-r--r-- 6.7 KB
fadvise.c -rw-r--r-- 5.5 KB
fail_page_alloc.c -rw-r--r-- 1.6 KB
failslab.c -rw-r--r-- 1.6 KB
filemap.c -rw-r--r-- 121.4 KB
folio-compat.c -rw-r--r-- 3.1 KB
gup.c -rw-r--r-- 96.2 KB
gup_test.c -rw-r--r-- 9.0 KB
gup_test.h -rw-r--r-- 1.2 KB
highmem.c -rw-r--r-- 20.2 KB
hmm.c -rw-r--r-- 17.1 KB
huge_memory.c -rw-r--r-- 87.5 KB
hugetlb.c -rw-r--r-- 206.3 KB
hugetlb_cgroup.c -rw-r--r-- 24.7 KB
hugetlb_vmemmap.c -rw-r--r-- 16.6 KB
hugetlb_vmemmap.h -rw-r--r-- 1.6 KB
hwpoison-inject.c -rw-r--r-- 2.8 KB
init-mm.c -rw-r--r-- 1.8 KB
internal.h -rw-r--r-- 35.8 KB
interval_tree.c -rw-r--r-- 3.1 KB
io-mapping.c -rw-r--r-- 993 bytes
ioremap.c -rw-r--r-- 1.7 KB
khugepaged.c -rw-r--r-- 71.4 KB
kmemleak.c -rw-r--r-- 61.1 KB
ksm.c -rw-r--r-- 96.9 KB
list_lru.c -rw-r--r-- 13.8 KB
maccess.c -rw-r--r-- 5.9 KB
madvise.c -rw-r--r-- 38.6 KB
mapping_dirty_helpers.c -rw-r--r-- 10.4 KB
memblock.c -rw-r--r-- 63.0 KB
memcontrol.c -rw-r--r-- 203.9 KB
memfd.c -rw-r--r-- 9.8 KB
memory-failure.c -rw-r--r-- 73.6 KB
memory-tiers.c -rw-r--r-- 18.2 KB
memory.c -rw-r--r-- 167.3 KB
memory_hotplug.c -rw-r--r-- 66.4 KB
mempolicy.c -rw-r--r-- 79.2 KB
mempool.c -rw-r--r-- 16.1 KB
memremap.c -rw-r--r-- 15.0 KB
memtest.c -rw-r--r-- 3.5 KB
migrate.c -rw-r--r-- 69.2 KB
migrate_device.c -rw-r--r-- 26.8 KB
mincore.c -rw-r--r-- 7.1 KB
mlock.c -rw-r--r-- 19.6 KB
mm_init.c -rw-r--r-- 78.5 KB
mm_slot.h -rw-r--r-- 1.4 KB
mmap.c -rw-r--r-- 104.4 KB
mmap_lock.c -rw-r--r-- 6.2 KB
mmu_gather.c -rw-r--r-- 9.9 KB
mmu_notifier.c -rw-r--r-- 34.5 KB
mmzone.c -rw-r--r-- 2.5 KB
mprotect.c -rw-r--r-- 22.6 KB
mremap.c -rw-r--r-- 29.2 KB
msync.c -rw-r--r-- 2.9 KB
nommu.c -rw-r--r-- 44.4 KB
oom_kill.c -rw-r--r-- 33.2 KB
page-writeback.c -rw-r--r-- 94.2 KB
page_alloc.c -rw-r--r-- 185.3 KB
page_counter.c -rw-r--r-- 6.8 KB
page_ext.c -rw-r--r-- 13.6 KB
page_idle.c -rw-r--r-- 5.3 KB
page_io.c -rw-r--r-- 13.6 KB
page_isolation.c -rw-r--r-- 21.4 KB
page_owner.c -rw-r--r-- 18.0 KB
page_poison.c -rw-r--r-- 2.5 KB
page_reporting.c -rw-r--r-- 11.7 KB
page_reporting.h -rw-r--r-- 1.6 KB
page_table_check.c -rw-r--r-- 5.8 KB
page_vma_mapped.c -rw-r--r-- 9.2 KB
pagewalk.c -rw-r--r-- 17.5 KB
percpu-internal.h -rw-r--r-- 7.3 KB
percpu-km.c -rw-r--r-- 3.2 KB
percpu-stats.c -rw-r--r-- 5.8 KB
percpu-vm.c -rw-r--r-- 11.7 KB
percpu.c -rw-r--r-- 101.8 KB
pgalloc-track.h -rw-r--r-- 1.3 KB
pgtable-generic.c -rw-r--r-- 11.2 KB
process_vm_access.c -rw-r--r-- 8.2 KB
ptdump.c -rw-r--r-- 4.2 KB
readahead.c -rw-r--r-- 25.6 KB
rmap.c -rw-r--r-- 73.8 KB
rodata_test.c -rw-r--r-- 1.2 KB
secretmem.c -rw-r--r-- 6.4 KB
shmem.c -rw-r--r-- 127.9 KB
shmem_quota.c -rw-r--r-- 9.5 KB
show_mem.c -rw-r--r-- 11.9 KB
shrinker_debug.c -rw-r--r-- 6.4 KB
shuffle.c -rw-r--r-- 4.6 KB
shuffle.h -rw-r--r-- 1.2 KB
slab.c -rw-r--r-- 101.4 KB
slab.h -rw-r--r-- 23.5 KB
slab_common.c -rw-r--r-- 39.6 KB
slub.c -rw-r--r-- 160.8 KB
sparse-vmemmap.c -rw-r--r-- 11.9 KB
sparse.c -rw-r--r-- 25.6 KB
swap.c -rw-r--r-- 30.9 KB
swap.h -rw-r--r-- 4.0 KB
swap_cgroup.c -rw-r--r-- 5.2 KB
swap_slots.c -rw-r--r-- 9.2 KB
swap_state.c -rw-r--r-- 24.0 KB
swapfile.c -rw-r--r-- 92.5 KB
truncate.c -rw-r--r-- 25.8 KB
usercopy.c -rw-r--r-- 8.1 KB
userfaultfd.c -rw-r--r-- 22.2 KB
util.c -rw-r--r-- 29.0 KB
vmalloc.c -rw-r--r-- 116.7 KB
vmpressure.c -rw-r--r-- 14.1 KB
vmscan.c -rw-r--r-- 223.3 KB
vmstat.c -rw-r--r-- 55.5 KB
workingset.c -rw-r--r-- 26.6 KB
z3fold.c -rw-r--r-- 36.8 KB
zbud.c -rw-r--r-- 12.8 KB
zpool.c -rw-r--r-- 9.9 KB
zsmalloc.c -rw-r--r-- 56.1 KB
zswap.c -rw-r--r-- 42.9 KB

back to top