From 306a55c86360a7ae7b2509771d5ea6ab0d166d85 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Sun, 29 Jun 2014 22:15:33 +0200
Subject: [PATCH] util: refuse considering UID 0xFFFF and 0xFFFFFFFF valid

---
 src/shared/util.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git src/shared/util.c src/shared/util.c
index e7ff0f8..1709bb7 100644
--- src/shared/util.c
+++ src/shared/util.c
@@ -280,6 +280,14 @@ int parse_uid(const char *s, uid_t* ret_uid) {
         if ((unsigned long) uid != ul)
                 return -ERANGE;
 
+        /* Some libc APIs use (uid_t) -1 as special placeholder */
+        if (uid == (uid_t) 0xFFFFFFFF)
+                return -EINVAL;
+
+        /* A long time ago UIDs where 16bit, hence explicitly avoid the 16bit -1 too */
+        if (uid == (uid_t) 0xFFFF)
+                return -EINVAL;
+
         *ret_uid = uid;
         return 0;
 }
-- 
1.7.9.2

