]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
alloc-util: use memcpy_safe() in memdup() or friends 19662/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 19 May 2021 12:21:28 +0000 (21:21 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 19 May 2021 12:22:23 +0000 (21:22 +0900)
src/basic/alloc-util.c
src/basic/alloc-util.h

index bad15cc204c953ffa5e3ebb2477d1caa25efe27d..192a516db3268f41172e4858aa51fdb0f9822ca9 100644 (file)
@@ -17,8 +17,7 @@ void* memdup(const void *p, size_t l) {
         if (!ret)
                 return NULL;
 
-        memcpy(ret, p, l);
-        return ret;
+        return memcpy_safe(ret, p, l);
 }
 
 void* memdup_suffix0(const void *p, size_t l) {
@@ -35,8 +34,8 @@ void* memdup_suffix0(const void *p, size_t l) {
         if (!ret)
                 return NULL;
 
-        *((uint8_t*) mempcpy(ret, p, l)) = 0;
-        return ret;
+        ((uint8_t*) ret)[l] = 0;
+        return memcpy_safe(ret, p, l);
 }
 
 void* greedy_realloc(void **p, size_t *allocated, size_t need, size_t size) {
index 698a6583c5cd2507ff2783b9b4a3080bd9c42315..0c033213a7f383d0c708fbd4aa3f8d4694e492ed 100644 (file)
@@ -66,7 +66,7 @@ void* memdup_suffix0(const void *p, size_t l); /* We can't use _alloc_() here, s
                 size_t _l_ = l;                 \
                 assert(_l_ <= ALLOCA_MAX);      \
                 _q_ = alloca(_l_ ?: 1);         \
-                memcpy(_q_, p, _l_);            \
+                memcpy_safe(_q_, p, _l_);       \
         })
 
 #define memdupa_suffix0(p, l)                   \
@@ -76,7 +76,7 @@ void* memdup_suffix0(const void *p, size_t l); /* We can't use _alloc_() here, s
                 assert(_l_ <= ALLOCA_MAX);      \
                 _q_ = alloca(_l_ + 1);          \
                 ((uint8_t*) _q_)[_l_] = 0;      \
-                memcpy(_q_, p, _l_);            \
+                memcpy_safe(_q_, p, _l_);       \
         })
 
 static inline void freep(void *p) {