vol: open() needs mode if called with O_CREAT
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Fri, 11 Jun 2010 23:23:22 +0000 (00:23 +0100)
committerDerrick Brashear <shadow@dementia.org>
Sun, 13 Jun 2010 05:40:13 +0000 (22:40 -0700)
If open() is called with a the O_CREAT flag, then it requires a
3rd argument, containing the mode with which to create the file.
On DARWIN (when we always use O_CREAT), and on other platforms
where the first call to open returned E_NOENT, we weren't doing this,
and so were presumably getting a random mode of whatever garbage was
on the stack.

Caught by clang-analyzer

Change-Id: Ic173e582e0d46f6d4cf8801dc7a6b4b393db5063
Reviewed-on: http://gerrit.openafs.org/2139
Reviewed-by: Russ Allbery <rra@stanford.edu>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/vol/partition.c

index b874a21..c97668a 100644 (file)
@@ -1205,7 +1205,11 @@ VLockPartition_r(char *name)
 #endif
 
     for (retries = 25; retries; retries--) {
-       dp->lock_fd = afs_open(partitionName, code);
+       if (code & O_CREAT)
+           dp->lock_fd = afs_open(partitionName, code, 0644);
+       else
+           dp->lock_fd = afs_open(partitionName, code);
+
        if (dp->lock_fd != -1)
            break;
        if (errno == ENOENT)