aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2019-11-07 15:51:44 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2021-06-10 09:27:45 +0000
commit4d0dc71a7bf0e5ffd2a4a60244f915642d3d2899 (patch)
tree027f7f63981e9e0ef554b6fb2a3bffa3d63b3418
parent2d7565bbbc537b1e338bd98468bd7fc25ccccdca (diff)
downloadsrc-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.c7
-rw-r--r--sys/compat/linux/linux_file.h7
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