svn commit: r287599 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Wed Sep 9 19:31:09 UTC 2015
Author: kib
Date: Wed Sep 9 19:31:08 2015
New Revision: 287599
URL: https://svnweb.freebsd.org/changeset/base/287599
Log:
For open("name", O_DIRECTORY | O_CREAT), do not try to create the
named node, open(2) cannot create directories. But do allow the flag
combination to succeed if the directory already exists.
Declare the open("name", O_DIRECTORY | O_CREAT | O_EXCL) always
invalid for the same reason, since open(2) cannot create directory.
Note that there is an argument that O_DIRECTORY | O_CREAT should be
invalid always, regardless of the target directory existence or
O_EXCL. The current fix is conservative and allows the call to
succeed in the situation where it succeeded before the patch.
Reported by: Tom Ridge <freebsd at tom-ridge.com>
Reviewed by: rwatson
PR: 202892
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Modified:
head/sys/kern/vfs_vnops.c
Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c Wed Sep 9 17:15:13 2015 (r287598)
+++ head/sys/kern/vfs_vnops.c Wed Sep 9 19:31:08 2015 (r287599)
@@ -195,7 +195,10 @@ vn_open_cred(struct nameidata *ndp, int
restart:
fmode = *flagp;
- if (fmode & O_CREAT) {
+ if ((fmode & (O_CREAT | O_EXCL | O_DIRECTORY)) == (O_CREAT |
+ O_EXCL | O_DIRECTORY))
+ return (EINVAL);
+ else if ((fmode & (O_CREAT | O_DIRECTORY)) == O_CREAT) {
ndp->ni_cnd.cn_nameiop = CREATE;
/*
* Set NOCACHE to avoid flushing the cache when
More information about the svn-src-head
mailing list