Skip to contentSkip to conversation

staging: greybus: Replace sprintf with sysfs_emit

PATCH In review Mohammad Davoudi 3 participants 3 messages Jul 15 – Jul 16

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 staging: greybus: Replace sprintf with sysfs_emit

Replace sprintf() with sysfs_emit() in sysfs show functions. The sprintf() function is unaware of the PAGE_SIZE limit of the sysfs buffer, which can potentially lead to buffer overruns. sysfs_emit() is strictly designed for sysfs attributes and inherently protects against buffer boundaries.

---
 drivers/staging/greybus/gbphy.c | 2 +-
 drivers/staging/greybus/light.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/staging/greybus/gbphy.c +1 -1
index bdb0f5164..bb9a5b538 100644
@@ -31,7 +31,7 @@ static ssize_t protocol_id_show(struct device *dev,
 {
 	struct gbphy_device *gbphy_dev = to_gbphy_dev(dev);
 
-	return sprintf(buf, "0x%02x\n", gbphy_dev->cport_desc->protocol_id);
+	return sysfs_emit(buf, "0x%02x\n", gbphy_dev->cport_desc->protocol_id);
 }
 static DEVICE_ATTR_RO(protocol_id);
 
drivers/staging/greybus/light.c +2 -2
index cab02b5da..2689f9a75 100644
@@ -173,7 +173,7 @@ static ssize_t fade_##__dir##_show(struct device *dev,			\
 	struct led_classdev *cdev = dev_get_drvdata(dev);		\
 	struct gb_channel *channel = get_channel_from_cdev(cdev);	\
 									\
-	return sprintf(buf, "%u\n", channel->fade_##__dir);		\
+	return sysfs_emit(buf, "%u\n", channel->fade_##__dir);		\
 }									\
 									\
 static ssize_t fade_##__dir##_store(struct device *dev,			\
@@ -220,7 +220,7 @@ static ssize_t color_show(struct device *dev, struct device_attribute *attr,
 	struct led_classdev *cdev = dev_get_drvdata(dev);
 	struct gb_channel *channel = get_channel_from_cdev(cdev);
 
-	return sprintf(buf, "0x%08x\n", channel->color);
+	return sysfs_emit(buf, "0x%08x\n", channel->color);
 }
 
 static ssize_t color_store(struct device *dev, struct device_attribute *attr,
Signature · 1 line
2.43.0
#1 lore raw
Quoted 7 lines · Mohammad Davoudi

Replace sprintf() with sysfs_emit() in sysfs show functions. The sprintf() function is unaware of the PAGE_SIZE limit of the sysfs buffer, which can potentially lead to buffer overruns. sysfs_emit() is strictly designed for sysfs attributes and inherently protects against buffer boundaries.

We're not applying this kind of patch in cases where sprintf is fine.

Really, I never like commit messages which talk about "potential buffer overruns". Is it a buffer overrun or not? If it's really hard to figure out then say that "This code is really hard to figure out and I suspect its fine but let's be safe."

In this case the code is really simple and we can all see the original code is fine just from reading the diff...

regards,
dan carpenter

#2 lore raw
Quoted 11 lines · On Thu, 16 Jul 2026 00:31:35 +0300 Dan Carpenter <[email protected]> wrote:
Quoted 7 lines · Mohammad Davoudi

Replace sprintf() with sysfs_emit() in sysfs show functions. The sprintf() function is unaware of the PAGE_SIZE limit of the sysfs buffer, which can potentially lead to buffer overruns. sysfs_emit() is strictly designed for sysfs attributes and inherently protects against buffer boundaries.

We're not applying this kind of patch in cases where sprintf is fine.

Quoted 7 lines

Really, I never like commit messages which talk about "potential buffer overruns". Is it a buffer overrun or not? If it's really hard to figure out then say that "This code is really hard to figure out and I suspect its fine but let's be safe."

In this case the code is really simple and we can all see the original code is fine just from reading the diff...

And you also have to double-check that it is valid to call sysfs_emit() in that context.
The call sequences aren't all that obvious and are difficult to verify.

David

Quoted 5 lines

regards,
dan carpenter