umber-kernel/kernel/locking
Wang Liang 9253f39bcf locktorture: Fix memory leak in param_set_cpumask()
[ Upstream commit e52b43883d084a9af263c573f2a1bd1ca5088389 ]

With CONFIG_CPUMASK_OFFSTACK=y, the 'bind_writers' buffer is allocated via
alloc_cpumask_var() in param_set_cpumask(). But it is not freed, when
setting the module parameter multiple times by sysfs interface or removing
module.

Below kmemleak trace is seen for this issue:

unreferenced object 0xffff888100aabff8 (size 8):
  comm "bash", pid 323, jiffies 4295059233
  hex dump (first 8 bytes):
    07 00 00 00 00 00 00 00                          ........
  backtrace (crc ac50919):
    __kmalloc_node_noprof+0x2e5/0x420
    alloc_cpumask_var_node+0x1f/0x30
    param_set_cpumask+0x26/0xb0 [locktorture]
    param_attr_store+0x93/0x100
    module_attr_store+0x1b/0x30
    kernfs_fop_write_iter+0x114/0x1b0
    vfs_write+0x300/0x410
    ksys_write+0x60/0xd0
    do_syscall_64+0xa4/0x260
    entry_SYSCALL_64_after_hwframe+0x77/0x7f

This issue can be reproduced by:
  insmod locktorture.ko bind_writers=1
  rmmod locktorture

or:
  insmod locktorture.ko bind_writers=1
  echo 2 > /sys/module/locktorture/parameters/bind_writers

Considering that setting the module parameter 'bind_writers' or
'bind_readers' by sysfs interface has no real effect, set the parameter
permissions to 0444. To fix the memory leak when removing module, free
'bind_writers' and 'bind_readers' memory in lock_torture_cleanup().

Fixes: 73e3412424 ("locktorture: Add readers_bind and writers_bind module parameters")
Suggested-by: Zhang Changzhong <zhangchangzhong@huawei.com>
Signed-off-by: Wang Liang <wangliang74@huawei.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-12-18 14:02:51 +01:00
..
Makefile
irqflag-debug.c
lock_events.c
lock_events.h
lock_events_list.h
lockdep.c lockdep: Speed up lockdep_unregister_key() with expedited RCU synchronization 2025-07-14 21:57:29 -07:00
lockdep_internals.h locking/lockdep: Change 'static const' variables to enum values 2025-07-14 21:57:29 -07:00
lockdep_proc.c locking/lockdep: Avoid struct return in lock_stats() 2025-07-14 21:57:20 -07:00
lockdep_states.h
locktorture.c locktorture: Fix memory leak in param_set_cpumask() 2025-12-18 14:02:51 +01:00
mcs_spinlock.h
mutex-debug.c locking/mutex: Add p->blocked_on wrappers for correctness checks 2025-07-14 17:16:32 +02:00
mutex.c Locking updates for v6.16: 2025-07-29 18:11:32 -07:00
mutex.h sched: Start blocked_on chain processing in find_proxy_task() 2025-07-14 17:16:33 +02:00
osq_lock.c
percpu-rwsem.c
qrwlock.c
qspinlock.c
qspinlock.h
qspinlock_paravirt.h
qspinlock_stat.h
rtmutex.c
rtmutex_api.c locking/rtmutex: Move max_lock_depth into rtmutex.c 2025-07-23 11:52:47 +02:00
rtmutex_common.h locking/local_lock: Introduce local_lock_is_locked(). 2025-09-29 09:42:35 +02:00
rwbase_rt.c
rwsem.c Significant patch series in this pull request: 2025-08-03 16:23:09 -07:00
semaphore.c
spinlock.c
spinlock_debug.c locking/spinlock/debug: Fix data-race in do_raw_write_lock 2025-12-12 18:42:45 +01:00
spinlock_rt.c
test-ww_mutex.c
ww_mutex.h locking: Fix __clear_task_blocked_on() warning from __ww_mutex_wound() path 2025-08-13 10:34:54 +02:00
ww_rt_mutex.c