Patch "xen: Fix the issue of resource not being properly released in xenbus_dev_probe()" has been added to the 5.4-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

    xen: Fix the issue of resource not being properly released in xenbus_dev_probe()

to the 5.4-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:
     xen-fix-the-issue-of-resource-not-being-properly-rel.patch
and it can be found in the queue-5.4 subdirectory.

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



commit 82db2647beb7e011a6c9b0e99e0ae665142e1ea6
Author: Qiu-ji Chen <chenqiuji666@xxxxxxxxx>
Date:   Tue Nov 5 21:09:19 2024 +0800

    xen: Fix the issue of resource not being properly released in xenbus_dev_probe()
    
    [ Upstream commit afc545da381ba0c651b2658966ac737032676f01 ]
    
    This patch fixes an issue in the function xenbus_dev_probe(). In the
    xenbus_dev_probe() function, within the if (err) branch at line 313, the
    program incorrectly returns err directly without releasing the resources
    allocated by err = drv->probe(dev, id). As the return value is non-zero,
    the upper layers assume the processing logic has failed. However, the probe
    operation was performed earlier without a corresponding remove operation.
    Since the probe actually allocates resources, failing to perform the remove
    operation could lead to problems.
    
    To fix this issue, we followed the resource release logic of the
    xenbus_dev_remove() function by adding a new block fail_remove before the
    fail_put block. After entering the branch if (err) at line 313, the
    function will use a goto statement to jump to the fail_remove block,
    ensuring that the previously acquired resources are correctly released,
    thus preventing the reference count leak.
    
    This bug was identified by an experimental static analysis tool developed
    by our team. The tool specializes in analyzing reference count operations
    and detecting potential issues where resources are not properly managed.
    In this case, the tool flagged the missing release operation as a
    potential problem, which led to the development of this patch.
    
    Fixes: 4bac07c993d0 ("xen: add the Xenbus sysfs and virtual device hotplug driver")
    Cc: stable@xxxxxxxxxxxxxxx
    Signed-off-by: Qiu-ji Chen <chenqiuji666@xxxxxxxxx>
    Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
    Message-ID: <20241105130919.4621-1-chenqiuji666@xxxxxxxxx>
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index b88512d92ef52..fd686b962727a 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -250,10 +250,16 @@ int xenbus_dev_probe(struct device *_dev)
 	if (err) {
 		dev_warn(&dev->dev, "watch_otherend on %s failed.\n",
 		       dev->nodename);
-		return err;
+		goto fail_remove;
 	}
 
 	return 0;
+fail_remove:
+	if (drv->remove) {
+		down(&dev->reclaim_sem);
+		drv->remove(dev);
+		up(&dev->reclaim_sem);
+	}
 fail_put:
 	module_put(drv->driver.owner);
 fail:




[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