drivers/platform/surface/surfacepro3_button.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
strcpy() has been deprecated [1] because it performs no bounds checking
on the destination buffer, which can lead to buffer overflows. Replace
it with the safer strscpy(). No functional changes.
Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strcpy [1]
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
---
drivers/platform/surface/surfacepro3_button.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/platform/surface/surfacepro3_button.c b/drivers/platform/surface/surfacepro3_button.c
index 2755601f979c..d027a064a62d 100644
--- a/drivers/platform/surface/surfacepro3_button.c
+++ b/drivers/platform/surface/surfacepro3_button.c
@@ -10,6 +10,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
+#include <linux/string.h>
#include <linux/types.h>
#include <linux/input.h>
#include <linux/acpi.h>
@@ -211,7 +212,7 @@ static int surface_button_add(struct acpi_device *device)
}
name = acpi_device_name(device);
- strcpy(name, SURFACE_BUTTON_DEVICE_NAME);
+ strscpy(acpi_device_name(device), SURFACE_BUTTON_DEVICE_NAME);
snprintf(button->phys, sizeof(button->phys), "%s/buttons", hid);
input->name = name;
--
Thorsten Blum <thorsten.blum@linux.dev>
GPG: 1D60 735E 8AEF 3BE4 73B6 9D84 7336 78FD 8DFE EAD4
Hi Thorsten, On 1/5/2026 8:18 PM, Thorsten Blum wrote: > strcpy() has been deprecated [1] because it performs no bounds checking > on the destination buffer, which can lead to buffer overflows. Replace > it with the safer strscpy(). No functional changes. > > Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strcpy [1] > Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev> > --- > drivers/platform/surface/surfacepro3_button.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/platform/surface/surfacepro3_button.c b/drivers/platform/surface/surfacepro3_button.c > index 2755601f979c..d027a064a62d 100644 > --- a/drivers/platform/surface/surfacepro3_button.c > +++ b/drivers/platform/surface/surfacepro3_button.c > @@ -10,6 +10,7 @@ > #include <linux/kernel.h> > #include <linux/module.h> > #include <linux/init.h> > +#include <linux/string.h> > #include <linux/types.h> > #include <linux/input.h> > #include <linux/acpi.h> > @@ -211,7 +212,7 @@ static int surface_button_add(struct acpi_device *device) > } > > name = acpi_device_name(device); > - strcpy(name, SURFACE_BUTTON_DEVICE_NAME); > + strscpy(acpi_device_name(device), SURFACE_BUTTON_DEVICE_NAME); Thanks for the fix, a minor question might be why we do not reuse name by strscpy(name, SURFACE_BUTTON_DEVICE_NAME) ? thanks, Chenyu > snprintf(button->phys, sizeof(button->phys), "%s/buttons", hid); > > input->name = name;
On 5. Jan 2026, at 13:52, Chen, Yu C wrote: >> - strcpy(name, SURFACE_BUTTON_DEVICE_NAME); >> + strscpy(acpi_device_name(device), SURFACE_BUTTON_DEVICE_NAME); > > Thanks for the fix, a minor question might be why we do not reuse > name by strscpy(name, SURFACE_BUTTON_DEVICE_NAME) ? Because 'name' is a 'char *' from which the size of the destination buffer cannot be inferred by the 2-argument version of strscpy(). Using 'name' would force us to use strscpy() with 3 arguments: strscpy(name, SURFACE_BUTTON_DEVICE_NAME, MAX_ACPI_DEVICE_NAME_LEN); Thanks, Thorsten
On 1/5/2026 9:38 PM, Thorsten Blum wrote: > On 5. Jan 2026, at 13:52, Chen, Yu C wrote: >>> - strcpy(name, SURFACE_BUTTON_DEVICE_NAME); >>> + strscpy(acpi_device_name(device), SURFACE_BUTTON_DEVICE_NAME); >> >> Thanks for the fix, a minor question might be why we do not reuse >> name by strscpy(name, SURFACE_BUTTON_DEVICE_NAME) ? > > Because 'name' is a 'char *' from which the size of the destination > buffer cannot be inferred by the 2-argument version of strscpy(). > > Using 'name' would force us to use strscpy() with 3 arguments: > > strscpy(name, SURFACE_BUTTON_DEVICE_NAME, MAX_ACPI_DEVICE_NAME_LEN); > Thanks for the explanation! Reviewed-by: Chen Yu <yu.c.chen@intel.com> thanks, Chenyu > Thanks, > Thorsten >
On Mon, 5 Jan 2026, Thorsten Blum wrote: > On 5. Jan 2026, at 13:52, Chen, Yu C wrote: > >> - strcpy(name, SURFACE_BUTTON_DEVICE_NAME); > >> + strscpy(acpi_device_name(device), SURFACE_BUTTON_DEVICE_NAME); > > > > Thanks for the fix, a minor question might be why we do not reuse > > name by strscpy(name, SURFACE_BUTTON_DEVICE_NAME) ? > > Because 'name' is a 'char *' from which the size of the destination > buffer cannot be inferred by the 2-argument version of strscpy(). > > Using 'name' would force us to use strscpy() with 3 arguments: > > strscpy(name, SURFACE_BUTTON_DEVICE_NAME, MAX_ACPI_DEVICE_NAME_LEN); I suggest you just remove 'name' instead. It seems pretty useless to begin with but especially after your patch. :-) Please also add () to the subject line after function names. -- i.
On 1/5/2026 10:21 PM, Ilpo Järvinen wrote: > On Mon, 5 Jan 2026, Thorsten Blum wrote: > >> On 5. Jan 2026, at 13:52, Chen, Yu C wrote: >>>> - strcpy(name, SURFACE_BUTTON_DEVICE_NAME); >>>> + strscpy(acpi_device_name(device), SURFACE_BUTTON_DEVICE_NAME); >>> >>> Thanks for the fix, a minor question might be why we do not reuse >>> name by strscpy(name, SURFACE_BUTTON_DEVICE_NAME) ? >> >> Because 'name' is a 'char *' from which the size of the destination >> buffer cannot be inferred by the 2-argument version of strscpy(). >> >> Using 'name' would force us to use strscpy() with 3 arguments: >> >> strscpy(name, SURFACE_BUTTON_DEVICE_NAME, MAX_ACPI_DEVICE_NAME_LEN); > > I suggest you just remove 'name' instead. It seems pretty useless to begin > with but especially after your patch. :-) It was still used by other places. thanks, Chenyu > > Please also add () to the subject line after function names. >
© 2016 - 2026 Red Hat, Inc.