Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Mar 2026 23:48:22 +0000
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 8feb8d221cfb - main - linuxolator: translate LINUX_RENAME_NOREPLACE into our AT_RENAME_NOREPLACE
Message-ID:  <69aa1646.3e6fc.654bf75@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=8feb8d221cfb842ee11d744d22571baec6c18cd8

commit 8feb8d221cfb842ee11d744d22571baec6c18cd8
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-02-26 19:21:08 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-03-05 23:46:53 +0000

    linuxolator: translate LINUX_RENAME_NOREPLACE into our AT_RENAME_NOREPLACE
    
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D55539
---
 sys/compat/linux/linux_file.c | 35 +++++++++++++++++++++++------------
 1 file changed, 23 insertions(+), 12 deletions(-)

diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c
index 43ccac0308d3..30e79a53ad2a 100644
--- a/sys/compat/linux/linux_file.c
+++ b/sys/compat/linux/linux_file.c
@@ -833,23 +833,34 @@ int
 linux_renameat2(struct thread *td, struct linux_renameat2_args *args)
 {
 	int olddfd, newdfd;
+	u_int atflags;
 
-	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))
+	atflags = 0;
+	if ((args->flags & ~(LINUX_RENAME_EXCHANGE |
+	    LINUX_RENAME_NOREPLACE | LINUX_RENAME_WHITEOUT)) != 0)
+		return (EINVAL);
+	if ((args->flags & LINUX_RENAME_EXCHANGE) != 0 &&
+	    (args->flags & (LINUX_RENAME_NOREPLACE |
+	    LINUX_RENAME_WHITEOUT)) != 0)
+		return (EINVAL);
+	if ((args->flags & LINUX_RENAME_NOREPLACE) != 0) {
+		if ((args->flags & (LINUX_RENAME_EXCHANGE |
+		    LINUX_RENAME_WHITEOUT)) != 0)
 			return (EINVAL);
-#if 0
+		args->flags &= ~LINUX_RENAME_NOREPLACE;
+		atflags |= AT_RENAME_NOREPLACE;
+	}
+
+	if (args->flags != 0) {
 		/*
 		 * This spams the console on Ubuntu Focal.
 		 *
-		 * What's needed here is a general mechanism to let users know
-		 * about missing features without hogging the system.
+		 * What's needed here is a general mechanism to let
+		 * users know about missing features without hogging
+		 * the system.
 		 */
-		linux_msg(td, "renameat2 unsupported flags 0x%x",
+#if 0
+		linux_msg(td, "renameat2 unsupported flags %#x",
 		    args->flags);
 #endif
 		return (EINVAL);
@@ -858,7 +869,7 @@ linux_renameat2(struct thread *td, struct linux_renameat2_args *args)
 	olddfd = (args->olddfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->olddfd;
 	newdfd = (args->newdfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->newdfd;
 	return (kern_renameat(td, olddfd, args->oldname, newdfd,
-	    args->newname, UIO_USERSPACE, 0));
+	    args->newname, UIO_USERSPACE, atflags));
 }
 
 #ifdef LINUX_LEGACY_SYSCALLS


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69aa1646.3e6fc.654bf75>