dcavalca / rpms / systemd

Forked from rpms/systemd 2 years ago
Clone
Zbigniew Jędrzejewski-Szmek a52f67
From f0c730c5407ec42ff2f416a71f6519cd0e2c0afe Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek b12ff7
From: Lennart Poettering <lennart@poettering.net>
Zbigniew Jędrzejewski-Szmek b12ff7
Date: Tue, 10 Dec 2013 18:53:03 +0000
Zbigniew Jędrzejewski-Szmek b12ff7
Subject: [PATCH] util: check for overflow in greedy_realloc()
Zbigniew Jędrzejewski-Szmek b12ff7
Zbigniew Jędrzejewski-Szmek a52f67
(cherry picked from commit 98088803bb2a9f89b7bbc063123dda3343138f18)
Zbigniew Jędrzejewski-Szmek a52f67
Zbigniew Jędrzejewski-Szmek b12ff7
Conflicts:
Zbigniew Jędrzejewski-Szmek b12ff7
	src/shared/util.c
Zbigniew Jędrzejewski-Szmek b12ff7
---
Zbigniew Jędrzejewski-Szmek b12ff7
 src/shared/util.c | 8 ++++++++
Zbigniew Jędrzejewski-Szmek b12ff7
 1 file changed, 8 insertions(+)
Zbigniew Jędrzejewski-Szmek b12ff7
Zbigniew Jędrzejewski-Szmek b12ff7
diff --git a/src/shared/util.c b/src/shared/util.c
Zbigniew Jędrzejewski-Szmek 1cc3df
index 1510c5e552..02bae9043c 100644
Zbigniew Jędrzejewski-Szmek b12ff7
--- a/src/shared/util.c
Zbigniew Jędrzejewski-Szmek b12ff7
+++ b/src/shared/util.c
Zbigniew Jędrzejewski-Szmek b12ff7
@@ -5832,10 +5832,18 @@ void* greedy_realloc(void **p, size_t *allocated, size_t need) {
Zbigniew Jędrzejewski-Szmek b12ff7
         size_t a;
Zbigniew Jędrzejewski-Szmek b12ff7
         void *q;
Zbigniew Jędrzejewski-Szmek b12ff7
 
Zbigniew Jędrzejewski-Szmek b12ff7
+        assert(p);
Zbigniew Jędrzejewski-Szmek b12ff7
+        assert(allocated);
Zbigniew Jędrzejewski-Szmek b12ff7
+
Zbigniew Jędrzejewski-Szmek b12ff7
         if (*allocated >= need)
Zbigniew Jędrzejewski-Szmek b12ff7
                 return *p;
Zbigniew Jędrzejewski-Szmek b12ff7
 
Zbigniew Jędrzejewski-Szmek b12ff7
         a = MAX(64u, need * 2);
Zbigniew Jędrzejewski-Szmek b12ff7
+
Zbigniew Jędrzejewski-Szmek b12ff7
+        /* check for overflows */
Zbigniew Jędrzejewski-Szmek b12ff7
+        if (a < need)
Zbigniew Jędrzejewski-Szmek b12ff7
+                return NULL;
Zbigniew Jędrzejewski-Szmek b12ff7
+
Zbigniew Jędrzejewski-Szmek b12ff7
         q = realloc(*p, a);
Zbigniew Jędrzejewski-Szmek b12ff7
         if (!q)
Zbigniew Jędrzejewski-Szmek b12ff7
                 return NULL;