summaryrefslogtreecommitdiff
path: root/libdiskfs
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2023-09-02 16:47:13 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-09-02 16:47:41 +0200
commitba9feb14c5f5780758b6d62ebb44cd90b99eccc4 (patch)
tree287e5c475f4b60a8b445737cc6f6d59ae06cfc9b /libdiskfs
parent004164ff9965a9cb3452ca0cb34ae04ed6e1b6f6 (diff)
S_dir_lookup: Handle O_DIRECTORY
When e.g. looking up a socket with O_DIRECTORY, we should return ENOTDIR rather than EACCESS.
Diffstat (limited to 'libdiskfs')
-rw-r--r--libdiskfs/dir-lookup.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/libdiskfs/dir-lookup.c b/libdiskfs/dir-lookup.c
index 8df81cfa..76b9cb54 100644
--- a/libdiskfs/dir-lookup.c
+++ b/libdiskfs/dir-lookup.c
@@ -56,6 +56,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
int type;
struct protid *newpi = 0;
struct peropen *newpo = 0;
+ int orig_flags = flags;
if (!dircred)
return EOPNOTSUPP;
@@ -447,7 +448,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
gotit:
type = np->dn_stat.st_mode & S_IFMT;
- if (mustbedir && type != S_IFDIR)
+ if ((mustbedir || orig_flags & O_DIRECTORY) && type != S_IFDIR)
{
err = ENOTDIR;
goto out;