Use strscpy to copy the buffer which makes it explicit that a valid NULL
terminated string gets copied. Also, make it explicit that the source
buffer can be copied safely to the temporary buffer by checking against
its size.

Signed-off-by: Lijo Lazar <[email protected]>
---
 drivers/gpu/drm/amd/pm/amdgpu_pm.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c 
b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
index 450ecb188aed..ebe0b320ca4f 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -1375,26 +1375,22 @@ static ssize_t amdgpu_set_pp_power_profile_mode(struct 
device *dev,
        long parameter[64];
        char *sub_str, buf_cpy[128];
        char *tmp_str;
-       uint32_t i = 0;
        char tmp[2];
        long int profile_mode = 0;
        const char delimiter[3] = {' ', '\n', '\0'};
-       size_t len;
 
-       tmp[0] = *(buf);
+       tmp[0] = *(buf++);
        tmp[1] = '\0';
        ret = kstrtol(tmp, 0, &profile_mode);
        if (ret)
                return -EINVAL;
 
        if (profile_mode == PP_SMC_POWER_PROFILE_CUSTOM) {
-               if (count < 2 || count > 127)
+               if (count < 2 || count > sizeof(buf_cpy))
                        return -EINVAL;
-               while (isspace(*++buf))
-                       i++;
-               len = count - 1 - i;
-               memcpy(buf_cpy, buf, len);
-               buf_cpy[len] = '\0';
+               while (isspace(*buf))
+                       buf++;
+               strscpy(buf_cpy, buf, sizeof(buf_cpy));
                tmp_str = buf_cpy;
                while ((sub_str = strsep(&tmp_str, delimiter)) != NULL) {
                        if (strlen(sub_str) == 0)
-- 
2.49.0

Reply via email to