mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 21:15:53 +02:00
We recently got a report of a crash [1] with misuse of call_rcu().
Instead of crashing the kernel, a warning and graceful return is better. [1] https://lore.kernel.org/all/aEnVuzK7VhGSizWj@pc636/ Uladzislau Rezki (Sony) (1): rcu: Return early if callback is not specified kernel/rcu/tree.c | 4 ++++ 1 file changed, 4 insertions(+) -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEEcoCIrlGe4gjE06JJqA4nf2o45hAFAmhVuzAWHGpvZWxhZ25l bGZAbnZpZGlhLmNvbQAKCRCoDid/ajjmEEIkD/96Thn+TWnz4hOu9F39YIbtsqC3 4K+T2CFHmu4gBdUmXSadSSSShjDZgwwD9iLLWw/tmCyOS39Mkoh22x8bxWAy0KM1 A36hR3sgyl+OE4m+u+o8kJxFMHMrsLXt8L/wKIT9jf/VbqkI4VMpgwfTCjz8ySFc FuujXT0QwkS2+1BtP9n19OJdyJ3vUQy6vNsk3RbEUpmBdMvADpYskWwJqTFd7hMc b1PYtsIn+0cB4qQfGcC2qtLRQAYdegg+No3VnrmFPYsfMmnG0kKl8+E/L7ts8hGJ 1nYs3Sqhql8Q6y68KOUp0PD6qVWJHL22jNKCzieNB8vV2Y7PkVr0VKmvDSNAGCsC pUsPLUjQIVMpu/k6ZM8iiaQN0vZ8C7yRUFHJqeREy/t1rpnq39x4ObhPkAzj1dCl IYMv6M03IzMzUQa1sZMJ5eCZWmtIbd2/1hDE02fK8EE/MBiyCPQgpAKZ/bGzJtOZ HgYzAhATX4tEdjj8m5Uk6F517VGp3hUs/3nn6TrGUW64SdqLp6WWd2nMBpLz1JrA BAXVliYhoI94X9Zlc/ecd+CefN2Bu/DgbYa6uO7i7/c1w/4FIG/oDVqdUoobwoDI WoQ/O/hUCh/ltO/UMmxwDbvWdmRH4iQ2Tpt8TXvLuo2El1tQda1VErexqArylOvw FG9sXft2miCQjOx9Ng== =PVd7 -----END PGP SIGNATURE----- Merge tag 'rcu/fixes-for-6.16-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux Pull RCU fix from Joel Fernandes: "We recently got a report of a crash [1] with misuse of call_rcu(). Instead of crashing the kernel, a warning and graceful return is better: - rcu: Return early if callback is not specified (Uladzislau Rezki)" Link: https://lore.kernel.org/all/aEnVuzK7VhGSizWj@pc636/ [1] * tag 'rcu/fixes-for-6.16-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rcu/linux: rcu: Return early if callback is not specified
This commit is contained in:
commit
afa3d8b6e0
|
|
@ -3072,6 +3072,10 @@ __call_rcu_common(struct rcu_head *head, rcu_callback_t func, bool lazy_in)
|
|||
/* Misaligned rcu_head! */
|
||||
WARN_ON_ONCE((unsigned long)head & (sizeof(void *) - 1));
|
||||
|
||||
/* Avoid NULL dereference if callback is NULL. */
|
||||
if (WARN_ON_ONCE(!func))
|
||||
return;
|
||||
|
||||
if (debug_rcu_head_queue(head)) {
|
||||
/*
|
||||
* Probable double call_rcu(), so leak the callback.
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user