]> granicus.if.org Git - strace/commitdiff
tests/uid16: skip if real uid is larger than 16bit
authorDmitry V. Levin <ldv@altlinux.org>
Mon, 2 Mar 2015 02:13:03 +0000 (02:13 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 2 Mar 2015 02:26:02 +0000 (02:26 +0000)
* tests/uid16.c (main): Skip if the uid returned by getuid matches
/proc/sys/kernel/overflowuid.

tests/uid16.c

index be5cec6d19d658be68b7c411abf969c22841dd29..a2006d7ff7ec87698230577cc3bb797320995f1f 100644 (file)
@@ -4,6 +4,7 @@
 #include <assert.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <fcntl.h>
 #include <sys/syscall.h>
 
 int
@@ -38,6 +39,21 @@ main(void)
        int *list = 0;
 
        uid = syscall(__NR_getuid);
+
+       (void) close(0);
+       if (open("/proc/sys/kernel/overflowuid", O_RDONLY) == 0) {
+               /* we trust the kernel */
+               char buf[sizeof(int)*3];
+               int n = read(0, buf, sizeof(buf) - 1);
+               if (n) {
+                       buf[n] = '\0';
+                       n = atoi(buf);
+                       if (uid == n)
+                               return 77;
+               }
+               close(0);
+       }
+
        assert(syscall(__NR_setuid, uid) == 0);
        {
                /*