tools/xenpmd: fix possible '\0' truncation

gcc-8 complains:
    xenpmd.c:207:9: error: 'strncpy' specified bound 32 equals destination size [-Werror=stringop-truncation]
             strncpy(info->oem_info, attrib_value, 32);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    xenpmd.c:201:9: error: 'strncpy' specified bound 32 equals destination size [-Werror=stringop-truncation]
             strncpy(info->battery_type, attrib_value, 32);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    xenpmd.c:195:9: error: 'strncpy' specified bound 32 equals destination size [-Werror=stringop-truncation]
             strncpy(info->serial_number, attrib_value, 32);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    xenpmd.c:189:9: error: 'strncpy' specified bound 32 equals destination size [-Werror=stringop-truncation]
             strncpy(info->model_number, attrib_value, 32);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Copy 31 chars, then make sure terminating '\0' is present. Those fields
are passed to strlen and as '%s' for snprintf later.

Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Release-Acked-by: Juergen Gross <jgross@suse.com>
(cherry picked from commit 938c8f53b1)
This commit is contained in:
Marek Marczykowski-Górecki authored and Ian Jackson committed 2020-06-12 17:01:39 +01:00
1 parent 9737f89b07
commit f034ab45c1
1 file changed
+8 -4
+8 -4
View File
@@ -186,25 +186,29 @@ void set_attribute_battery_info(char *attrib_name,
if ( strstr(attrib_name, "model number") )
{
strncpy(info->model_number, attrib_value, 32);
strncpy(info->model_number, attrib_value, 31);
info->model_number[31] = '\0';
return;
}
if ( strstr(attrib_name, "serial number") )
{
strncpy(info->serial_number, attrib_value, 32);
strncpy(info->serial_number, attrib_value, 31);
info->serial_number[31] = '\0';
return;
}
if ( strstr(attrib_name, "battery type") )
{
strncpy(info->battery_type, attrib_value, 32);
strncpy(info->battery_type, attrib_value, 31);
info->battery_type[31] = '\0';
return;
}
if ( strstr(attrib_name, "OEM info") )
{
strncpy(info->oem_info, attrib_value, 32);
strncpy(info->oem_info, attrib_value, 31);
info->oem_info[31] = '\0';
return;
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.