]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
nvme: fix memory leak in quirks_param_set()
authorMaurizio Lombardi <mlombard@redhat.com>
Wed, 11 Feb 2026 16:30:28 +0000 (17:30 +0100)
committerKeith Busch <kbusch@kernel.org>
Thu, 12 Feb 2026 02:34:39 +0000 (18:34 -0800)
When loading the nvme module, if the 'quirks' parameter is specified
via both the kernel command line (e.g., nvme.quirks=...) and the
modprobe command line (e.g., modprobe nvme quirks=...), the
quirks_param_set() callback is invoked twice.

Currently, in the double-invocation scenario, the second call
overwrites the nvme_pci_quirk_list pointer, causing the memory
allocated in the first call to leak.

Fix this by freeing the existing list before assigning the new one.

Fixes: b4247c8317c5 ("nvme: add support for dynamic quirk configuration via module parameter")
Reviewed-by: Daniel Wagner <dwagner@suse.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/host/pci.c

index bd884e2946005a6857aa0d7ec11a2eebccbb2590..c0f2104326ab422f5bc10341e74ac4ba23502cac 100644 (file)
@@ -219,6 +219,7 @@ static int quirks_param_set(const char *value, const struct kernel_param *kp)
                i++;
        }
 
+       kfree(nvme_pci_quirk_list);
        nvme_pci_quirk_count = count;
        nvme_pci_quirk_list  = qlist;
        goto out_free_val;