]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gpu: host1x: Fix device reference leak in host1x_device_parse_dt() error path
authorGuangshuo Li <lgs201920130244@gmail.com>
Mon, 13 Apr 2026 14:15:26 +0000 (22:15 +0800)
committerThierry Reding <treding@nvidia.com>
Thu, 28 May 2026 15:19:29 +0000 (17:19 +0200)
After device_initialize(), the embedded struct device in struct
host1x_device should be released through the device core with
put_device().

In host1x_device_add(), if host1x_device_parse_dt() fails, the current
error path frees the object directly with kfree(device). That bypasses
the normal device lifetime handling and leaks the reference held on the
embedded struct device.

The issue was identified by a static analysis tool I developed and
confirmed by manual review.

Fix this by using put_device() in the host1x_device_parse_dt() failure
path.

Fixes: f4c5cf88fbd50 ("gpu: host1x: Provide a proper struct bus_type")
Cc: stable@vger.kernel.org
Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
Acked-by: Mikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://patch.msgid.link/20260413141526.2961841-1-lgs201920130244@gmail.com
drivers/gpu/host1x/bus.c

index 70310d1e3162483e176ad22bdb6f4cd0c838d944..e3884096c2fe11157d8664eadfc8bff1a1e57fa9 100644 (file)
@@ -485,7 +485,7 @@ static int host1x_device_add(struct host1x *host1x,
 
        err = host1x_device_parse_dt(device, driver);
        if (err < 0) {
-               kfree(device);
+               put_device(&device->dev);
                return err;
        }