]> Git Repo - linux.git/commit
nvmet: fix memory leak when removing namespaces and controllers concurrently
authorSagi Grimberg <[email protected]>
Wed, 20 May 2020 19:48:12 +0000 (12:48 -0700)
committerChristoph Hellwig <[email protected]>
Wed, 27 May 2020 05:12:40 +0000 (07:12 +0200)
commit64f5e9cdd711b030b05062c17b2ecfbce890cf4c
tree987aec557375af39fa2f3ca81a5f8d32294aae22
parentb09160c3996c11d62a08f9534c755103a10a89b4
nvmet: fix memory leak when removing namespaces and controllers concurrently

When removing a namespace, we add an NS_CHANGE async event, however if
the controller admin queue is removed after the event was added but not
yet processed, we won't free the aens, resulting in the below memory
leak [1].

Fix that by moving nvmet_async_event_free to the final controller
release after it is detached from subsys->ctrls ensuring no async
events are added, and modify it to simply remove all pending aens.

--
$ cat /sys/kernel/debug/kmemleak
unreferenced object 0xffff888c1af2c000 (size 32):
  comm "nvmetcli", pid 5164, jiffies 4295220864 (age 6829.924s)
  hex dump (first 32 bytes):
    28 01 82 3b 8b 88 ff ff 28 01 82 3b 8b 88 ff ff  (..;....(..;....
    02 00 04 65 76 65 6e 74 5f 66 69 6c 65 00 00 00  ...event_file...
  backtrace:
    [<00000000217ae580>] nvmet_add_async_event+0x57/0x290 [nvmet]
    [<0000000012aa2ea9>] nvmet_ns_changed+0x206/0x300 [nvmet]
    [<00000000bb3fd52e>] nvmet_ns_disable+0x367/0x4f0 [nvmet]
    [<00000000e91ca9ec>] nvmet_ns_free+0x15/0x180 [nvmet]
    [<00000000a15deb52>] config_item_release+0xf1/0x1c0
    [<000000007e148432>] configfs_rmdir+0x555/0x7c0
    [<00000000f4506ea6>] vfs_rmdir+0x142/0x3c0
    [<0000000000acaaf0>] do_rmdir+0x2b2/0x340
    [<0000000034d1aa52>] do_syscall_64+0xa5/0x4d0
    [<00000000211f13bc>] entry_SYSCALL_64_after_hwframe+0x6a/0xdf

Fixes: a07b4970f464 ("nvmet: add a generic NVMe target")
Reported-by: David Milburn <[email protected]>
Signed-off-by: Sagi Grimberg <[email protected]>
Tested-by: David Milburn <[email protected]>
Signed-off-by: Christoph Hellwig <[email protected]>
drivers/nvme/target/core.c
This page took 0.047631 seconds and 4 git commands to generate.