mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
4d92b95ff2
net device are refcounted. Over the years we had numerous bugs caused by imbalanced dev_hold() and dev_put() calls. The general idea is to be able to precisely pair each decrement with a corresponding prior increment. Both share a cookie, basically a pointer to private data storing stack traces. This patch adds dev_hold_track() and dev_put_track(). To use these helpers, each data structure owning a refcount should also use a "netdevice_tracker" to pair the hold and put. netdevice_tracker dev_tracker; ... dev_hold_track(dev, &dev_tracker, GFP_ATOMIC); ... dev_put_track(dev, &dev_tracker); Whenever a leak happens, we will get precise stack traces of the point dev_hold_track() happened, at device dismantle phase. We will also get a stack trace if too many dev_put_track() for the same netdevice_tracker are attempted. This is guarded by CONFIG_NET_DEV_REFCNT_TRACKER option. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
11 lines
290 B
Plaintext
11 lines
290 B
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
config NET_DEV_REFCNT_TRACKER
|
|
bool "Enable net device refcount tracking"
|
|
depends on DEBUG_KERNEL && STACKTRACE_SUPPORT
|
|
select REF_TRACKER
|
|
default n
|
|
help
|
|
Enable debugging feature to track device references.
|
|
This adds memory and cpu costs.
|