From 09a1028e0fc36cfeccf7554c69f92bef8eb72b14 Mon Sep 17 00:00:00 2001 From: GangCao Date: Tue, 23 Mar 2021 15:25:08 -0400 Subject: [PATCH] nvme: fix double free of g_hotplug_probe_ctx Add a check and only free g_hotplug_probe_ctx once. This is to fix below issue: https://github.com/spdk/spdk/issues/1849 Change-Id: I7387495890830badd06a7341d9ac4d149ca1c9f4 Signed-off-by: GangCao Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7002 Reviewed-by: Jim Harris Reviewed-by: Xiaodong Liu Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu Reviewed-by: Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot --- module/bdev/nvme/bdev_nvme.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 620117def..6ff829b76 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1812,6 +1812,11 @@ remove_cb(void *cb_ctx, struct spdk_nvme_ctrlr *ctrlr) static int bdev_nvme_hotplug_probe(void *arg) { + if (g_hotplug_probe_ctx == NULL) { + spdk_poller_unregister(&g_hotplug_probe_poller); + return SPDK_POLLER_IDLE; + } + if (spdk_nvme_probe_poll_async(g_hotplug_probe_ctx) != -EAGAIN) { g_hotplug_probe_ctx = NULL; spdk_poller_unregister(&g_hotplug_probe_poller); @@ -2276,6 +2281,7 @@ bdev_nvme_library_fini(void) spdk_poller_unregister(&g_hotplug_poller); free(g_hotplug_probe_ctx); + g_hotplug_probe_ctx = NULL; TAILQ_FOREACH_SAFE(entry, &g_skipped_nvme_ctrlrs, tailq, entry_tmp) { TAILQ_REMOVE(&g_skipped_nvme_ctrlrs, entry, tailq);