Daniel Xu
5e5bb29653
UPSTREAM: lib/strncpy_from_user.c: Mask out bytes after NUL terminator.
...
do_strncpy_from_user() may copy some extra bytes after the NUL
terminator into the destination buffer. This usually does not matter for
normal string operations. However, when BPF programs key BPF maps with
strings, this matters a lot.
A BPF program may read strings from user memory by calling the
bpf_probe_read_user_str() helper which eventually calls
do_strncpy_from_user(). The program can then key a map with the
destination buffer. BPF map keys are fixed-width and string-agnostic,
meaning that map keys are treated as a set of bytes.
The issue is when do_strncpy_from_user() overcopies bytes after the NUL
terminator, it can result in seemingly identical strings occupying
multiple slots in a BPF map. This behavior is subtle and totally
unexpected by the user.
This commit masks out the bytes following the NUL while preserving
long-sized stride in the fast path.
Fixes: 6ae08ae3dea2 ("bpf: Add probe_read_{user, kernel} and probe_read_{user, kernel}_str helpers")
Change-Id: I10d009c0e2db1ca242fbc0076fa2933f17c4a9a9
Signed-off-by: Daniel Xu <dxu@dxuuu.xyz>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/21efc982b3e9f2f7b0379eed642294caaa0c27a7.1605642949.git.dxu@dxuuu.xyz
Signed-off-by: Tashfin Shakeer Rhythm <tashfinshakeerrhythm@gmail.com>
2026-02-01 20:44:43 -08:00
..
842
lib: 842: Improve error handling in sw842_compress()
2025-04-10 14:29:40 +02:00
crypto
UPSTREAM: crypto: poly1305 - fix poly1305_core_setkey() declaration
2025-09-24 12:16:39 +02:00
dim
linux/dim: Do nothing if no time delta between samples
2023-05-30 12:44:01 +01:00
fonts
lib/fonts: fix undefined behavior in bit shift for get_default_font
2023-01-18 11:40:54 +01:00
livepatch
lz4
lz4: fix kernel decompression speed
2024-04-16 03:34:44 +03:00
lzo
lib/lzo: fix ambiguous encoding bug in lzo-rle
2020-06-17 16:40:28 +02:00
math
bitmap: introduce generic optimized bitmap_size()
2024-09-04 13:14:50 +02:00
mpi
crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui()
2023-09-23 11:00:03 +02:00
raid6
lib/raid6/test/Makefile: Use $(pound) instead of \# for Make 4.3
2022-04-15 14:18:23 +02:00
reed_solomon
vdso
This is the 5.4.226 stable release
2022-12-08 16:50:20 +00:00
xz
xz: cleanup CRC32 edits from 2018
2024-11-08 16:20:30 +01:00
zlib_deflate
zlib_inflate
lib/zlib: remove outdated and incorrect pre-increment optimization
2020-06-24 17:50:39 +02:00
zstd
.gitignore
argv_split.c
ashldi3.c
ashrdi3.c
asn1_decoder.c
assoc_array.c
assoc_array: Fix BUG_ON during garbage collect
2022-06-06 08:33:50 +02:00
atomic64.c
atomic64_test.c
audit.c
bcd.c
bch.c
bitmap.c
bitrev.c
bsearch.c
btree.c
bucket_locks.c
bug.c
bug: Remove redundant condition check in report_bug
2021-05-14 09:44:27 +02:00
build_OID_registry
bust_spinlocks.c
check_signature.c
checksum.c
clz_ctz.c
lib/clz_ctz.c: Fix __clzdi2() and __ctzdi2() for 32-bit kernels
2023-08-30 16:27:25 +02:00
clz_tab.c
cmdline.c
cmpdi2.c
compat_audit.c
cpu_rmap.c
lib: cpu_rmap: Fix potential use-after-free in irq_cpu_rmap_release()
2023-06-14 10:59:56 +02:00
cpumask.c
crc-ccitt.c
crc-itu-t.c
crc-t10dif.c
crc-t10dif: Fix potential crypto notify dead-lock
2020-08-19 08:15:54 +02:00
crc4.c
crc7.c
crc8.c
crc16.c
crc32.c
lib/crc32.c: fix trivial typo in preprocessor condition
2020-10-29 09:57:52 +01:00
crc32defs.h
crc32test.c
lib/crc32test: remove extra local_irq_disable/enable
2020-11-10 12:37:27 +01:00
crc64.c
ctype.c
debug_info.c
debug_locks.c
debugobjects.c
debugobjects: Fix conditions in fill_pool()
2024-11-08 16:20:34 +01:00
dec_and_lock.c
decompress.c
decompress_bunzip2.c
decompress_bunzip2: fix rare decompression failure
2024-08-19 05:33:38 +02:00
decompress_inflate.c
decompress_unlz4.c
lib/decompress_unlz4.c: correctly handle zero-padding around initrds.
2021-07-20 16:10:46 +02:00
decompress_unlzma.c
decompress_unlzo.c
decompress_unxz.c
lib/xz: Avoid overlapping memcpy() with invalid input with in-place decompression
2021-11-17 09:48:31 +01:00
devres.c
Revert "ANDROID: Revert: Merge 5.4.60 into android11-5.4"
2020-08-23 13:12:51 +02:00
digsig.c
dump_stack.c
dynamic_debug.c
This is the 5.4.276 stable release
2024-05-17 15:29:56 +00:00
dynamic_queue_limits.c
dql: Fix dql->limit value when reset.
2025-06-04 14:32:30 +02:00
earlycpio.c
error-inject.c
errseq.c
extable.c
fault-inject.c
fdt.c
fdt_empty_tree.c
fdt_ro.c
fdt_rw.c
fdt_strerror.c
fdt_sw.c
fdt_wip.c
find_bit.c
find_bit_benchmark.c
flex_proportions.c
gen_crc32table.c
gen_crc64table.c
genalloc.c
lib/genalloc: fix device leak in of_gen_pool_get()
2025-10-29 13:59:53 +01:00
generic-radix-tree.c
lib/generic-radix-tree.c: Fix rare race in __genradix_ptr_alloc()
2024-09-12 11:03:55 +02:00
glob.c
globtest.c
hexdump.c
ANDROID: GKI: update the abi .xml file
2022-05-12 18:25:29 +02:00
hweight.c
idr.c
ida: Fix crash in ida_free when the bitmap is empty
2024-01-25 14:34:21 -08:00
inflate.c
interval_tree.c
interval_tree_test.c
iomap.c
iomap_copy.c
iommu-helper.c
ioremap.c
iov_iter.c
mm/highmem: Lift memcpy_[to|from]_page to core
2023-01-18 11:41:55 +01:00
irq_poll.c
irq_regs.c
is_single_threaded.c
kasprintf.c
Kconfig
Merge tag 'ASB-2022-11-01_11-5.4' of https://android.googlesource.com/kernel/common into android13-5.4-lahaina
2022-11-09 19:53:28 +02:00
Kconfig.debug
kernel: Add CC_WERROR config to turn warnings into errors
2024-05-18 18:07:44 +00:00
Kconfig.kasan
Kconfig.kgdb
Kconfig.ubsan
kfifo.c
klist.c
kobject.c
kobject: Fix slab-out-of-bounds in fill_kobj_path()
2023-11-08 11:23:38 +01:00
kobject_uevent.c
kobject_uevent: Fix OOB access within zap_modalias_env()
2024-08-19 05:33:38 +02:00
kstrtox.c
lib: vsprintf: Fix handling of number field widths in vsscanf
2021-07-14 16:53:16 +02:00
kstrtox.h
lib: vsprintf: Fix handling of number field widths in vsscanf
2021-07-14 16:53:16 +02:00
libcrc32c.c
list_debug.c
lib/list_debug.c: Detect uninitialized lists
2022-08-25 11:18:36 +02:00
list_sort.c
llist.c
locking-selftest-hardirq.h
locking-selftest-mutex.h
locking-selftest-rlock-hardirq.h
locking-selftest-rlock-softirq.h
locking-selftest-rlock.h
locking-selftest-rsem.h
locking-selftest-rtmutex.h
locking-selftest-softirq.h
locking-selftest-spin-hardirq.h
locking-selftest-spin-softirq.h
locking-selftest-spin.h
locking-selftest-wlock-hardirq.h
locking-selftest-wlock-softirq.h
locking-selftest-wlock.h
locking-selftest-wsem.h
locking-selftest.c
lockref.c
lockref: stop doing cpu_relax in the cmpxchg loop
2023-02-06 07:52:42 +01:00
logic_pio.c
PCI: Fix pci_register_io_range() memory leak
2021-03-17 17:03:44 +01:00
lru_cache.c
lshrdi3.c
Makefile
UPSTREAM: crypto: chacha - move existing library code into lib/crypto
2025-09-24 12:16:29 +02:00
memcat_p.c
memory-notifier-error-inject.c
memweight.c
muldi3.c
net_utils.c
netdev-notifier-error-inject.c
nlattr.c
netlink: prevent potential spectre v1 gadgets
2023-02-06 07:52:45 +01:00
nmi_backtrace.c
nodemask.c
nodemask: Fix return values to be unsigned
2022-06-14 18:12:02 +02:00
notifier-error-inject.c
lib/notifier-error-inject: fix error when writing -errno to debugfs file
2023-01-18 11:40:55 +01:00
notifier-error-inject.h
objagg.c
mlxsw: spectrum_acl_erp: Fix object nesting warning
2024-08-19 05:33:28 +02:00
of-reconfig-notifier-error-inject.c
oid_registry.c
once.c
ANDROID: fix up 131287ff83 ("once: add DO_ONCE_SLOW() for sleepable contexts")
2022-10-30 11:07:55 +01:00
packing.c
parman.c
parser.c
pci_iomap.c
percpu-refcount.c
percpu_counter.c
percpu_test.c
plist.c
pm-notifier-error-inject.c
radix-tree.c
radix tree: remove unused variable
2023-08-30 16:27:26 +02:00
random32.c
random: replace custom notifier chain with standard one
2022-06-22 14:11:13 +02:00
ratelimit.c
ratelimit: Fix data-races in ___ratelimit().
2022-09-05 10:27:42 +02:00
rbtree.c
rbtree_test.c
refcount.c
ANDROID: restore some removed refcount functions
2022-07-30 15:19:41 +02:00
rhashtable.c
sbitmap.c
scatterlist.c
sgl_alloc_order: fix memory leak
2020-11-05 11:43:22 +01:00
seq_buf.c
seq_buf: Fix overflow in seq_buf_putmem_hex()
2021-07-19 08:53:16 +02:00
sg_pool.c
sg_split.c
lib: scatterlist: fix sg_split_phys to preserve original scatterlist offsets
2025-05-02 07:39:15 +02:00
sha1.c
BACKPORT: crypto: lib/sha1 - rename "sha" to "sha1"
2025-12-23 13:36:17 -08:00
show_mem.c
siphash.c
siphash: use one source of truth for siphash permutations
2022-06-22 14:11:16 +02:00
smp_processor_id.c
sort.c
stackdepot.c
Merge tag 'ASB-2024-07-05_11-5.4' of https://android.googlesource.com/kernel/common into android13-5.4-lahaina
2024-08-05 21:38:21 +03:00
stmp_device.c
string.c
lib/string.c: implement stpcpy
2020-10-01 13:18:23 +02:00
string_helpers.c
lib: string_helpers: silence snprintf() output truncation warning
2024-12-14 19:44:39 +01:00
strncpy_from_user.c
UPSTREAM: lib/strncpy_from_user.c: Mask out bytes after NUL terminator.
2026-02-01 20:44:43 -08:00
strnlen_user.c
syscall.c
lib/syscall: fix syscall registers retrieval on 32-bit platforms
2020-12-11 13:23:32 +01:00
test-kstrtox.c
test-string_helpers.c
test_bitfield.c
test_bitmap.c
test_blackhole_dev.c
net: blackhole_dev: fix build warning for ethh set but not used
2024-03-26 18:22:15 -04:00
test_bpf.c
UPSTREAM: bpf/tests: Use migrate disable instead of preempt disable
2025-12-23 13:35:58 -08:00
test_debug_virtual.c
test_firmware.c
test_firmware: return ENOMEM instead of ENOSPC on failed memory allocation
2023-08-11 11:54:00 +02:00
test_hash.c
test_hexdump.c
test_ida.c
ida: Fix crash in ida_free when the bitmap is empty
2024-01-25 14:34:21 -08:00
test_kasan.c
kasan: stop tests being eliminated as dead code with FORTIFY_SOURCE
2020-06-22 09:31:12 +02:00
test_kmod.c
lib/test: use after free in register_test_dev_kmod()
2022-04-15 14:18:21 +02:00
test_list_sort.c
test_memcat_p.c
test_meminit.c
lib/test_meminit: fix off-by-one error in test_pages()
2023-10-25 11:53:17 +02:00
test_module.c
test_objagg.c
lib: test_objagg: Set error message in check_expect_hints_stats()
2025-07-17 18:24:56 +02:00
test_overflow.c
overflow: Implement size_t saturating arithmetic helpers
2024-09-04 13:14:51 +02:00
test_parman.c
test_printf.c
vsprintf: don't obfuscate NULL and error pointers
2020-05-27 17:46:43 +02:00
test_rhashtable.c
test_siphash.c
test_sort.c
test_stackinit.c
This is the 5.4.148 stable release
2021-09-25 14:41:58 +02:00
test_static_key_base.c
test_static_keys.c
test_string.c
test_strscpy.c
test_sysctl.c
test_ubsan.c
test_user_copy.c
test_uuid.c
test_vmalloc.c
test_xarray.c
XArray: Fix xas_create_range() when multi-order entry present
2022-04-15 14:18:28 +02:00
textsearch.c
timerqueue.c
ts_bm.c
lib/ts_bm: reset initial match offset for every block of text
2023-07-27 08:37:12 +02:00
ts_fsm.c
ts_kmp.c
ubsan.c
ubsan.h
ucmpdi2.c
ucs2_string.c
usercopy.c
uaccess: Add speculation barrier to copy_from_user()
2023-02-25 11:53:26 +01:00
uuid.c
vsprintf.c
BACKPORT: bpf: Restrict bpf_trace_printk()'s %s usage and add %pks, %pus specifier
2026-01-14 18:12:53 -08:00
win_minmax.c
xarray.c
XArray: Update the LRU list in xas_split()
2022-04-15 14:18:28 +02:00
xxhash.c