From dffa85f8746bfe9a400930c7eb17b5e6c89c7b8a Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Thu, 29 Jun 2017 14:55:49 -0700 Subject: [PATCH] Return EINVAL for O_SYMLINK on non-symlink --- mount/redox/scheme.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mount/redox/scheme.rs b/mount/redox/scheme.rs index 03989acef6..456b7fc443 100644 --- a/mount/redox/scheme.rs +++ b/mount/redox/scheme.rs @@ -8,7 +8,7 @@ use std::str; use std::sync::atomic::{AtomicUsize, Ordering}; use syscall::data::{Stat, StatVfs}; -use syscall::error::{Error, Result, EACCES, EEXIST, EISDIR, ENOTDIR, EPERM, ENOENT, EBADF, ELOOP}; +use syscall::error::{Error, Result, EACCES, EEXIST, EISDIR, ENOTDIR, EPERM, ENOENT, EBADF, ELOOP, EINVAL}; use syscall::flag::{O_APPEND, O_CREAT, O_DIRECTORY, O_STAT, O_EXCL, O_TRUNC, O_ACCMODE, O_RDONLY, O_WRONLY, O_RDWR, MODE_PERM, O_SYMLINK}; use syscall::scheme::Scheme; @@ -204,6 +204,8 @@ impl Scheme for FileScheme { } } return Err(Error::new(ELOOP)); + } else if !node.1.is_symlink() && flags & O_SYMLINK == O_SYMLINK { + return Err(Error::new(EINVAL)); } else { if flags & O_DIRECTORY == O_DIRECTORY { // println!("{:X} & {:X}: ENOTDIR {}", flags, O_DIRECTORY, path);