summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Wolf <W_Armin@gmx.de>2026-05-25 01:55:53 +0200
committerLee Jones <lee@kernel.org>2026-06-17 11:30:08 +0100
commitc19fe864f667afc49d1391d764e20b66555bcf7a (patch)
treeaee49e33ae67535e1fd646d434e1b9378307645d
parenta031b5fce5265938912d66047ec12b2208dd868f (diff)
leds: uleds: Fix potential buffer overread
The name string supplied by userspace is not guaranteed to be null-terminated, so using strchr() on it might result in a buffer overread. The same thing will happen when said string is used by the LED class device. Fix this by using strnchr() instead and explicitly check that the name string is properly null-terminated. Cc: stable@vger.kernel.org Fixes: e381322b0190 ("leds: Introduce userspace LED class driver") Signed-off-by: Armin Wolf <W_Armin@gmx.de> Link: https://patch.msgid.link/20260524235553.189134-1-W_Armin@gmx.de Signed-off-by: Lee Jones <lee@kernel.org>
-rw-r--r--drivers/leds/uleds.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/leds/uleds.c b/drivers/leds/uleds.c
index 470015e3f802..6affa581b61d 100644
--- a/drivers/leds/uleds.c
+++ b/drivers/leds/uleds.c
@@ -102,7 +102,8 @@ static ssize_t uleds_write(struct file *file, const char __user *buffer,
name = udev->user_dev.name;
if (!name[0] || !strcmp(name, ".") || !strcmp(name, "..") ||
- strchr(name, '/')) {
+ strnchr(name, sizeof(udev->user_dev.name), '/') ||
+ !strnchr(name, sizeof(udev->user_dev.name), '\0')) {
ret = -EINVAL;
goto out;
}