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@tom-ridge.com> Reviewed by: rwatson PR: 202892 Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
05e526fb5a
commit
9e18c9eb27
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=287599
@ -195,7 +195,10 @@ vn_open_cred(struct nameidata *ndp, int *flagp, int cmode, u_int vn_open_flags,
|
||||
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user