git: 4abfb452ea2d - main - Revert "linux: implement fchmodat2 syscall"

From: Enji Cooper <ngie_at_FreeBSD.org>
Date: Tue, 06 Oct 2026 04:52:05 UTC
The branch main has been updated by ngie:

URL: https://cgit.FreeBSD.org/src/commit/?id=4abfb452ea2d18c4710dffee7f3e65167d543041

commit 4abfb452ea2d18c4710dffee7f3e65167d543041
Author:     Enji Cooper <ngie@FreeBSD.org>
AuthorDate: 2026-10-06 04:51:35 +0000
Commit:     Enji Cooper <ngie@FreeBSD.org>
CommitDate: 2026-10-06 04:51:35 +0000

    Revert "linux: implement fchmodat2 syscall"
    
    This got accidentally committed when I was reverting another commit.
    
    This reverts commit c070ec923e2f49b6ecb5a60b584ba8f4376a6e80.
---
 sys/amd64/linux/linux_proto.h         |  7 ++-----
 sys/amd64/linux/linux_sysent.c        |  2 +-
 sys/amd64/linux/linux_systrace_args.c | 26 +-------------------------
 sys/amd64/linux/syscalls.master       |  9 ++-------
 sys/arm64/linux/linux_proto.h         |  7 ++-----
 sys/arm64/linux/linux_sysent.c        |  2 +-
 sys/arm64/linux/linux_systrace_args.c | 26 +-------------------------
 sys/arm64/linux/syscalls.master       |  9 ++-------
 sys/compat/linux/linux_dummy.c        |  2 ++
 sys/compat/linux/linux_file.c         | 22 ----------------------
 sys/i386/linux/linux_proto.h          |  7 ++-----
 sys/i386/linux/linux_sysent.c         |  2 +-
 sys/i386/linux/linux_systrace_args.c  | 26 +-------------------------
 sys/i386/linux/syscalls.master        |  9 ++-------
 14 files changed, 20 insertions(+), 136 deletions(-)

diff --git a/sys/amd64/linux/linux_proto.h b/sys/amd64/linux/linux_proto.h
index fa134b76888c..2373eff31dd3 100644
--- a/sys/amd64/linux/linux_proto.h
+++ b/sys/amd64/linux/linux_proto.h
@@ -1436,10 +1436,7 @@ struct linux_cachestat_args {
 	syscallarg_t dummy;
 };
 struct linux_fchmodat2_args {
-	char dfd_l_[PADL_(l_int)]; l_int dfd; char dfd_r_[PADR_(l_int)];
-	char filename_l_[PADL_(const char *)]; const char * filename; char filename_r_[PADR_(const char *)];
-	char mode_l_[PADL_(l_mode_t)]; l_mode_t mode; char mode_r_[PADR_(l_mode_t)];
-	char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)];
+	syscallarg_t dummy;
 };
 struct linux_map_shadow_stack_args {
 	syscallarg_t dummy;
@@ -2062,7 +2059,7 @@ int	linux_map_shadow_stack(struct thread *, struct linux_map_shadow_stack_args *
 #define	LINUX_SYS_AUE_linux_futex_waitv	AUE_NULL
 #define	LINUX_SYS_AUE_linux_set_mempolicy_home_node	AUE_NULL
 #define	LINUX_SYS_AUE_linux_cachestat	AUE_NULL
-#define	LINUX_SYS_AUE_linux_fchmodat2	AUE_FCHMODAT
+#define	LINUX_SYS_AUE_linux_fchmodat2	AUE_NULL
 #define	LINUX_SYS_AUE_linux_map_shadow_stack	AUE_NULL
 
 #undef PAD_
diff --git a/sys/amd64/linux/linux_sysent.c b/sys/amd64/linux/linux_sysent.c
index 0369191f33c0..62b50cf68a32 100644
--- a/sys/amd64/linux/linux_sysent.c
+++ b/sys/amd64/linux/linux_sysent.c
@@ -466,6 +466,6 @@ struct sysent linux_sysent[] = {
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_futex_waitv, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 449 = linux_futex_waitv */
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_set_mempolicy_home_node, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 450 = linux_set_mempolicy_home_node */
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_cachestat, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 451 = linux_cachestat */
-	{ .sy_narg = AS(linux_fchmodat2_args), .sy_call = (sy_call_t *)linux_fchmodat2, .sy_auevent = AUE_FCHMODAT, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 452 = linux_fchmodat2 */
+	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_fchmodat2, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 452 = linux_fchmodat2 */
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_map_shadow_stack, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 453 = linux_map_shadow_stack */
 };
diff --git a/sys/amd64/linux/linux_systrace_args.c b/sys/amd64/linux/linux_systrace_args.c
index 0bc79e0cea29..902a0c1619b1 100644
--- a/sys/amd64/linux/linux_systrace_args.c
+++ b/sys/amd64/linux/linux_systrace_args.c
@@ -2806,12 +2806,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
 	}
 	/* linux_fchmodat2 */
 	case 452: {
-		struct linux_fchmodat2_args *p = params;
-		iarg[a++] = p->dfd; /* l_int */
-		uarg[a++] = (intptr_t)p->filename; /* const char * */
-		iarg[a++] = p->mode; /* l_mode_t */
-		iarg[a++] = p->flags; /* l_int */
-		*n_args = 4;
+		*n_args = 0;
 		break;
 	}
 	/* linux_map_shadow_stack */
@@ -7303,22 +7298,6 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
 		break;
 	/* linux_fchmodat2 */
 	case 452:
-		switch (ndx) {
-		case 0:
-			p = "l_int";
-			break;
-		case 1:
-			p = "userland const char *";
-			break;
-		case 2:
-			p = "l_mode_t";
-			break;
-		case 3:
-			p = "l_int";
-			break;
-		default:
-			break;
-		};
 		break;
 	/* linux_map_shadow_stack */
 	case 453:
@@ -8848,9 +8827,6 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
 	case 451:
 	/* linux_fchmodat2 */
 	case 452:
-		if (ndx == 0 || ndx == 1)
-			p = "int";
-		break;
 	/* linux_map_shadow_stack */
 	case 453:
 	default:
diff --git a/sys/amd64/linux/syscalls.master b/sys/amd64/linux/syscalls.master
index 94c591c300f1..b3bbd917c013 100644
--- a/sys/amd64/linux/syscalls.master
+++ b/sys/amd64/linux/syscalls.master
@@ -2188,13 +2188,8 @@
 		int linux_cachestat(void);
 	}
 ; Linux 6.6:
-452	AUE_FCHMODAT	STD {
-		int linux_fchmodat2(
-		    l_int dfd,
-		    const char *filename,
-		    l_mode_t mode,
-		    l_int flags
-		);
+452	AUE_NULL		STD {
+		int linux_fchmodat2(void);
 	}
 453	AUE_NULL		STD {
 		int linux_map_shadow_stack(void);
diff --git a/sys/arm64/linux/linux_proto.h b/sys/arm64/linux/linux_proto.h
index f43eac187115..ad0146b8527f 100644
--- a/sys/arm64/linux/linux_proto.h
+++ b/sys/arm64/linux/linux_proto.h
@@ -1246,10 +1246,7 @@ struct linux_cachestat_args {
 	syscallarg_t dummy;
 };
 struct linux_fchmodat2_args {
-	char dfd_l_[PADL_(l_int)]; l_int dfd; char dfd_r_[PADR_(l_int)];
-	char filename_l_[PADL_(const char *)]; const char * filename; char filename_r_[PADR_(const char *)];
-	char mode_l_[PADL_(l_mode_t)]; l_mode_t mode; char mode_r_[PADR_(l_mode_t)];
-	char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)];
+	syscallarg_t dummy;
 };
 int	linux_setxattr(struct thread *, struct linux_setxattr_args *);
 int	linux_lsetxattr(struct thread *, struct linux_lsetxattr_args *);
@@ -1770,7 +1767,7 @@ int	linux_fchmodat2(struct thread *, struct linux_fchmodat2_args *);
 #define	LINUX_SYS_AUE_linux_futex_waitv	AUE_NULL
 #define	LINUX_SYS_AUE_linux_set_mempolicy_home_node	AUE_NULL
 #define	LINUX_SYS_AUE_linux_cachestat	AUE_NULL
-#define	LINUX_SYS_AUE_linux_fchmodat2	AUE_FCHMODAT
+#define	LINUX_SYS_AUE_linux_fchmodat2	AUE_NULL
 
 #undef PAD_
 #undef PADL_
diff --git a/sys/arm64/linux/linux_sysent.c b/sys/arm64/linux/linux_sysent.c
index 3e206d54283c..e54a76cfd55e 100644
--- a/sys/arm64/linux/linux_sysent.c
+++ b/sys/arm64/linux/linux_sysent.c
@@ -466,5 +466,5 @@ struct sysent linux_sysent[] = {
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_futex_waitv, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 449 = linux_futex_waitv */
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_set_mempolicy_home_node, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 450 = linux_set_mempolicy_home_node */
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_cachestat, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 451 = linux_cachestat */
-	{ .sy_narg = AS(linux_fchmodat2_args), .sy_call = (sy_call_t *)linux_fchmodat2, .sy_auevent = AUE_FCHMODAT, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 452 = linux_fchmodat2 */
+	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_fchmodat2, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 452 = linux_fchmodat2 */
 };
diff --git a/sys/arm64/linux/linux_systrace_args.c b/sys/arm64/linux/linux_systrace_args.c
index 606120a8394c..3d480b31bcd9 100644
--- a/sys/arm64/linux/linux_systrace_args.c
+++ b/sys/arm64/linux/linux_systrace_args.c
@@ -2428,12 +2428,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
 	}
 	/* linux_fchmodat2 */
 	case 452: {
-		struct linux_fchmodat2_args *p = params;
-		iarg[a++] = p->dfd; /* l_int */
-		uarg[a++] = (intptr_t)p->filename; /* const char * */
-		iarg[a++] = p->mode; /* l_mode_t */
-		iarg[a++] = p->flags; /* l_int */
-		*n_args = 4;
+		*n_args = 0;
 		break;
 	}
 	default:
@@ -6373,22 +6368,6 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
 		break;
 	/* linux_fchmodat2 */
 	case 452:
-		switch (ndx) {
-		case 0:
-			p = "l_int";
-			break;
-		case 1:
-			p = "userland const char *";
-			break;
-		case 2:
-			p = "l_mode_t";
-			break;
-		case 3:
-			p = "l_int";
-			break;
-		default:
-			break;
-		};
 		break;
 	default:
 		break;
@@ -7700,9 +7679,6 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
 	case 451:
 	/* linux_fchmodat2 */
 	case 452:
-		if (ndx == 0 || ndx == 1)
-			p = "int";
-		break;
 	default:
 		break;
 	};
diff --git a/sys/arm64/linux/syscalls.master b/sys/arm64/linux/syscalls.master
index c867de0a26e9..f4ab6f49c363 100644
--- a/sys/arm64/linux/syscalls.master
+++ b/sys/arm64/linux/syscalls.master
@@ -1866,13 +1866,8 @@
 		int linux_cachestat(void);
 	}
 ; Linux 6.6:
-452	AUE_FCHMODAT	STD {
-		int linux_fchmodat2(
-		    l_int dfd,
-		    const char *filename,
-		    l_mode_t mode,
-		    l_int flags
-		);
+452	AUE_NULL		STD {
+		int linux_fchmodat2(void);
 	}
 
  ; vim: syntax=off
diff --git a/sys/compat/linux/linux_dummy.c b/sys/compat/linux/linux_dummy.c
index 1851bd5f8219..dfb1c90e9abf 100644
--- a/sys/compat/linux/linux_dummy.c
+++ b/sys/compat/linux/linux_dummy.c
@@ -147,3 +147,5 @@ DUMMY(futex_waitv);
 DUMMY(set_mempolicy_home_node);
 /* Linux 6.5: */
 DUMMY(cachestat);
+/* Linux 6.6: */
+DUMMY(fchmodat2);
diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c
index 9e2fb36c7504..023da9a24772 100644
--- a/sys/compat/linux/linux_file.c
+++ b/sys/compat/linux/linux_file.c
@@ -779,28 +779,6 @@ linux_fchmodat(struct thread *td, struct linux_fchmodat_args *args)
 	    args->mode, 0));
 }
 
-int
-linux_fchmodat2(struct thread *td, struct linux_fchmodat2_args *args)
-{
-	int bsdflags, dfd, lflags;
-
-	bsdflags = 0;
-	lflags = args->flags;
-
-	if ((lflags & ~(LINUX_AT_EMPTY_PATH | LINUX_AT_SYMLINK_NOFOLLOW)) != 0)
-		return (EINVAL);
-
-	if ((lflags & LINUX_AT_EMPTY_PATH) != 0)
-		bsdflags |= AT_EMPTY_PATH;
-
-	if ((lflags & LINUX_AT_SYMLINK_NOFOLLOW) != 0)
-		bsdflags |= AT_SYMLINK_NOFOLLOW;
-
-	dfd = (args->dfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->dfd;
-	return (kern_fchmodat(td, dfd, args->filename, UIO_USERSPACE,
-	    args->mode, bsdflags));
-}
-
 #ifdef LINUX_LEGACY_SYSCALLS
 int
 linux_mkdir(struct thread *td, struct linux_mkdir_args *args)
diff --git a/sys/i386/linux/linux_proto.h b/sys/i386/linux/linux_proto.h
index 8a35ad054fd7..255c2ec7494b 100644
--- a/sys/i386/linux/linux_proto.h
+++ b/sys/i386/linux/linux_proto.h
@@ -1731,10 +1731,7 @@ struct linux_cachestat_args {
 	syscallarg_t dummy;
 };
 struct linux_fchmodat2_args {
-	char dfd_l_[PADL_(l_int)]; l_int dfd; char dfd_r_[PADR_(l_int)];
-	char filename_l_[PADL_(const char *)]; const char * filename; char filename_r_[PADR_(const char *)];
-	char mode_l_[PADL_(l_mode_t)]; l_mode_t mode; char mode_r_[PADR_(l_mode_t)];
-	char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)];
+	syscallarg_t dummy;
 };
 int	linux_exit(struct thread *, struct linux_exit_args *);
 int	linux_fork(struct thread *, struct linux_fork_args *);
@@ -2487,7 +2484,7 @@ int	linux_fchmodat2(struct thread *, struct linux_fchmodat2_args *);
 #define	LINUX_SYS_AUE_linux_futex_waitv	AUE_NULL
 #define	LINUX_SYS_AUE_linux_set_mempolicy_home_node	AUE_NULL
 #define	LINUX_SYS_AUE_linux_cachestat	AUE_NULL
-#define	LINUX_SYS_AUE_linux_fchmodat2	AUE_FCHMODAT
+#define	LINUX_SYS_AUE_linux_fchmodat2	AUE_NULL
 
 #undef PAD_
 #undef PADL_
diff --git a/sys/i386/linux/linux_sysent.c b/sys/i386/linux/linux_sysent.c
index 1f914ec8f671..b8893008944b 100644
--- a/sys/i386/linux/linux_sysent.c
+++ b/sys/i386/linux/linux_sysent.c
@@ -466,5 +466,5 @@ struct sysent linux_sysent[] = {
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_futex_waitv, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 449 = linux_futex_waitv */
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_set_mempolicy_home_node, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 450 = linux_set_mempolicy_home_node */
 	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_cachestat, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 451 = linux_cachestat */
-	{ .sy_narg = AS(linux_fchmodat2_args), .sy_call = (sy_call_t *)linux_fchmodat2, .sy_auevent = AUE_FCHMODAT, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 452 = linux_fchmodat2 */
+	{ .sy_narg = 0, .sy_call = (sy_call_t *)linux_fchmodat2, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC },	/* 452 = linux_fchmodat2 */
 };
diff --git a/sys/i386/linux/linux_systrace_args.c b/sys/i386/linux/linux_systrace_args.c
index f086e96b63b4..739d417bca6e 100644
--- a/sys/i386/linux/linux_systrace_args.c
+++ b/sys/i386/linux/linux_systrace_args.c
@@ -3353,12 +3353,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
 	}
 	/* linux_fchmodat2 */
 	case 452: {
-		struct linux_fchmodat2_args *p = params;
-		iarg[a++] = p->dfd; /* l_int */
-		uarg[a++] = (intptr_t)p->filename; /* const char * */
-		iarg[a++] = p->mode; /* l_mode_t */
-		iarg[a++] = p->flags; /* l_int */
-		*n_args = 4;
+		*n_args = 0;
 		break;
 	}
 	default:
@@ -8742,22 +8737,6 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
 		break;
 	/* linux_fchmodat2 */
 	case 452:
-		switch (ndx) {
-		case 0:
-			p = "l_int";
-			break;
-		case 1:
-			p = "userland const char *";
-			break;
-		case 2:
-			p = "l_mode_t";
-			break;
-		case 3:
-			p = "l_int";
-			break;
-		default:
-			break;
-		};
 		break;
 	default:
 		break;
@@ -10598,9 +10577,6 @@ systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
 	case 451:
 	/* linux_fchmodat2 */
 	case 452:
-		if (ndx == 0 || ndx == 1)
-			p = "int";
-		break;
 	default:
 		break;
 	};
diff --git a/sys/i386/linux/syscalls.master b/sys/i386/linux/syscalls.master
index 592d00f81b29..b93f28acae14 100644
--- a/sys/i386/linux/syscalls.master
+++ b/sys/i386/linux/syscalls.master
@@ -2630,13 +2630,8 @@
 		int linux_cachestat(void);
 	}
 ; Linux 6.6:
-452	AUE_FCHMODAT	STD {
-		int linux_fchmodat2(
-		    l_int dfd,
-		    const char *filename,
-		    l_mode_t mode,
-		    l_int flags
-		);
+452	AUE_NULL		STD {
+		int linux_fchmodat2(void);
 	}
 
  ; vim: syntax=off