linux/lib
Matthew Wilcox (Oracle) a16a366927 idr: Fix idr_get_next race with idr_remove
commit 5c089fd0c7 upstream.

If the entry is deleted from the IDR between the call to
radix_tree_iter_find() and rcu_dereference_raw(), idr_get_next()
will return NULL, which will end the iteration prematurely.  We should
instead continue to the next entry in the IDR.  This only happens if the
iteration is protected by the RCU lock.  Most IDR users use a spinlock
or semaphore to exclude simultaneous modifications.  It was noticed once
the PID allocator was converted to use the IDR, as it uses the RCU lock,
but there may be other users elsewhere in the kernel.

We can't use the normal pattern of calling radix_tree_deref_retry()
(which catches both a retry entry in a leaf node and a node entry in
the root) as the IDR supports storing entries which are unaligned,
which will trigger an infinite loop if they are encountered.  Instead,
we have to explicitly check whether the entry is a retry entry.

Fixes: 0a835c4f09 ("Reimplement IDR and IDA using the radix tree")
Reported-by: Brendan Gregg <bgregg@netflix.com>
Tested-by: Brendan Gregg <bgregg@netflix.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-11-24 08:19:11 +01:00
..
842
fonts
lz4
lzo
mpi lib/mpi: Fix karactx leak in mpi_powm 2019-07-10 09:53:42 +02:00
raid6 ARM: 8833/1: Ensure that NEON code always compiles with Clang 2019-04-05 22:33:08 +02:00
reed_solomon rslib: Fix handling of of caller provided syndrome 2019-07-26 09:14:12 +02:00
xz
zlib_deflate
zlib_inflate
zstd
.gitignore
argv_split.c
ashldi3.c
ashrdi3.c
asn1_decoder.c
assoc_array.c assoc_array: Fix shortcut creation 2019-03-23 20:09:48 +01:00
atomic64_test.c
atomic64.c
audit.c
bcd.c
bch.c
bitmap.c
bitrev.c
bsearch.c kprobes: Prohibit probing on bsearch() 2019-04-05 22:33:08 +02:00
btree.c
bucket_locks.c
bug.c
build_OID_registry
bust_spinlocks.c
chacha20.c crypto: chacha20 - Fix chacha20_block() keystream alignment (again) 2019-11-20 18:47:11 +01:00
check_signature.c
checksum.c
clz_ctz.c
clz_tab.c
cmdline.c
cmpdi2.c
compat_audit.c
cordic.c
cpu_rmap.c
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
dec_and_lock.c
decompress_bunzip2.c
decompress_inflate.c
decompress_unlz4.c
decompress_unlzma.c
decompress_unlzo.c
decompress_unxz.c
decompress.c
devres.c
digsig.c
div64.c lib/div64.c: off by one in shift 2019-04-20 09:16:05 +02:00
dump_stack.c dump_stack: avoid the livelock of the dump_lock 2019-11-12 19:20:37 +01:00
dynamic_debug.c jump_label: move 'asm goto' support test to Kconfig 2019-06-04 08:02:34 +02:00
dynamic_queue_limits.c
earlycpio.c
error-inject.c
errseq.c
extable.c
fault-inject.c
fdt_empty_tree.c
fdt_ro.c
fdt_rw.c
fdt_strerror.c
fdt_sw.c
fdt_wip.c
fdt.c
find_bit_benchmark.c
find_bit.c
flex_array.c
flex_proportions.c
gcd.c
gen_crc32table.c
gen_crc64table.c
genalloc.c
glob.c
globtest.c
hexdump.c
hweight.c
idr.c idr: Fix idr_get_next race with idr_remove 2019-11-24 08:19:11 +01:00
inflate.c
int_sqrt.c fix int_sqrt64() for very large numbers 2019-01-22 21:40:34 +01:00
interval_tree_test.c
interval_tree.c
iomap_copy.c
iomap.c
iommu-helper.c
ioremap.c
iov_iter.c iov_iter: optimize page_copy_sane() 2019-05-22 07:37:45 +02:00
irq_poll.c
irq_regs.c
is_single_threaded.c
jedec_ddr_data.c
kasprintf.c
Kconfig
Kconfig.debug kmemleak: increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE default to 16K 2019-10-07 18:57:17 +02:00
Kconfig.kasan
Kconfig.kgdb
Kconfig.ubsan
kfifo.c
klist.c
kobject_uevent.c kobject: Don't trigger kobject_uevent(KOBJ_REMOVE) twice. 2019-05-31 06:46:28 -07:00
kobject.c
kstrtox.c
kstrtox.h
lcm.c
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 lib: logic_pio: Add logic_pio_unregister_range() 2019-09-06 10:22:19 +02:00
lru_cache.c
lshrdi3.c
Makefile x86/mm/mem_encrypt: Disable all instrumentation for early SME setup 2019-05-25 18:23:45 +02:00
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
of-reconfig-notifier-error-inject.c
oid_registry.c
once.c
parman.c
parser.c
pci_iomap.c
percpu_counter.c
percpu_test.c
percpu-refcount.c
plist.c
pm-notifier-error-inject.c
prime_numbers.c
radix-tree.c
random32.c
ratelimit.c
rational.c
rbtree_test.c
rbtree.c
reciprocal_div.c
refcount.c
rhashtable.c rhashtable: Still do rehash when we get EEXIST 2019-04-03 06:26:17 +02:00
sbitmap.c sbitmap: fix improper use of smp_mb__before_atomic() 2019-05-31 06:46:00 -07:00
scatterlist.c lib/scatterlist: Fix mapping iterator when sg->offset is greater than PAGE_SIZE 2019-07-26 09:14:23 +02:00
seq_buf.c seq_buf: Make seq_buf_puts() null-terminate the buffer 2019-02-12 19:47:16 +01:00
sg_pool.c
sg_split.c
sha1.c
sha256.c
show_mem.c
siphash.c
smp_processor_id.c
sort.c
stackdepot.c
stmp_device.c
string_helpers.c
string.c lib/string.c: implement a basic bcmp 2019-04-17 08:38:45 +02:00
strncpy_from_user.c mm/uaccess: Use 'unsigned long' to placate UBSAN warnings on older GCC versions 2019-05-31 06:46:16 -07:00
strnlen_user.c mm/uaccess: Use 'unsigned long' to placate UBSAN warnings on older GCC versions 2019-05-31 06:46:16 -07:00
syscall.c
test_bitfield.c
test_bitmap.c
test_bpf.c
test_debug_virtual.c
test_firmware.c test_firmware: fix a memory leak bug 2019-08-16 10:12:49 +02:00
test_hash.c
test_hexdump.c
test_ida.c
test_kasan.c
test_kmod.c lib/test_kmod.c: potential double free in error handling 2019-03-13 14:02:32 -07:00
test_list_sort.c
test_module.c
test_overflow.c lib/test_overflow.c: avoid tainting the kernel and fix wrap size 2019-08-06 19:06:51 +02:00
test_parman.c
test_printf.c
test_rhashtable.c lib/test_rhashtable: Make test_insert_dup() allocate its hash table dynamically 2019-02-12 19:47:21 +01:00
test_siphash.c
test_sort.c
test_static_key_base.c
test_static_keys.c
test_string.c lib/test_string.c: avoid masking memset16/32/64 failures 2019-08-06 19:06:51 +02:00
test_sysctl.c
test_ubsan.c
test_user_copy.c
test_uuid.c
test-kstrtox.c
test-string_helpers.c
textsearch.c lib: textsearch: fix escapes in example code 2019-10-29 09:19:35 +01:00
timerqueue.c
ts_bm.c
ts_fsm.c
ts_kmp.c
ubsan.c ubsan: Fix nasty -Wbuiltin-declaration-mismatch GCC-9 warnings 2019-05-10 17:54:04 +02:00
ubsan.h
ucmpdi2.c
ucs2_string.c
usercopy.c
uuid.c
vsprintf.c
win_minmax.c
xxhash.c