]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: various ubsan zero size memory fixes
authorLennart Poettering <lennart@poettering.net>
Wed, 10 Oct 2018 09:34:30 +0000 (11:34 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 10 Oct 2018 10:00:56 +0000 (12:00 +0200)
Fixes: #10346
src/basic/bitmap.c
src/basic/util.h
src/test/test-hexdecoct.c

index c17c6a7a02f78f2772e7f446fff78ee96a616399..a4cd6451b0c0adf34d15862b8873c5a36698ca48 100644 (file)
@@ -206,7 +206,7 @@ bool bitmap_equal(Bitmap *a, Bitmap *b) {
                 return true;
 
         common_n_bitmaps = MIN(a->n_bitmaps, b->n_bitmaps);
-        if (memcmp(a->bitmaps, b->bitmaps, sizeof(uint64_t) * common_n_bitmaps) != 0)
+        if (memcmp_safe(a->bitmaps, b->bitmaps, sizeof(uint64_t) * common_n_bitmaps) != 0)
                 return false;
 
         c = a->n_bitmaps > b->n_bitmaps ? a : b;
index 5f3f982190214381b892f677e9aa304de165042b..8cba4ed7260e2380a9a46f7d098aa4445bee5eeb 100644 (file)
@@ -150,7 +150,13 @@ static inline int memcmp_safe(const void *s1, const void *s2, size_t n) {
 
 int on_ac_power(void);
 
-#define memzero(x,l) (memset((x), 0, (l)))
+#define memzero(x,l)                                            \
+        ({                                                      \
+                size_t _l_ = (l);                               \
+                void *_x_ = (x);                                \
+                _l_ == 0 ? _x_ : memset(_x_, 0, _l_);           \
+        })
+
 #define zero(x) (memzero(&(x), sizeof(x)))
 
 static inline void *mempset(void *s, int c, size_t n) {
index da9f3008bb5e61d7a7299d085d3a77ba65034f6e..a972ddcef7c41b4519e62e4208f13757180eb27d 100644 (file)
@@ -84,7 +84,7 @@ static void test_unhexmem_one(const char *s, size_t l, int retval) {
                         l = strlen(s);
 
                 assert_se(hex = hexmem(mem, len));
-                answer = strndupa(s, l);
+                answer = strndupa(s ?: "", l);
                 assert_se(streq(delete_chars(answer, WHITESPACE), hex));
         }
 }