Patch "PCI: Fix reset_method_store() memory leak" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    PCI: Fix reset_method_store() memory leak

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     pci-fix-reset_method_store-memory-leak.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit d167029b0bf9cc293abb1d5eaa6689cedf8e2557
Author: Todd Kjos <tkjos@xxxxxxxxxx>
Date:   Tue Oct 1 23:11:47 2024 +0000

    PCI: Fix reset_method_store() memory leak
    
    [ Upstream commit 2985b1844f3f3447f2d938eff1ef6762592065a5 ]
    
    In reset_method_store(), a string is allocated via kstrndup() and assigned
    to the local "options". options is then used in with strsep() to find
    spaces:
    
      while ((name = strsep(&options, " ")) != NULL) {
    
    If there are no remaining spaces, then options is set to NULL by strsep(),
    so the subsequent kfree(options) doesn't free the memory allocated via
    kstrndup().
    
    Fix by using a separate tmp_options to iterate with strsep() so options is
    preserved.
    
    Link: https://lore.kernel.org/r/20241001231147.3583649-1-tkjos@xxxxxxxxxx
    Fixes: d88f521da3ef ("PCI: Allow userspace to query and set device reset mechanism")
    Signed-off-by: Todd Kjos <tkjos@xxxxxxxxxx>
    Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 0baf5c03ef4cb..e08354b811073 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -5308,7 +5308,7 @@ static ssize_t reset_method_store(struct device *dev,
 				  const char *buf, size_t count)
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
-	char *options, *name;
+	char *options, *tmp_options, *name;
 	int m, n;
 	u8 reset_methods[PCI_NUM_RESET_METHODS] = { 0 };
 
@@ -5328,7 +5328,8 @@ static ssize_t reset_method_store(struct device *dev,
 		return -ENOMEM;
 
 	n = 0;
-	while ((name = strsep(&options, " ")) != NULL) {
+	tmp_options = options;
+	while ((name = strsep(&tmp_options, " ")) != NULL) {
 		if (sysfs_streq(name, ""))
 			continue;
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux