chiark / gitweb /
util: overflow hardening
authorLennart Poettering <lennart@poettering.net>
Thu, 20 Sep 2012 09:08:27 +0000 (11:08 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 20 Sep 2012 09:08:27 +0000 (11:08 +0200)
TODO
src/shared/util.c
src/shared/util.h

diff --git a/TODO b/TODO
index 573a9534f9a1d6c3fc6aaaaabfd212ff11700a88..4a7fbb96ac7e8c7fcaaee0c339b918db567e58e8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -17,6 +17,8 @@ F18:
 
 * Retest multi-seat
 
+* file bugs against KDE/... to take the new key inhibitor locks
+
 Features:
 
 * instantiated [Install] for target units
index b48bad4c468a38068df2d504a7133d57e7ca4b8b..02ee6374c33aa2f50bf9c777c557d823f6bec3b1 100644 (file)
@@ -1184,8 +1184,11 @@ char *strnappend(const char *s, const char *suffix, size_t b) {
         assert(suffix);
 
         a = strlen(s);
+        if ((size_t) -1 - a > b)
+                return NULL;
 
-        if (!(r = new(char, a+b+1)))
+        r = new(char, a+b+1);
+        if (!r)
                 return NULL;
 
         memcpy(r, s, a);
@@ -5014,12 +5017,17 @@ char *strjoin(const char *x, ...) {
 
                 for (;;) {
                         const char *t;
+                        size_t n;
 
                         t = va_arg(ap, const char *);
                         if (!t)
                                 break;
 
-                        l += strlen(t);
+                        n = strlen(t);
+                        if (n > ((size_t) -1) - l)
+                                return NULL;
+
+                        l += n;
                 }
         } else
                 l = 0;
@@ -5291,7 +5299,7 @@ int signal_from_string(const char *s) {
         int offset = 0;
         unsigned u;
 
-        signo =__signal_from_string(s);
+        signo = __signal_from_string(s);
         if (signo > 0)
                 return signo;
 
@@ -5683,7 +5691,7 @@ void warn_melody(void) {
         if (fd < 0)
                 return;
 
-        /* Yeah, this is synchronous. Kinda sucks. Bute well... */
+        /* Yeah, this is synchronous. Kinda sucks. But well... */
 
         ioctl(fd, KIOCSOUND, (int)(1193180/440));
         usleep(125*USEC_PER_MSEC);
index e23d706ebd501b0292782866aa6c495c44b09718..2e49cfde2efda507b6546929387e129b3b15b409 100644 (file)
@@ -551,7 +551,7 @@ _malloc_  static inline void *malloc_multiply(size_t a, size_t b) {
         return malloc(a * b);
 }
 
-static inline void *memdup_multiply(const void *p, size_t a, size_t b) {
+_malloc_ static inline void *memdup_multiply(const void *p, size_t a, size_t b) {
         if (_unlikely_(a > ((size_t) -1) / b))
                 return NULL;