]> www.infradead.org Git - linux.git/commitdiff
devres: Fix memory leakage caused by driver API devm_free_percpu()
authorZijun Hu <quic_zijuhu@quicinc.com>
Tue, 2 Jul 2024 14:51:51 +0000 (22:51 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 4 Jul 2024 10:34:50 +0000 (12:34 +0200)
It will cause memory leakage when use driver API devm_free_percpu()
to free memory allocated by devm_alloc_percpu(), fixed by using
devres_release() instead of devres_destroy() within devm_free_percpu().

Fixes: ff86aae3b411 ("devres: add devm_alloc_percpu()")
Cc: stable@vger.kernel.org
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
Link: https://lore.kernel.org/r/1719931914-19035-3-git-send-email-quic_zijuhu@quicinc.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/devres.c

index ff2247eec43cefccfab650198217cadb05d4f81f..8d709dbd4e0c1d64e72e1b224c8054b1ca09db9b 100644 (file)
@@ -1225,7 +1225,11 @@ EXPORT_SYMBOL_GPL(__devm_alloc_percpu);
  */
 void devm_free_percpu(struct device *dev, void __percpu *pdata)
 {
-       WARN_ON(devres_destroy(dev, devm_percpu_release, devm_percpu_match,
+       /*
+        * Use devres_release() to prevent memory leakage as
+        * devm_free_pages() does.
+        */
+       WARN_ON(devres_release(dev, devm_percpu_release, devm_percpu_match,
                               (__force void *)pdata));
 }
 EXPORT_SYMBOL_GPL(devm_free_percpu);