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
livepatch
lz4
lz4: fix kernel decompression speed
2024-04-16 03:34:44 +03:00
lzo
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
reed_solomon
vdso
xz
xz: cleanup CRC32 edits from 2018
2024-11-08 16:20:30 +01:00
zlib_deflate
zlib_inflate
zstd
.gitignore
argv_split.c
ashldi3.c
ashrdi3.c
asn1_decoder.c
assoc_array.c
atomic64.c
atomic64_test.c
audit.c
bcd.c
bch.c
bitmap.c
bitrev.c
bsearch.c
btree.c
bucket_locks.c
bug.c
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
crc4.c
crc7.c
crc8.c
crc16.c
crc32.c
crc32defs.h
crc32test.c
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
decompress_unlzma.c
decompress_unlzo.c
decompress_unxz.c
devres.c
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
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
irq_poll.c
irq_regs.c
is_single_threaded.c
kasprintf.c
Kconfig
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
kstrtox.h
libcrc32c.c
list_debug.c
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
logic_pio.c
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
nmi_backtrace.c
nodemask.c
notifier-error-inject.c
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
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
ratelimit.c
rbtree.c
rbtree_test.c
refcount.c
rhashtable.c
sbitmap.c
scatterlist.c
seq_buf.c
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
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
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
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
test_kmod.c
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
test_rhashtable.c
test_siphash.c
test_sort.c
test_stackinit.c
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
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
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
xxhash.c