hwmon: (coretemp) Fix potentially truncated sysfs attribute name

Message ID 20231025122316.836400-1-rui.zhang@intel.com
State New
Headers
Series hwmon: (coretemp) Fix potentially truncated sysfs attribute name |

Commit Message

Zhang, Rui Oct. 25, 2023, 12:23 p.m. UTC
  When build with W=1 and "-Werror=format-truncation", below error is
observed in coretemp driver,

   drivers/hwmon/coretemp.c: In function 'create_core_data':
>> drivers/hwmon/coretemp.c:393:34: error: '%s' directive output may be truncated writing likely 5 or more bytes into a region of size between 3 and 13 [-Werror=format-truncation=]
     393 |                          "temp%d_%s", attr_no, suffixes[i]);
         |                                  ^~
   drivers/hwmon/coretemp.c:393:26: note: assuming directive output of 5 bytes
     393 |                          "temp%d_%s", attr_no, suffixes[i]);
         |                          ^~~~~~~~~~~
   drivers/hwmon/coretemp.c:392:17: note: 'snprintf' output 7 or more bytes (assuming 22) into a destination of size 19
     392 |                 snprintf(tdata->attr_name[i], CORETEMP_NAME_LENGTH,
         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     393 |                          "temp%d_%s", attr_no, suffixes[i]);
         |                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors

Given that
1. '%d' could take 10 charactors,
2. '%s' could take 10 charactors ("crit_alarm"),
3. "temp", "_" and the NULL terminator take 6 charactors,
fix the problem by increasing CORETEMP_NAME_LENGTH to 28.

Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Fixes: 7108b80a542b ("hwmon/coretemp: Handle large core ID value")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202310200443.iD3tUbbK-lkp@intel.com/
---
Note that, in practice, I found that the problem is gone if I increase
the size to 22. But I cannot explain this.
---
 drivers/hwmon/coretemp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Guenter Roeck Oct. 25, 2023, 6:58 p.m. UTC | #1
On Wed, Oct 25, 2023 at 08:23:16PM +0800, Zhang Rui wrote:
> When build with W=1 and "-Werror=format-truncation", below error is
> observed in coretemp driver,
> 
>    drivers/hwmon/coretemp.c: In function 'create_core_data':
> >> drivers/hwmon/coretemp.c:393:34: error: '%s' directive output may be truncated writing likely 5 or more bytes into a region of size between 3 and 13 [-Werror=format-truncation=]
>      393 |                          "temp%d_%s", attr_no, suffixes[i]);
>          |                                  ^~
>    drivers/hwmon/coretemp.c:393:26: note: assuming directive output of 5 bytes
>      393 |                          "temp%d_%s", attr_no, suffixes[i]);
>          |                          ^~~~~~~~~~~
>    drivers/hwmon/coretemp.c:392:17: note: 'snprintf' output 7 or more bytes (assuming 22) into a destination of size 19
>      392 |                 snprintf(tdata->attr_name[i], CORETEMP_NAME_LENGTH,
>          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>      393 |                          "temp%d_%s", attr_no, suffixes[i]);
>          |                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    cc1: all warnings being treated as errors
> 
> Given that
> 1. '%d' could take 10 charactors,
> 2. '%s' could take 10 charactors ("crit_alarm"),
> 3. "temp", "_" and the NULL terminator take 6 charactors,
> fix the problem by increasing CORETEMP_NAME_LENGTH to 28.
> 
> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> Fixes: 7108b80a542b ("hwmon/coretemp: Handle large core ID value")
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202310200443.iD3tUbbK-lkp@intel.com/

Applied.

Thanks,
Guenter
  

Patch

diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index eba94f68585a..ba82d1e79c13 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -42,7 +42,7 @@  MODULE_PARM_DESC(tjmax, "TjMax value in degrees Celsius");
 #define PKG_SYSFS_ATTR_NO	1	/* Sysfs attribute for package temp */
 #define BASE_SYSFS_ATTR_NO	2	/* Sysfs Base attr no for coretemp */
 #define NUM_REAL_CORES		128	/* Number of Real cores per cpu */
-#define CORETEMP_NAME_LENGTH	19	/* String Length of attrs */
+#define CORETEMP_NAME_LENGTH	28	/* String Length of attrs */
 #define MAX_CORE_ATTRS		4	/* Maximum no of basic attrs */
 #define TOTAL_ATTRS		(MAX_CORE_ATTRS + 1)
 #define MAX_CORE_DATA		(NUM_REAL_CORES + BASE_SYSFS_ATTR_NO)