[PATCH 0/1] kernel/module.c: don't allow modprobe to hang forever on a module load

From: Konstantin Khorenko
Date: Wed Nov 13 2019 - 04:30:16 EST


After commit 6e6de3dee51a ("kernel/module.c: Only return -EEXIST
for modules that have finished loading")
the simple test leads to hanged modprobe process (INTERRUPTIBLE):

1. Make sure nft_ct module is not used by your firewall rules.
2. Run 3 copies of
# export i=0; while true; if [[ $(($i % 100)) -eq 0 ]] ; then \
echo "i=$i"; fi; do modprobe nft_ct; i=$(($i + 1)); done

3. Run 2 copies of
# while true; do rmmod nft_ct; done

Hanged "modprobe" process will appear in ~ 10 seconds.

# cat /proc/30184/stack
[<0>] load_module+0x53f/0x2060
[<0>] __do_sys_finit_module+0xd2/0x100
[<0>] do_syscall_64+0x5b/0x1c0
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9

Konstantin Khorenko (1):
kernel/module.c: wakeup processes in module_wq on module unload

kernel/module.c | 2 ++
1 file changed, 2 insertions(+)

--
2.15.1