diff options
author | Ed Maste <emaste@FreeBSD.org> | 2019-11-07 15:51:44 +0000 |
---|---|---|
committer | Dmitry Chagin <dchagin@FreeBSD.org> | 2021-06-10 09:27:45 +0000 |
commit | 4d0dc71a7bf0e5ffd2a4a60244f915642d3d2899 (patch) | |
tree | 027f7f63981e9e0ef554b6fb2a3bffa3d63b3418 | |
parent | 2d7565bbbc537b1e338bd98468bd7fc25ccccdca (diff) | |
download | src-4d0dc71a7bf0e5ffd2a4a60244f915642d3d2899.tar.gz src-4d0dc71a7bf0e5ffd2a4a60244f915642d3d2899.zip |
linux_renameat2: improve flag checks
In the cases where Linux returns an error (e.g. passing in an undefined
flag) there's no need for us to emit a message. (The target of this
message is a developer working on the linuxulatorm, not the author of
presumably broken Linux software).
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D21606
(cherry picked from commit 01b9ee4c509e2882147af35eea4772d06ecd4150)
-rw-r--r-- | sys/compat/linux/linux_file.c | 7 | ||||
-rw-r--r-- | sys/compat/linux/linux_file.h | 7 |
2 files changed, 14 insertions, 0 deletions
diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c index dfa428e714d7..0b7efb6fa964 100644 --- a/sys/compat/linux/linux_file.c +++ b/sys/compat/linux/linux_file.c @@ -708,6 +708,13 @@ linux_renameat2(struct thread *td, struct linux_renameat2_args *args) int error, olddfd, newdfd; if (args->flags != 0) { + if (args->flags & ~(LINUX_RENAME_EXCHANGE | + LINUX_RENAME_NOREPLACE | LINUX_RENAME_WHITEOUT)) + return (EINVAL); + if (args->flags & LINUX_RENAME_EXCHANGE && + args->flags & (LINUX_RENAME_NOREPLACE | + LINUX_RENAME_WHITEOUT)) + return (EINVAL); linux_msg(td, "renameat2 unsupported flags 0x%x", args->flags); return (EINVAL); diff --git a/sys/compat/linux/linux_file.h b/sys/compat/linux/linux_file.h index 756a3b2be3e2..c3b1eeb8d7f4 100644 --- a/sys/compat/linux/linux_file.h +++ b/sys/compat/linux/linux_file.h @@ -128,6 +128,13 @@ #endif /* + * renameat2 flags + */ +#define LINUX_RENAME_NOREPLACE 0x00000001 +#define LINUX_RENAME_EXCHANGE 0x00000002 +#define LINUX_RENAME_WHITEOUT 0x00000004 + +/* * sync_file_range flags */ #define LINUX_SYNC_FILE_RANGE_WAIT_BEFORE 1 |