add error checking to setuid calls (#66)
authorAlex Richman <alex@richman.io>
Thu, 21 Jul 2016 15:17:40 +0000 (16:17 +0100)
committerNikolaus Rath <Nikolaus@rath.org>
Thu, 21 Jul 2016 15:17:40 +0000 (17:17 +0200)
lib/mount_util.c

index 589f76d7aa38155caab5403c0b08d73bdbae9dec..ad9d38c6c87d68ccbd7f3fb11a78e1871fffdade 100644 (file)
@@ -100,7 +100,13 @@ static int add_mount(const char *progname, const char *fsname,
                char *env = NULL;
 
                sigprocmask(SIG_SETMASK, &oldmask, NULL);
-               setuid(geteuid());
+
+               if(setuid(geteuid()) == -1) {
+                       fprintf(stderr, "%s: setuid: %s\n", progname, strerror(errno));
+                       res = -1;
+                       goto out_restore;
+               }
+
                execle("/bin/mount", "/bin/mount", "--no-canonicalize", "-i",
                       "-f", "-t", type, "-o", opts, fsname, mnt, NULL, &env);
                fprintf(stderr, "%s: failed to execute /bin/mount: %s\n",
@@ -153,7 +159,13 @@ static int exec_umount(const char *progname, const char *rel_mnt, int lazy)
                char *env = NULL;
 
                sigprocmask(SIG_SETMASK, &oldmask, NULL);
-               setuid(geteuid());
+
+               if(setuid(geteuid()) == -1) {
+                       fprintf(stderr, "%s: setuid: %s\n", progname, strerror(errno));
+                       res = -1;
+                       goto out_restore;
+               }
+
                if (lazy) {
                        execle("/bin/umount", "/bin/umount", "-i", rel_mnt,
                               "-l", NULL, &env);
@@ -219,7 +231,13 @@ static int remove_mount(const char *progname, const char *mnt)
                char *env = NULL;
 
                sigprocmask(SIG_SETMASK, &oldmask, NULL);
-               setuid(geteuid());
+
+               if(setuid(geteuid()) == -1) {
+                       fprintf(stderr, "%s: setuid: %s\n", progname, strerror(errno));
+                       res = -1;
+                       goto out_restore;
+               }
+
                execle("/bin/umount", "/bin/umount", "--no-canonicalize", "-i",
                       "--fake", mnt, NULL, &env);
                fprintf(stderr, "%s: failed to execute /bin/umount: %s\n",