]> granicus.if.org Git - sysstat/commitdiff
Make sure values to be compared are unsigned integers
authorSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 6 Nov 2022 14:48:16 +0000 (15:48 +0100)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 6 Nov 2022 14:51:27 +0000 (15:51 +0100)
It seems safer to make sure that input values are unsigned int before
casting them to unsigned long long and making the comparison.

Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
common.c
common.h
sa_common.c
sadc.c

index 27249772bcd3055dfa5a879e247ddb183e5b264a..3b7fdcd5308d8302b791eeceb4b2b2a60325abc1 100644 (file)
--- a/common.c
+++ b/common.c
@@ -425,13 +425,15 @@ int check_dir(char *dirname)
  * @val3       Third value.
  ***************************************************************************
  */
-void check_overflow(unsigned long long val1, unsigned long long val2,
-                   unsigned long long val3)
+void check_overflow(unsigned int val1, unsigned int val2,
+                   unsigned int val3)
 {
-       if (val1 * val2 * val3 > UINT_MAX) {
+       if ((unsigned long long) val1 * (unsigned long long) val2 *
+           (unsigned long long) val3 > UINT_MAX) {
 #ifdef DEBUG
                fprintf(stderr, "%s: Overflow detected (%llu). Aborting...\n",
-                       __FUNCTION__, val1 * val2 * val3);
+                       __FUNCTION__, (unsigned long long) val1 * (unsigned long long) val2 *
+                       (unsigned long long) val3);
 #endif
        exit(4);
                }
index 715b2da24c5c5c5cca1ecbc01472e4916a3bc4c5..fc8a1a0d92e75618434d3dfb4f4d4d683a729b3f 100644 (file)
--- a/common.h
+++ b/common.h
@@ -259,7 +259,7 @@ int get_wwnid_from_pretty
 int check_dir
        (char *);
 void check_overflow
-       (unsigned long long, unsigned long long, unsigned long long);
+       (unsigned int, unsigned int, unsigned int);
 
 #ifndef SOURCE_SADC
 int count_bits
index 3460257a49fc8aca78e1bacd9b9e77694bca4db8..0ca8b039a8500fcd27ed616fd366f3b39eb55490 100644 (file)
@@ -463,9 +463,9 @@ void allocate_structures(struct activity *act[])
                if (act[i]->nr_ini > 0) {
 
                        /* Look for a possible overflow */
-                       check_overflow((unsigned long long) act[i]->msize,
-                                      (unsigned long long) act[i]->nr_ini,
-                                      (unsigned long long) act[i]->nr2);
+                       check_overflow((unsigned int) act[i]->msize,
+                                      (unsigned int) act[i]->nr_ini,
+                                      (unsigned int) act[i]->nr2);
 
                        for (j = 0; j < 3; j++) {
                                SREALLOC(act[i]->buf[j], void,
@@ -531,8 +531,8 @@ void reallocate_all_buffers(struct activity *a, __nr_t nr_min)
        }
 
        /* Look for a possible overflow */
-       check_overflow((unsigned long long) a->msize, nr_realloc,
-                      (unsigned long long) a->nr2);
+       check_overflow((unsigned int) a->msize, (unsigned int) nr_realloc,
+                      (unsigned int) a->nr2);
 
        for (j = 0; j < 3; j++) {
                SREALLOC(a->buf[j], void,
diff --git a/sadc.c b/sadc.c
index 123bf8e0f198ff9ba64f7c211f0c5bee1261dec6..40a1e15b7e02dc7213e4bd53189c5a1e7f545234 100644 (file)
--- a/sadc.c
+++ b/sadc.c
@@ -362,9 +362,9 @@ void sa_sys_init(void)
                if (IS_COLLECTED(act[i]->options) && (act[i]->nr_ini > 0)) {
 
                        /* Look for a possible overflow */
-                       check_overflow((unsigned long long) act[i]->msize,
-                                      (unsigned long long) act[i]->nr_ini,
-                                      (unsigned long long) act[i]->nr2);
+                       check_overflow((unsigned int) act[i]->msize,
+                                      (unsigned int) act[i]->nr_ini,
+                                      (unsigned int) act[i]->nr2);
 
                        /* Allocate structures for current activity (using nr_ini and nr2 results) */
                        SREALLOC(act[i]->_buf0, void,