summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZijun Hu <quic_zijuhu@quicinc.com>2024-07-02 16:51:50 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2024-07-04 12:34:38 +0200
commitc884e3249f753dcef7a2b2023541ac1dc46b318e (patch)
treefc8377fee1d9694dbc7174a87eb8a0156f2d721f
parentdriver core: platform: Switch to use kmemdup_array() (diff)
downloadlinux-c884e3249f753dcef7a2b2023541ac1dc46b318e.tar.xz
linux-c884e3249f753dcef7a2b2023541ac1dc46b318e.zip
devres: Fix devm_krealloc() wasting memory
Driver API devm_krealloc() calls alloc_dr() with wrong argument @total_new_size, so causes more memory to be allocated than required fix this memory waste by using @new_size as the argument for alloc_dr(). Fixes: f82485722e5d ("devres: provide devm_krealloc()") Cc: stable@vger.kernel.org Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com> Link: https://lore.kernel.org/r/1719931914-19035-2-git-send-email-quic_zijuhu@quicinc.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/base/devres.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/base/devres.c b/drivers/base/devres.c
index 3df0025d12aa..ff2247eec43c 100644
--- a/drivers/base/devres.c
+++ b/drivers/base/devres.c
@@ -896,9 +896,12 @@ void *devm_krealloc(struct device *dev, void *ptr, size_t new_size, gfp_t gfp)
/*
* Otherwise: allocate new, larger chunk. We need to allocate before
* taking the lock as most probably the caller uses GFP_KERNEL.
+ * alloc_dr() will call check_dr_size() to reserve extra memory
+ * for struct devres automatically, so size @new_size user request
+ * is delivered to it directly as devm_kmalloc() does.
*/
new_dr = alloc_dr(devm_kmalloc_release,
- total_new_size, gfp, dev_to_node(dev));
+ new_size, gfp, dev_to_node(dev));
if (!new_dr)
return NULL;