From: Ava <ava@oven.ninja>
To: prasanth.ksr@dell.com, hansg@kernel.org,
ilpo.jarvinen@linux.intel.com, Dell.Client.Kernel@dell.com,
platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: Ava <ava@oven.ninja>
Subject: [PATCH] platform/x86: dell-wmi-sysman: replace deprecated strlcpy with strscpy
Date: Sat, 24 Oct 2026 21:36:03 +1100 [thread overview]
Message-ID: <20261024103604.319624-1-ava@oven.ninja> (raw)
The kernel has deprecated the use of strlcpy wrappers in favor of
the safer strscpy variants. Replace the internal driver helper
function strlcpy_attr() with strscpy_attr() across all
dell-wmi-sysman attribute parser files.
Ensure explicit destination buffer sizes are passed using sizeof()
to prevent potential out-of-bounds array writes during ACPI object
evaluations.
Signed-off-by: Ava <ava@oven.ninja>
---
.../dell/dell-wmi-sysman/dell-wmi-sysman.h | 2 +-
.../dell/dell-wmi-sysman/enum-attributes.c | 25 +++++++++++--------
.../x86/dell/dell-wmi-sysman/int-attributes.c | 20 +++++++++------
.../dell/dell-wmi-sysman/passobj-attributes.c | 5 ++--
.../dell/dell-wmi-sysman/string-attributes.c | 25 +++++++++++--------
.../x86/dell/dell-wmi-sysman/sysman.c | 21 +++++++---------
6 files changed, 55 insertions(+), 43 deletions(-)
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/dell-wmi-sysman.h b/drivers/platform/x86/dell/dell-wmi-sysman/dell-wmi-sysman.h
index eb48ced55..f82e07efc 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/dell-wmi-sysman.h
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/dell-wmi-sysman.h
@@ -162,7 +162,7 @@ static ssize_t curr_val##_store(struct kobject *kobj, \
union acpi_object *get_wmiobj_pointer(int instance_id, const char *guid_string);
int get_instance_count(const char *guid_string);
-void strlcpy_attr(char *dest, char *src);
+int strscpy_attr(char *dest, char *src, size_t size);
int populate_enum_data(union acpi_object *enumeration_obj, int instance_id,
struct kobject *attr_name_kobj, u32 enum_property_count);
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c b/drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c
index a85639d8a..27291261c 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/enum-attributes.c
@@ -165,24 +165,29 @@ int populate_enum_data(union acpi_object *enumeration_obj, int instance_id,
wmi_priv.enumeration_data[instance_id].attr_name_kobj = attr_name_kobj;
if (check_property_type(enumeration, ATTR_NAME, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.enumeration_data[instance_id].attribute_name,
- enumeration_obj[ATTR_NAME].string.pointer);
+ strscpy_attr(wmi_priv.enumeration_data[instance_id].attribute_name,
+ enumeration_obj[ATTR_NAME].string.pointer,
+ sizeof(wmi_priv.enumeration_data[instance_id].attribute_name));
if (check_property_type(enumeration, DISPL_NAME_LANG_CODE, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.enumeration_data[instance_id].display_name_language_code,
- enumeration_obj[DISPL_NAME_LANG_CODE].string.pointer);
+ strscpy_attr(wmi_priv.enumeration_data[instance_id].display_name_language_code,
+ enumeration_obj[DISPL_NAME_LANG_CODE].string.pointer,
+ sizeof(wmi_priv.enumeration_data[instance_id].display_name_language_code));
if (check_property_type(enumeration, DISPLAY_NAME, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.enumeration_data[instance_id].display_name,
- enumeration_obj[DISPLAY_NAME].string.pointer);
+ strscpy_attr(wmi_priv.enumeration_data[instance_id].display_name,
+ enumeration_obj[DISPLAY_NAME].string.pointer,
+ sizeof(wmi_priv.enumeration_data[instance_id].display_name));
if (check_property_type(enumeration, DEFAULT_VAL, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.enumeration_data[instance_id].default_value,
- enumeration_obj[DEFAULT_VAL].string.pointer);
+ strscpy_attr(wmi_priv.enumeration_data[instance_id].default_value,
+ enumeration_obj[DEFAULT_VAL].string.pointer,
+ sizeof(wmi_priv.enumeration_data[instance_id].default_value));
if (check_property_type(enumeration, MODIFIER, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.enumeration_data[instance_id].dell_modifier,
- enumeration_obj[MODIFIER].string.pointer);
+ strscpy_attr(wmi_priv.enumeration_data[instance_id].dell_modifier,
+ enumeration_obj[MODIFIER].string.pointer,
+ sizeof(wmi_priv.enumeration_data[instance_id].dell_modifier));
next_obj = MODIFIER + 1;
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c b/drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c
index ab5c24722..a32630a33 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/int-attributes.c
@@ -144,24 +144,28 @@ int populate_int_data(union acpi_object *integer_obj, int instance_id,
wmi_priv.integer_data[instance_id].attr_name_kobj = attr_name_kobj;
if (check_property_type(integer, ATTR_NAME, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.integer_data[instance_id].attribute_name,
- integer_obj[ATTR_NAME].string.pointer);
+ strscpy_attr(wmi_priv.integer_data[instance_id].attribute_name,
+ integer_obj[ATTR_NAME].string.pointer,
+ sizeof(wmi_priv.integer_data[instance_id].attribute_name));
if (check_property_type(integer, DISPL_NAME_LANG_CODE, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.integer_data[instance_id].display_name_language_code,
- integer_obj[DISPL_NAME_LANG_CODE].string.pointer);
+ strscpy_attr(wmi_priv.integer_data[instance_id].display_name_language_code,
+ integer_obj[DISPL_NAME_LANG_CODE].string.pointer,
+ sizeof(wmi_priv.integer_data[instance_id].display_name_language_code));
if (check_property_type(integer, DISPLAY_NAME, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.integer_data[instance_id].display_name,
- integer_obj[DISPLAY_NAME].string.pointer);
+ strscpy_attr(wmi_priv.integer_data[instance_id].display_name,
+ integer_obj[DISPLAY_NAME].string.pointer,
+ sizeof(wmi_priv.integer_data[instance_id].display_name));
if (check_property_type(integer, DEFAULT_VAL, ACPI_TYPE_INTEGER))
return -EINVAL;
wmi_priv.integer_data[instance_id].default_value =
(uintptr_t)integer_obj[DEFAULT_VAL].string.pointer;
if (check_property_type(integer, MODIFIER, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.integer_data[instance_id].dell_modifier,
- integer_obj[MODIFIER].string.pointer);
+ strscpy_attr(wmi_priv.integer_data[instance_id].dell_modifier,
+ integer_obj[MODIFIER].string.pointer,
+ sizeof(wmi_priv.integer_data[instance_id].dell_modifier));
if (check_property_type(integer, MIN_VALUE, ACPI_TYPE_INTEGER))
return -EINVAL;
wmi_priv.integer_data[instance_id].min_value =
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c b/drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c
index be939b731..79b8f1e34 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/passobj-attributes.c
@@ -163,8 +163,9 @@ int populate_po_data(union acpi_object *po_obj, int instance_id, struct kobject
wmi_priv.po_data[instance_id].attr_name_kobj = attr_name_kobj;
if (check_property_type(po, ATTR_NAME, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.po_data[instance_id].attribute_name,
- po_obj[ATTR_NAME].string.pointer);
+ strscpy_attr(wmi_priv.po_data[instance_id].attribute_name,
+ po_obj[ATTR_NAME].string.pointer,
+ sizeof(wmi_priv.po_data[instance_id].attribute_name));
if (check_property_type(po, MIN_PASS_LEN, ACPI_TYPE_INTEGER))
return -EINVAL;
wmi_priv.po_data[instance_id].min_password_length =
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c b/drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c
index 41e19f039..2634f6cce 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/string-attributes.c
@@ -128,24 +128,29 @@ int populate_str_data(union acpi_object *str_obj, int instance_id, struct kobjec
wmi_priv.str_data[instance_id].attr_name_kobj = attr_name_kobj;
if (check_property_type(str, ATTR_NAME, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.str_data[instance_id].attribute_name,
- str_obj[ATTR_NAME].string.pointer);
+ strscpy_attr(wmi_priv.str_data[instance_id].attribute_name,
+ str_obj[ATTR_NAME].string.pointer,
+ sizeof(wmi_priv.str_data[instance_id].attribute_name));
if (check_property_type(str, DISPL_NAME_LANG_CODE, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.str_data[instance_id].display_name_language_code,
- str_obj[DISPL_NAME_LANG_CODE].string.pointer);
+ strscpy_attr(wmi_priv.str_data[instance_id].display_name_language_code,
+ str_obj[DISPL_NAME_LANG_CODE].string.pointer,
+ sizeof(wmi_priv.str_data[instance_id].display_name_language_code));
if (check_property_type(str, DISPLAY_NAME, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.str_data[instance_id].display_name,
- str_obj[DISPLAY_NAME].string.pointer);
+ strscpy_attr(wmi_priv.str_data[instance_id].display_name,
+ str_obj[DISPLAY_NAME].string.pointer,
+ sizeof(wmi_priv.str_data[instance_id].display_name));
if (check_property_type(str, DEFAULT_VAL, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.str_data[instance_id].default_value,
- str_obj[DEFAULT_VAL].string.pointer);
+ strscpy_attr(wmi_priv.str_data[instance_id].default_value,
+ str_obj[DEFAULT_VAL].string.pointer,
+ sizeof(wmi_priv.str_data[instance_id].default_value));
if (check_property_type(str, MODIFIER, ACPI_TYPE_STRING))
return -EINVAL;
- strlcpy_attr(wmi_priv.str_data[instance_id].dell_modifier,
- str_obj[MODIFIER].string.pointer);
+ strscpy_attr(wmi_priv.str_data[instance_id].dell_modifier,
+ str_obj[MODIFIER].string.pointer,
+ sizeof(wmi_priv.str_data[instance_id].dell_modifier));
if (check_property_type(str, MIN_LEN, ACPI_TYPE_INTEGER))
return -EINVAL;
wmi_priv.str_data[instance_id].min_length = (uintptr_t)str_obj[MIN_LEN].string.pointer;
diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c b/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
index ae89670f7..31b62214c 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
@@ -229,23 +229,20 @@ static const struct kobj_type attr_name_ktype = {
.sysfs_ops = &kobj_sysfs_ops,
};
+
/**
- * strlcpy_attr - Copy a length-limited, NULL-terminated string with bound checks
- * @dest: Where to copy the string to
- * @src: Where to copy the string from
+ * strscpy_attr - Copy a length limited, NULL-terminated string with bound checks
+ * @dest Where to copy the string to
+ * @src Where to copy the string from
*/
-void strlcpy_attr(char *dest, char *src)
+int strscpy_attr(char *dest, char *src, size_t size)
{
- size_t len = strlen(src) + 1;
-
- if (len > 1 && len <= MAX_BUFF)
- strscpy(dest, src, len);
+ ssize_t rc = strscpy(dest, src, size);
- /*len can be zero because any property not-applicable to attribute can
- * be empty so check only for too long buffers and log error
- */
- if (len > MAX_BUFF)
+ if (rc == -E2BIG)
pr_err("Source string returned from BIOS is out of bound!\n");
+
+ return rc;
}
/**
--
2.56.0
reply other threads:[~2026-10-24 10:36 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261024103604.319624-1-ava@oven.ninja \
--to=ava@oven.ninja \
--cc=Dell.Client.Kernel@dell.com \
--cc=hansg@kernel.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=prasanth.ksr@dell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®