]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: hisilicon/qm - Fix device reference leak in qm_get_qos_value
authorMiaoqian Lin <linmq006@gmail.com>
Mon, 27 Oct 2025 15:09:34 +0000 (23:09 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Nov 2025 09:37:46 +0000 (10:37 +0100)
commit 59b0afd01b2ce353ab422ea9c8375b03db313a21 upstream.

The qm_get_qos_value() function calls bus_find_device_by_name() which
increases the device reference count, but fails to call put_device()
to balance the reference count and lead to a device reference leak.

Add put_device() calls in both the error path and success path to
properly balance the reference count.

Found via static analysis.

Fixes: 22d7a6c39cab ("crypto: hisilicon/qm - add pci bdf number check")
Cc: stable@vger.kernel.org
Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
Reviewed-by: Longfang Liu <liulongfang@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/crypto/hisilicon/qm.c

index f9bf102b2b37d84f48606bee0e4a2a3e26c1b45a..60fe8cc9a7d05e2d1aa411fe5a87ba1e090cc0c0 100644 (file)
@@ -3857,10 +3857,12 @@ static ssize_t qm_get_qos_value(struct hisi_qm *qm, const char *buf,
        pdev = container_of(dev, struct pci_dev, dev);
        if (pci_physfn(pdev) != qm->pdev) {
                pci_err(qm->pdev, "the pdev input does not match the pf!\n");
+               put_device(dev);
                return -EINVAL;
        }
 
        *fun_index = pdev->devfn;
+       put_device(dev);
 
        return 0;
 }