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 [1].
In an effort to remove strlcpy() completely [2], replace
strlcpy() here with strscpy().
No return values were used, so direct replacement is safe.

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

Signed-off-by: Azeem Shaikh <azeemshaik...@gmail.com>
---
 drivers/gpu/drm/amd/amdgpu/atom.c        |    2 +-
 drivers/gpu/drm/radeon/radeon_atombios.c |    4 ++--
 drivers/gpu/drm/radeon/radeon_combios.c  |    4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c 
b/drivers/gpu/drm/amd/amdgpu/atom.c
index 1c5d9388ad0b..5f610e9a5f0f 100644
--- a/drivers/gpu/drm/amd/amdgpu/atom.c
+++ b/drivers/gpu/drm/amd/amdgpu/atom.c
@@ -1509,7 +1509,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info 
*card, void *bios)
        str = CSTR(idx);
        if (*str != '\0') {
                pr_info("ATOM BIOS: %s\n", str);
-               strlcpy(ctx->vbios_version, str, sizeof(ctx->vbios_version));
+               strscpy(ctx->vbios_version, str, sizeof(ctx->vbios_version));
        }
 
        atom_rom_header = (struct _ATOM_ROM_HEADER *)CSTR(base);
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c 
b/drivers/gpu/drm/radeon/radeon_atombios.c
index 4ad5a328d920..bf3c411a55c5 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -2105,7 +2105,7 @@ static int radeon_atombios_parse_power_table_1_3(struct 
radeon_device *rdev)
                        const char *name = 
thermal_controller_names[power_info->info.
                                                                    
ucOverdriveThermalController];
                        info.addr = 
power_info->info.ucOverdriveControllerAddress >> 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);
                }
        }
@@ -2355,7 +2355,7 @@ static void 
radeon_atombios_add_pplib_thermal_controller(struct radeon_device *r
                                struct i2c_board_info info = { };
                                const char *name = 
pp_lib_thermal_controller_names[controller->ucType];
                                info.addr = controller->ucI2cAddress >> 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);
                        }
                } else {
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c 
b/drivers/gpu/drm/radeon/radeon_combios.c
index 783a6b8802d5..795c3667f6d6 100644
--- a/drivers/gpu/drm/radeon/radeon_combios.c
+++ b/drivers/gpu/drm/radeon/radeon_combios.c
@@ -2702,7 +2702,7 @@ void radeon_combios_get_power_modes(struct radeon_device 
*rdev)
                                struct i2c_board_info info = { };
                                const char *name = 
thermal_controller_names[thermal_controller];
                                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);
                        }
                }
@@ -2719,7 +2719,7 @@ void radeon_combios_get_power_modes(struct radeon_device 
*rdev)
                                struct i2c_board_info info = { };
                                const char *name = "f75375";
                                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);
                                DRM_INFO("Possible %s thermal controller at 
0x%02x\n",
                                         name, info.addr);

Reply via email to