[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] tools/xenmpd: Fix gcc10 snprintf warning



Hi,

On 14/10/2020 11:47, Bertrand Marquis wrote:
Add a check for snprintf return code and ignore the entry if we get an
error. This should in fact never happen and is more a trick to make gcc
happy and prevent compilation errors.

This is solving the gcc warning:
xenpmd.c:92:37: error: '%s' directive output may be truncated writing
between 4 and 2147483645 bytes into a region of size 271
[-Werror=format-truncation=]

IIRC, this is only affecting GCC when building for Arm32 *and* when the optimizer is enabled. If so, it would be good to add more details in the commit message.

I would also suggest to link to the bug reported on Debian.

Cheers,


Signed-off-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>
---
  tools/xenpmd/xenpmd.c | 9 +++++++--
  1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/xenpmd/xenpmd.c b/tools/xenpmd/xenpmd.c
index 35fd1c931a..12b82cf43e 100644
--- a/tools/xenpmd/xenpmd.c
+++ b/tools/xenpmd/xenpmd.c
@@ -102,6 +102,7 @@ FILE *get_next_battery_file(DIR *battery_dir,
      FILE *file = 0;
      struct dirent *dir_entries;
      char file_name[284];
+    int ret;
do
      {
@@ -111,11 +112,15 @@ FILE *get_next_battery_file(DIR *battery_dir,
          if ( strlen(dir_entries->d_name) < 4 )
              continue;
          if ( battery_info_type == BIF )
-            snprintf(file_name, sizeof(file_name), BATTERY_INFO_FILE_PATH,
+            ret = snprintf(file_name, sizeof(file_name), 
BATTERY_INFO_FILE_PATH,
                       dir_entries->d_name);
          else
-            snprintf(file_name, sizeof(file_name), BATTERY_STATE_FILE_PATH,
+            ret = snprintf(file_name, sizeof(file_name), 
BATTERY_STATE_FILE_PATH,
                       dir_entries->d_name);
+        /* This should not happen but is needed to pass gcc checks */
+        if (ret < 0)
+            continue;
+        file_name[sizeof(file_name) - 1] = '\0';
          file = fopen(file_name, "r");
      } while ( !file );

Cheers,

--
Julien Grall



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.