Commit 9eec1fc1 authored by Srinivasan Shanmugam's avatar Srinivasan Shanmugam Committed by Alex Deucher

drm/radeon: Prefer strscpy over strlcpy in 'radeon_combios_get_power_modes'

strlcpy() reads the entire source buffer first. This read may exceed the
destination size limit. This is both inefficient and can lead to linear
read overflows if a source string is not NUL-terminated. The safe
replacement is strscpy() [1].

cleanup to remove the strlcpy() function entirely from the kernel [2].

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
[2] https://github.com/KSPP/linux/issues/89

Fixes the following:

WARNING: Prefer strscpy over strlcpy
+                               strlcpy(info.type, name, sizeof(info.type));

WARNING: Prefer strscpy over strlcpy
+                               strlcpy(info.type, name, sizeof(info.type));

Cc: Guchun Chen <guchun.chen@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarSrinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 6cf20211
...@@ -2702,7 +2702,7 @@ void radeon_combios_get_power_modes(struct radeon_device *rdev) ...@@ -2702,7 +2702,7 @@ void radeon_combios_get_power_modes(struct radeon_device *rdev)
struct i2c_board_info info = { }; struct i2c_board_info info = { };
const char *name = thermal_controller_names[thermal_controller]; const char *name = thermal_controller_names[thermal_controller];
info.addr = i2c_addr >> 1; info.addr = i2c_addr >> 1;
strlcpy(info.type, name, sizeof(info.type)); strscpy(info.type, name, sizeof(info.type));
i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info); i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info);
} }
} }
...@@ -2719,7 +2719,7 @@ void radeon_combios_get_power_modes(struct radeon_device *rdev) ...@@ -2719,7 +2719,7 @@ void radeon_combios_get_power_modes(struct radeon_device *rdev)
struct i2c_board_info info = { }; struct i2c_board_info info = { };
const char *name = "f75375"; const char *name = "f75375";
info.addr = 0x28; info.addr = 0x28;
strlcpy(info.type, name, sizeof(info.type)); strscpy(info.type, name, sizeof(info.type));
i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info); i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info);
DRM_INFO("Possible %s thermal controller at 0x%02x\n", DRM_INFO("Possible %s thermal controller at 0x%02x\n",
name, info.addr); name, info.addr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment