[PATCH] driver core: Fix size calculation of symlink name for devlink_(add|remove)_symlinks()
From: Zijun Hu
Date: Sun Jul 07 2024 - 09:24:12 EST
From: Zijun Hu <quic_zijuhu@xxxxxxxxxxx>
devlink_(add|remove)_symlinks() wants to kzalloc() memory to save symlink
name for either supplier or consumer, but forget to consider consumer
prefix when calclulate memory size, fixed by considering prefix for both
supplier and consumer.
Fixes: 287905e68dd2 ("driver core: Expose device link details in sysfs")
Signed-off-by: Zijun Hu <quic_zijuhu@xxxxxxxxxxx>
---
drivers/base/core.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 2b4c0624b704..f14cfe5c97b7 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -572,7 +572,7 @@ static int devlink_add_symlinks(struct device *dev)
len = max(strlen(dev_bus_name(sup)) + strlen(dev_name(sup)),
strlen(dev_bus_name(con)) + strlen(dev_name(con)));
len += strlen(":");
- len += strlen("supplier:") + 1;
+ len += max(strlen("supplier:"), strlen("consumer:")) + 1;
buf = kzalloc(len, GFP_KERNEL);
if (!buf)
return -ENOMEM;
@@ -623,7 +623,7 @@ static void devlink_remove_symlinks(struct device *dev)
len = max(strlen(dev_bus_name(sup)) + strlen(dev_name(sup)),
strlen(dev_bus_name(con)) + strlen(dev_name(con)));
len += strlen(":");
- len += strlen("supplier:") + 1;
+ len += max(strlen("supplier:"), strlen("consumer:")) + 1;
buf = kzalloc(len, GFP_KERNEL);
if (!buf) {
WARN(1, "Unable to properly free device link symlinks!\n");
---
base-commit: c6653f49e4fd3b0d52c12a1fc814d6c5b234ea15
change-id: 20240707-devlink_fix-0fa46dedfe95
Best regards,
--
Zijun Hu <quic_zijuhu@xxxxxxxxxxx>