File pacemaker-snprintf-use-sizeof.patch of Package pacemaker.14737

commit 1bf85a3b9a2801216af279e0c2ad555a25e34733
Author: Jan Pokorný <jpokorny@redhat.com>
Date:   Wed Feb 15 13:06:50 2017 +0100

    Fix: snprintf: use sizeof(X) as size + prevent off-by-ones
    
    Being unnecessarily pesimistic snprintf target sizing may lead to
    unwarranted memory consumption.
    
    At that opportunity, also remove superfluous initial string
    initialization/termination in two affected instances.

Index: pacemaker-1.1.16+20170320.77ea74d/fencing/commands.c
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/fencing/commands.c
+++ pacemaker-1.1.16+20170320.77ea74d/fencing/commands.c
@@ -185,7 +185,7 @@ get_action_timeout(stonith_device_t * de
         }
 
         /* If the device config specified an action-specific timeout, use it */
-        snprintf(buffer, sizeof(buffer) - 1, "pcmk_%s_timeout", action);
+        snprintf(buffer, sizeof(buffer), "pcmk_%s_timeout", action);
         value = g_hash_table_lookup(device->params, buffer);
         if (value) {
             return atoi(value);
Index: pacemaker-1.1.16+20170320.77ea74d/lib/common/logging.c
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/lib/common/logging.c
+++ pacemaker-1.1.16+20170320.77ea74d/lib/common/logging.c
@@ -565,7 +565,7 @@ crm_log_filter(struct qb_log_callsite *c
             do {
                 offset = next;
                 next = strchrnul(offset, ',');
-                snprintf(token, 499, "%.*s", (int)(next - offset), offset);
+                snprintf(token, sizeof(token), "%.*s", (int)(next - offset), offset);
 
                 tag = g_quark_from_string(token);
                 crm_info("Created GQuark %u from token '%s' in '%s'", tag, token, trace_tags);
Index: pacemaker-1.1.16+20170320.77ea74d/lib/fencing/st_client.c
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/lib/fencing/st_client.c
+++ pacemaker-1.1.16+20170320.77ea74d/lib/fencing/st_client.c
@@ -517,15 +517,14 @@ make_args(const char *agent, const char
 
     CRM_CHECK(action != NULL, return NULL);
 
-    buffer[511] = 0;
-    snprintf(buffer, 511, "pcmk_%s_action", action);
+    snprintf(buffer, sizeof(buffer), "pcmk_%s_action", action);
     if (device_args) {
         value = g_hash_table_lookup(device_args, buffer);
     }
 
     if (value == NULL && device_args) {
         /* Legacy support for early 1.1 releases - Remove for 1.4 */
-        snprintf(buffer, 511, "pcmk_%s_cmd", action);
+        snprintf(buffer, sizeof(buffer), "pcmk_%s_cmd", action);
         value = g_hash_table_lookup(device_args, buffer);
     }
 
@@ -699,7 +698,7 @@ stonith_action_create(const char *agent,
         const char *st_dev_id_key = CRM_META "_" F_STONITH_DEVICE;
         const char *st_dev_id_value = NULL;
 
-        snprintf(buffer, 511, "pcmk_%s_retries", _action);
+        snprintf(buffer, sizeof(buffer), "pcmk_%s_retries", _action);
         value = g_hash_table_lookup(device_args, buffer);
 
         if (value) {
Index: pacemaker-1.1.16+20170320.77ea74d/mcp/pacemaker.c
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/mcp/pacemaker.c
+++ pacemaker-1.1.16+20170320.77ea74d/mcp/pacemaker.c
@@ -606,13 +606,11 @@ update_process_peers(void)
     struct iovec *iov;
     int rc = 0;
 
-    memset(buffer, 0, SIZEOF(buffer));
-
     if (local_name) {
-        rc = snprintf(buffer, SIZEOF(buffer) - 1, "<node uname=\"%s\" proclist=\"%u\"/>",
+        rc = snprintf(buffer, SIZEOF(buffer), "<node uname=\"%s\" proclist=\"%u\"/>",
                       local_name, get_process_list());
     } else {
-        rc = snprintf(buffer, SIZEOF(buffer) - 1, "<node proclist=\"%u\"/>", get_process_list());
+        rc = snprintf(buffer, SIZEOF(buffer), "<node proclist=\"%u\"/>", get_process_list());
     }
 
     crm_trace("Sending %s", buffer);
Index: pacemaker-1.1.16+20170320.77ea74d/tools/crm_simulate.c
===================================================================
--- pacemaker-1.1.16+20170320.77ea74d.orig/tools/crm_simulate.c
+++ pacemaker-1.1.16+20170320.77ea74d/tools/crm_simulate.c
@@ -558,7 +558,7 @@ profile_all(const char *dir)
 
     if (file_num > 0) {
         struct stat prop;
-        char buffer[FILENAME_MAX + 1];
+        char buffer[FILENAME_MAX];
 
         while (file_num--) {
             if ('.' == namelist[file_num]->d_name[0]) {
@@ -571,7 +571,7 @@ profile_all(const char *dir)
             }
 
             lpc++;
-            snprintf(buffer, FILENAME_MAX, "%s/%s", dir, namelist[file_num]->d_name);
+            snprintf(buffer, sizeof(buffer), "%s/%s", dir, namelist[file_num]->d_name);
             if (stat(buffer, &prop) == 0 && S_ISREG(prop.st_mode)) {
                 profile_one(buffer);
             }
openSUSE Build Service is sponsored by