]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
uid-range: add some overflow checks
authorLennart Poettering <lennart@poettering.net>
Thu, 31 Mar 2022 12:28:00 +0000 (14:28 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 1 Apr 2022 09:20:12 +0000 (11:20 +0200)
src/shared/uid-range.c

index c6b4b9d79500453c4960cecac21c00abfde25b63..1fa7218ee679f5c978e9226e958b2c3dedf11539 100644 (file)
@@ -69,6 +69,9 @@ int uid_range_add(UidRange **p, size_t *n, uid_t start, uid_t nr) {
         if (nr <= 0)
                 return 0;
 
+        if (start > UINT32_MAX - nr) /* overflow check */
+                return -ERANGE;
+
         for (size_t i = 0; i < *n; i++) {
                 x = (*p) + i;
                 if (uid_range_intersect(x, start, nr)) {
@@ -149,6 +152,9 @@ int uid_range_next_lower(const UidRange *p, size_t n, uid_t *uid) {
         assert(p);
         assert(uid);
 
+        if (*uid == 0)
+                return -EBUSY;
+
         candidate = *uid - 1;
 
         for (size_t i = 0; i < n; i++) {