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
842
crypto
dim
fonts
kunit
livepatch
lz4
lzo
math
pldmfw
raid6
reed_solomon
test_fortify
vdso
xz
zlib_deflate
zlib_dfltcc
zlib_inflate
zstd
.gitignore -rw-r--r-- 174 bytes
Kconfig -rw-r--r-- 16.8 KB
Kconfig.debug -rw-r--r-- 98.7 KB
Kconfig.kasan -rw-r--r-- 6.9 KB
Kconfig.kcsan -rw-r--r-- 10.0 KB
Kconfig.kfence -rw-r--r-- 3.6 KB
Kconfig.kgdb -rw-r--r-- 5.6 KB
Kconfig.kmsan -rw-r--r-- 2.3 KB
Kconfig.ubsan -rw-r--r-- 6.2 KB
Makefile -rw-r--r-- 15.0 KB
argv_split.c -rw-r--r-- 2.1 KB
ashldi3.c -rw-r--r-- 541 bytes
ashrdi3.c -rw-r--r-- 565 bytes
asn1_decoder.c -rw-r--r-- 13.2 KB
asn1_encoder.c -rw-r--r-- 10.3 KB
assoc_array.c -rw-r--r-- 51.9 KB
atomic64.c -rw-r--r-- 4.5 KB
atomic64_test.c -rw-r--r-- 6.4 KB
audit.c -rw-r--r-- 1.9 KB
base64.c -rw-r--r-- 2.4 KB
bcd.c -rw-r--r-- 297 bytes
bch.c -rw-r--r-- 36.8 KB
bitfield_kunit.c -rw-r--r-- 4.4 KB
bitmap.c -rw-r--r-- 46.3 KB
bitrev.c -rw-r--r-- 1.9 KB
bootconfig-data.S -rw-r--r-- 275 bytes
bootconfig.c -rw-r--r-- 21.6 KB
bsearch.c -rw-r--r-- 1.2 KB
btree.c -rw-r--r-- 19.2 KB
bucket_locks.c -rw-r--r-- 1.4 KB
bug.c -rw-r--r-- 6.1 KB
build_OID_registry -rwxr-xr-x 4.5 KB
buildid.c -rw-r--r-- 5.0 KB
bust_spinlocks.c -rw-r--r-- 632 bytes
check_signature.c -rw-r--r-- 635 bytes
checksum.c -rw-r--r-- 4.1 KB
checksum_kunit.c -rw-r--r-- 17.4 KB
clz_ctz.c -rw-r--r-- 899 bytes
clz_tab.c -rw-r--r-- 891 bytes
cmdline.c -rw-r--r-- 5.8 KB
cmdline_kunit.c -rw-r--r-- 4.2 KB
cmpdi2.c -rw-r--r-- 501 bytes
compat_audit.c -rw-r--r-- 1002 bytes
cpu_rmap.c -rw-r--r-- 8.2 KB
cpumask.c -rw-r--r-- 5.4 KB
cpumask_kunit.c -rw-r--r-- 4.9 KB
crc-ccitt.c -rw-r--r-- 5.6 KB
crc-itu-t.c -rw-r--r-- 2.7 KB
crc-t10dif.c -rw-r--r-- 3.2 KB
crc16.c -rw-r--r-- 2.7 KB
crc32.c -rw-r--r-- 9.3 KB
crc32defs.h -rw-r--r-- 1.6 KB
crc32test.c -rw-r--r-- 37.4 KB
crc4.c -rw-r--r-- 1003 bytes
crc64-rocksoft.c -rw-r--r-- 3.2 KB
crc64.c -rw-r--r-- 2.6 KB
crc7.c -rw-r--r-- 2.5 KB
crc8.c -rw-r--r-- 2.4 KB
ctype.c -rw-r--r-- 1.4 KB
debug_info.c -rw-r--r-- 782 bytes
debug_locks.c -rw-r--r-- 1.2 KB
debugobjects.c -rw-r--r-- 35.9 KB
dec_and_lock.c -rw-r--r-- 2.0 KB
decompress.c -rw-r--r-- 1.8 KB
decompress_bunzip2.c -rw-r--r-- 23.5 KB
decompress_inflate.c -rw-r--r-- 4.8 KB
decompress_unlz4.c -rw-r--r-- 4.2 KB
decompress_unlzma.c -rw-r--r-- 15.8 KB
decompress_unlzo.c -rw-r--r-- 6.4 KB
decompress_unxz.c -rw-r--r-- 11.0 KB
decompress_unzstd.c -rw-r--r-- 10.3 KB
devmem_is_allowed.c -rw-r--r-- 705 bytes
devres.c -rw-r--r-- 14.6 KB
dhry.h -rw-r--r-- 14.3 KB
dhry_1.c -rw-r--r-- 7.9 KB
dhry_2.c -rw-r--r-- 4.4 KB
dhry_run.c -rw-r--r-- 1.7 KB
digsig.c -rw-r--r-- 5.5 KB
dump_stack.c -rw-r--r-- 3.0 KB
dynamic_debug.c -rw-r--r-- 37.7 KB
dynamic_queue_limits.c -rw-r--r-- 4.3 KB
earlycpio.c -rw-r--r-- 3.6 KB
errname.c -rw-r--r-- 3.8 KB
error-inject.c -rw-r--r-- 5.3 KB
errseq.c -rw-r--r-- 6.6 KB
extable.c -rw-r--r-- 2.9 KB
fault-inject-usercopy.c -rw-r--r-- 823 bytes
fault-inject.c -rw-r--r-- 11.3 KB
fdt.c -rw-r--r-- 69 bytes
fdt_addresses.c -rw-r--r-- 79 bytes
fdt_empty_tree.c -rw-r--r-- 80 bytes
fdt_ro.c -rw-r--r-- 72 bytes
fdt_rw.c -rw-r--r-- 72 bytes
fdt_strerror.c -rw-r--r-- 78 bytes
fdt_sw.c -rw-r--r-- 72 bytes
fdt_wip.c -rw-r--r-- 73 bytes
find_bit.c -rw-r--r-- 7.2 KB
find_bit_benchmark.c -rw-r--r-- 4.9 KB
flex_proportions.c -rw-r--r-- 7.1 KB
fortify_kunit.c -rw-r--r-- 11.1 KB
gen_crc32table.c -rw-r--r-- 3.3 KB
gen_crc64table.c -rw-r--r-- 2.1 KB
genalloc.c -rw-r--r-- 26.4 KB
generic-radix-tree.c -rw-r--r-- 5.5 KB
glob.c -rw-r--r-- 3.5 KB
globtest.c -rw-r--r-- 4.2 KB
group_cpus.c -rw-r--r-- 11.0 KB
hashtable_test.c -rw-r--r-- 8.0 KB
hexdump.c -rw-r--r-- 8.5 KB
hweight.c -rw-r--r-- 1.9 KB
idr.c -rw-r--r-- 17.5 KB
inflate.c -rw-r--r-- 38.7 KB
interval_tree.c -rw-r--r-- 4.2 KB
interval_tree_test.c -rw-r--r-- 3.4 KB
iomap.c -rw-r--r-- 11.0 KB
iomap_copy.c -rw-r--r-- 2.2 KB
iommu-helper.c -rw-r--r-- 755 bytes
iov_iter.c -rw-r--r-- 46.8 KB
irq_poll.c -rw-r--r-- 5.6 KB
irq_regs.c -rw-r--r-- 394 bytes
is_signed_type_kunit.c -rw-r--r-- 1.5 KB
is_single_threaded.c -rw-r--r-- 1.2 KB
kasprintf.c -rw-r--r-- 1.4 KB
kfifo.c -rw-r--r-- 12.1 KB
klist.c -rw-r--r-- 10.4 KB
kobject.c -rw-r--r-- 27.8 KB
kobject_uevent.c -rw-r--r-- 18.9 KB
kstrtox.c -rw-r--r-- 10.8 KB
kstrtox.h -rw-r--r-- 411 bytes
kunit_iov_iter.c -rw-r--r-- 18.7 KB
libcrc32c.c -rw-r--r-- 1.9 KB
linear_ranges.c -rw-r--r-- 8.1 KB
list-test.c -rw-r--r-- 35.1 KB
list_debug.c -rw-r--r-- 2.3 KB
list_sort.c -rw-r--r-- 8.2 KB
llist.c -rw-r--r-- 2.5 KB
locking-selftest-hardirq.h -rw-r--r-- 246 bytes
locking-selftest-mutex.h -rw-r--r-- 159 bytes
locking-selftest-rlock-hardirq.h -rw-r--r-- 74 bytes
locking-selftest-rlock-softirq.h -rw-r--r-- 74 bytes
locking-selftest-rlock.h -rw-r--r-- 197 bytes
locking-selftest-rsem.h -rw-r--r-- 202 bytes
locking-selftest-rtmutex.h -rw-r--r-- 162 bytes
locking-selftest-softirq.h -rw-r--r-- 246 bytes
locking-selftest-spin-hardirq.h -rw-r--r-- 73 bytes
locking-selftest-spin-softirq.h -rw-r--r-- 73 bytes
locking-selftest-spin.h -rw-r--r-- 157 bytes
locking-selftest-wlock-hardirq.h -rw-r--r-- 74 bytes
locking-selftest-wlock-softirq.h -rw-r--r-- 74 bytes
locking-selftest-wlock.h -rw-r--r-- 197 bytes
locking-selftest-wsem.h -rw-r--r-- 202 bytes
locking-selftest.c -rw-r--r-- 64.5 KB
lockref.c -rw-r--r-- 3.9 KB
logic_iomem.c -rw-r--r-- 7.2 KB
logic_pio.c -rw-r--r-- 8.4 KB
lru_cache.c -rw-r--r-- 17.5 KB
lshrdi3.c -rw-r--r-- 559 bytes
maple_tree.c -rw-r--r-- 181.2 KB
memcat_p.c -rw-r--r-- 753 bytes
memcpy_kunit.c -rw-r--r-- 17.0 KB
memory-notifier-error-inject.c -rw-r--r-- 1.1 KB
memregion.c -rw-r--r-- 429 bytes
memweight.c -rw-r--r-- 1.0 KB
muldi3.c -rw-r--r-- 1.7 KB
net_utils.c -rw-r--r-- 697 bytes
netdev-notifier-error-inject.c -rw-r--r-- 1.5 KB
nlattr.c -rw-r--r-- 27.5 KB
nmi_backtrace.c -rw-r--r-- 3.4 KB
notifier-error-inject.c -rw-r--r-- 2.5 KB
notifier-error-inject.h -rw-r--r-- 653 bytes
objagg.c -rw-r--r-- 28.2 KB
of-reconfig-notifier-error-inject.c -rw-r--r-- 1.3 KB
oid_registry.c -rw-r--r-- 4.4 KB
once.c -rw-r--r-- 2.2 KB
overflow_kunit.c -rw-r--r-- 43.9 KB
packing.c -rw-r--r-- 6.3 KB
parman.c -rw-r--r-- 10.6 KB
parser.c -rw-r--r-- 9.1 KB
pci_iomap.c -rw-r--r-- 5.7 KB
percpu-refcount.c -rw-r--r-- 15.3 KB
percpu_counter.c -rw-r--r-- 7.8 KB
percpu_test.c -rw-r--r-- 3.2 KB
plist.c -rw-r--r-- 5.9 KB
pm-notifier-error-inject.c -rw-r--r-- 1.2 KB
polynomial.c -rw-r--r-- 3.6 KB
radix-tree.c -rw-r--r-- 43.1 KB
radix-tree.h -rw-r--r-- 244 bytes
random32.c -rw-r--r-- 9.1 KB
ratelimit.c -rw-r--r-- 1.8 KB
rbtree.c -rw-r--r-- 17.1 KB
rbtree_test.c -rw-r--r-- 9.4 KB
rcuref.c -rw-r--r-- 9.5 KB
ref_tracker.c -rw-r--r-- 6.7 KB
refcount.c -rw-r--r-- 4.8 KB
rhashtable.c -rw-r--r-- 29.6 KB
sbitmap.c -rw-r--r-- 18.3 KB
scatterlist.c -rw-r--r-- 35.1 KB
seq_buf.c -rw-r--r-- 10.7 KB
sg_pool.c -rw-r--r-- 4.0 KB
sg_split.c -rw-r--r-- 5.0 KB
siphash.c -rw-r--r-- 11.6 KB
siphash_kunit.c -rw-r--r-- 7.2 KB
slub_kunit.c -rw-r--r-- 4.3 KB
smp_processor_id.c -rw-r--r-- 1.4 KB
sort.c -rw-r--r-- 8.9 KB
stackdepot.c -rw-r--r-- 15.6 KB
stackinit_kunit.c -rw-r--r-- 13.9 KB
stmp_device.c -rw-r--r-- 1.9 KB
strcat_kunit.c -rw-r--r-- 3.3 KB
string.c -rw-r--r-- 18.2 KB
string_helpers.c -rw-r--r-- 24.4 KB
strncpy_from_user.c -rw-r--r-- 3.9 KB
strnlen_user.c -rw-r--r-- 3.4 KB
strscpy_kunit.c -rw-r--r-- 4.5 KB
syscall.c -rw-r--r-- 2.7 KB
test-kstrtox.c -rw-r--r-- 17.3 KB
test-string_helpers.c -rw-r--r-- 14.9 KB
test_bitmap.c -rw-r--r-- 37.8 KB
test_bitops.c -rw-r--r-- 2.5 KB
test_bits.c -rw-r--r-- 1.8 KB
test_blackhole_dev.c -rw-r--r-- 2.5 KB
test_bpf.c -rw-r--r-- 356.1 KB
test_debug_virtual.c -rw-r--r-- 981 bytes
test_dynamic_debug.c -rw-r--r-- 3.7 KB
test_firmware.c -rw-r--r-- 37.4 KB
test_fprobe.c -rw-r--r-- 6.9 KB
test_fpu.c -rw-r--r-- 2.0 KB
test_free_pages.c -rw-r--r-- 1003 bytes
test_hash.c -rw-r--r-- 6.5 KB
test_hexdump.c -rw-r--r-- 6.3 KB
test_hmm.c -rw-r--r-- 37.9 KB
test_hmm_uapi.h -rw-r--r-- 2.9 KB
test_ida.c -rw-r--r-- 5.3 KB
test_kmod.c -rw-r--r-- 29.4 KB
test_kprobes.c -rw-r--r-- 10.1 KB
test_linear_ranges.c -rw-r--r-- 7.4 KB
test_list_sort.c -rw-r--r-- 3.3 KB
test_lockup.c -rw-r--r-- 16.5 KB
test_maple_tree.c -rw-r--r-- 101.6 KB
test_memcat_p.c -rw-r--r-- 2.2 KB
test_meminit.c -rw-r--r-- 10.2 KB
test_min_heap.c -rw-r--r-- 4.3 KB
test_module.c -rw-r--r-- 794 bytes
test_objagg.c -rw-r--r-- 24.6 KB
test_parman.c -rw-r--r-- 11.2 KB
test_printf.c -rw-r--r-- 19.5 KB
test_ref_tracker.c -rw-r--r-- 3.1 KB
test_rhashtable.c -rw-r--r-- 19.8 KB
test_scanf.c -rw-r--r-- 28.9 KB
test_sort.c -rw-r--r-- 907 bytes
test_static_key_base.c -rw-r--r-- 1.6 KB
test_static_keys.c -rw-r--r-- 5.6 KB
test_string.c -rw-r--r-- 4.6 KB
test_sysctl.c -rw-r--r-- 5.9 KB
test_ubsan.c -rw-r--r-- 2.4 KB
test_user_copy.c -rw-r--r-- 9.1 KB
test_uuid.c -rw-r--r-- 3.4 KB
test_vmalloc.c -rw-r--r-- 11.8 KB
test_xarray.c -rw-r--r-- 47.2 KB
textsearch.c -rw-r--r-- 9.3 KB
timerqueue.c -rw-r--r-- 2.3 KB
trace_readwrite.c -rw-r--r-- 1.5 KB
ts_bm.c -rw-r--r-- 5.3 KB
ts_fsm.c -rw-r--r-- 10.4 KB
ts_kmp.c -rw-r--r-- 4.1 KB
ubsan.c -rw-r--r-- 11.5 KB
ubsan.h -rw-r--r-- 3.2 KB
ucmpdi2.c -rw-r--r-- 568 bytes
ucs2_string.c -rw-r--r-- 2.5 KB
usercopy.c -rw-r--r-- 2.4 KB
uuid.c -rw-r--r-- 2.9 KB
vsprintf.c -rw-r--r-- 87.8 KB
win_minmax.c -rw-r--r-- 3.4 KB
xarray.c -rw-r--r-- 58.9 KB
xxhash.c -rw-r--r-- 12.7 KB

back to top