chiark / gitweb /
udev: silence TOCTOU warning when creating a directory
authorRonny Chevalier <chevalier.ronny@gmail.com>
Sun, 9 Nov 2014 14:42:23 +0000 (15:42 +0100)
committerDavid Herrmann <dh.herrmann@gmail.com>
Sun, 16 Nov 2014 18:38:08 +0000 (19:38 +0100)
CID#979416. There is no real race here to fix, but lets make coverity
happy and rework the code.

Note that we still fail if the directory is removed _after_ we ran
mkdir(), so the same race is still there. Coverity is complaining, though.
Rewrite the code to make it happy.

(David: rewrote the commit-message to note that this is not a race. If I'm
        wrong, blame me, not Ronny!)

src/udev/collect/collect.c

index dc849bd0f00839340038902de73bd67fb5f47d5e..90df360eb2b5ec110f1fc5e420250eb389072ca2 100644 (file)
@@ -86,12 +86,12 @@ static void usage(void)
  */
 static int prepare(char *dir, char *filename)
 {
-        struct stat statbuf;
         char buf[512];
-        int fd;
+        int r, fd;
 
-        if (stat(dir, &statbuf) < 0)
-                mkdir(dir, 0700);
+        r = mkdir(dir, 0700);
+        if (r < 0 && errno != EEXIST)
+                return -errno;
 
         snprintf(buf, sizeof(buf), "%s/%s", dir, filename);