Page MenuHomeFreeBSD

D54989.diff
No OneTemporary

D54989.diff

Index: sys/amd64/linux/linux_proto.h
===================================================================
--- sys/amd64/linux/linux_proto.h
+++ sys/amd64/linux/linux_proto.h
@@ -1435,7 +1435,10 @@
syscallarg_t dummy;
};
struct linux_fchmodat2_args {
- syscallarg_t dummy;
+ 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_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
};
struct linux_map_shadow_stack_args {
syscallarg_t dummy;
@@ -2058,7 +2061,7 @@
#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_NULL
+#define LINUX_SYS_AUE_linux_fchmodat2 AUE_FCHMODAT
#define LINUX_SYS_AUE_linux_map_shadow_stack AUE_NULL
#undef PAD_
Index: sys/amd64/linux/linux_sysent.c
===================================================================
--- sys/amd64/linux/linux_sysent.c
+++ sys/amd64/linux/linux_sysent.c
@@ -466,6 +466,6 @@
{ .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 = 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 = 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_map_shadow_stack, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 453 = linux_map_shadow_stack */
};
Index: sys/amd64/linux/linux_systrace_args.c
===================================================================
--- sys/amd64/linux/linux_systrace_args.c
+++ sys/amd64/linux/linux_systrace_args.c
@@ -2805,7 +2805,12 @@
}
/* linux_fchmodat2 */
case 452: {
- *n_args = 0;
+ 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_uint */
+ *n_args = 4;
break;
}
/* linux_map_shadow_stack */
@@ -7294,6 +7299,22 @@
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_uint";
+ break;
+ default:
+ break;
+ };
break;
/* linux_map_shadow_stack */
case 453:
@@ -8823,6 +8844,9 @@
case 451:
/* linux_fchmodat2 */
case 452:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
/* linux_map_shadow_stack */
case 453:
default:
Index: sys/amd64/linux/syscalls.master
===================================================================
--- sys/amd64/linux/syscalls.master
+++ sys/amd64/linux/syscalls.master
@@ -2187,8 +2187,13 @@
int linux_cachestat(void);
}
; Linux 6.6:
-452 AUE_NULL STD {
- int linux_fchmodat2(void);
+452 AUE_FCHMODAT STD {
+ int linux_fchmodat2(
+ l_int dfd,
+ const char *filename,
+ l_mode_t mode,
+ l_uint flags
+ );
}
453 AUE_NULL STD {
int linux_map_shadow_stack(void);
Index: sys/amd64/linux32/linux32_proto.h
===================================================================
--- sys/amd64/linux32/linux32_proto.h
+++ sys/amd64/linux32/linux32_proto.h
@@ -1736,7 +1736,10 @@
syscallarg_t dummy;
};
struct linux_fchmodat2_args {
- syscallarg_t dummy;
+ 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_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
};
int linux_exit(struct thread *, struct linux_exit_args *);
int linux_fork(struct thread *, struct linux_fork_args *);
@@ -2485,7 +2488,7 @@
#define LINUX32_SYS_AUE_linux_futex_waitv AUE_NULL
#define LINUX32_SYS_AUE_linux_set_mempolicy_home_node AUE_NULL
#define LINUX32_SYS_AUE_linux_cachestat AUE_NULL
-#define LINUX32_SYS_AUE_linux_fchmodat2 AUE_NULL
+#define LINUX32_SYS_AUE_linux_fchmodat2 AUE_FCHMODAT
#undef PAD_
#undef PADL_
Index: sys/amd64/linux32/linux32_sysent.c
===================================================================
--- sys/amd64/linux32/linux32_sysent.c
+++ sys/amd64/linux32/linux32_sysent.c
@@ -467,5 +467,5 @@
{ .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 = 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 = 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 */
};
Index: sys/amd64/linux32/linux32_systrace_args.c
===================================================================
--- sys/amd64/linux32/linux32_systrace_args.c
+++ sys/amd64/linux32/linux32_systrace_args.c
@@ -3321,7 +3321,12 @@
}
/* linux_fchmodat2 */
case 452: {
- *n_args = 0;
+ 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_uint */
+ *n_args = 4;
break;
}
default:
@@ -8677,6 +8682,22 @@
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_uint";
+ break;
+ default:
+ break;
+ };
break;
default:
break;
@@ -10493,6 +10514,9 @@
case 451:
/* linux_fchmodat2 */
case 452:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
default:
break;
};
Index: sys/amd64/linux32/syscalls.master
===================================================================
--- sys/amd64/linux32/syscalls.master
+++ sys/amd64/linux32/syscalls.master
@@ -2617,8 +2617,13 @@
int linux_cachestat(void);
}
; Linux 6.6:
-452 AUE_NULL STD {
- int linux_fchmodat2(void);
+452 AUE_FCHMODAT STD {
+ int linux_fchmodat2(
+ l_int dfd,
+ const char *filename,
+ l_mode_t mode,
+ l_uint flags
+ );
}
; vim: syntax=off
Index: sys/arm64/linux/linux_proto.h
===================================================================
--- sys/arm64/linux/linux_proto.h
+++ sys/arm64/linux/linux_proto.h
@@ -1245,7 +1245,10 @@
syscallarg_t dummy;
};
struct linux_fchmodat2_args {
- syscallarg_t dummy;
+ 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_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
};
int linux_setxattr(struct thread *, struct linux_setxattr_args *);
int linux_lsetxattr(struct thread *, struct linux_lsetxattr_args *);
@@ -1766,7 +1769,7 @@
#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_NULL
+#define LINUX_SYS_AUE_linux_fchmodat2 AUE_FCHMODAT
#undef PAD_
#undef PADL_
Index: sys/arm64/linux/linux_sysent.c
===================================================================
--- sys/arm64/linux/linux_sysent.c
+++ sys/arm64/linux/linux_sysent.c
@@ -466,5 +466,5 @@
{ .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 = 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 = 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 */
};
Index: sys/arm64/linux/linux_systrace_args.c
===================================================================
--- sys/arm64/linux/linux_systrace_args.c
+++ sys/arm64/linux/linux_systrace_args.c
@@ -2427,7 +2427,12 @@
}
/* linux_fchmodat2 */
case 452: {
- *n_args = 0;
+ 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_uint */
+ *n_args = 4;
break;
}
default:
@@ -6364,6 +6369,22 @@
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_uint";
+ break;
+ default:
+ break;
+ };
break;
default:
break;
@@ -7675,6 +7696,9 @@
case 451:
/* linux_fchmodat2 */
case 452:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
default:
break;
};
Index: sys/arm64/linux/syscalls.master
===================================================================
--- sys/arm64/linux/syscalls.master
+++ sys/arm64/linux/syscalls.master
@@ -1865,8 +1865,13 @@
int linux_cachestat(void);
}
; Linux 6.6:
-452 AUE_NULL STD {
- int linux_fchmodat2(void);
+452 AUE_FCHMODAT STD {
+ int linux_fchmodat2(
+ l_int dfd,
+ const char *filename,
+ l_mode_t mode,
+ l_uint flags
+ );
}
; vim: syntax=off
Index: sys/compat/linux/linux_dummy.c
===================================================================
--- sys/compat/linux/linux_dummy.c
+++ sys/compat/linux/linux_dummy.c
@@ -154,5 +154,3 @@
DUMMY(set_mempolicy_home_node);
/* Linux 6.5: */
DUMMY(cachestat);
-/* Linux 6.6: */
-DUMMY(fchmodat2);
Index: sys/compat/linux/linux_file.h
===================================================================
--- sys/compat/linux/linux_file.h
+++ sys/compat/linux/linux_file.h
@@ -42,6 +42,12 @@
* have such facility (automount), we can simply ignore this flag.
*/
#define LINUX_AT_EMPTY_PATH 0x1000
+ /*
+ * statx-specific flags for sync behavior with remote filesystems.
+ */
+#define LINUX_AT_STATX_FORCE_SYNC 0x2000
+#define LINUX_AT_STATX_DONT_SYNC 0x4000
+#define LINUX_AT_RECURSIVE 0x8000
/*
* posix_fadvise advice
Index: sys/compat/linux/linux_file.c
===================================================================
--- sys/compat/linux/linux_file.c
+++ sys/compat/linux/linux_file.c
@@ -737,6 +737,25 @@
args->mode, 0));
}
+int
+linux_fchmodat2(struct thread *td, struct linux_fchmodat2_args *args)
+{
+ int dfd, flags;
+
+ if ((args->flags & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH)) != 0)
+ return (EINVAL);
+
+ flags = 0;
+ if (args->flags & LINUX_AT_SYMLINK_NOFOLLOW)
+ flags |= AT_SYMLINK_NOFOLLOW;
+ if (args->flags & LINUX_AT_EMPTY_PATH)
+ flags |= AT_EMPTY_PATH;
+
+ dfd = (args->dfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->dfd;
+ return (kern_fchmodat(td, dfd, args->filename, UIO_USERSPACE,
+ args->mode, flags));
+}
+
#ifdef LINUX_LEGACY_SYSCALLS
int
linux_mkdir(struct thread *td, struct linux_mkdir_args *args)
Index: sys/compat/linux/linux_misc.h
===================================================================
--- sys/compat/linux/linux_misc.h
+++ sys/compat/linux/linux_misc.h
@@ -59,6 +59,8 @@
#define LINUX_PR_CAPBSET_READ 23
#define LINUX_PR_SET_CHILD_SUBREAPER 36
#define LINUX_PR_SET_NO_NEW_PRIVS 38
+#define LINUX_PR_SET_THP_DISABLE 41 /* Disable transparent huge pages */
+#define LINUX_PR_GET_THP_DISABLE 42 /* Get THP disable status */
#define LINUX_PR_SET_PTRACER 1499557217
#define LINUX_MAX_COMM_LEN 16 /* Maximum length of the process name. */
Index: sys/compat/linux/linux_misc.c
===================================================================
--- sys/compat/linux/linux_misc.c
+++ sys/compat/linux/linux_misc.c
@@ -1809,6 +1809,12 @@
error = kern_procctl(td, P_PID, p->p_pid,
PROC_NO_NEW_PRIVS_CTL, &arg);
break;
+ /* On FreeBSD huge pages are never disabled */
+ case LINUX_PR_SET_THP_DISABLE:
+ break;
+ case LINUX_PR_GET_THP_DISABLE:
+ td->td_retval[0] = 0;
+ break;
case LINUX_PR_SET_PTRACER:
linux_msg(td, "unsupported prctl PR_SET_PTRACER");
error = EINVAL;
Index: sys/compat/linux/linux_stats.c
===================================================================
--- sys/compat/linux/linux_stats.c
+++ sys/compat/linux/linux_stats.c
@@ -495,7 +495,9 @@
int flags, unsupported;
unsupported = linux_flags & ~(LINUX_AT_SYMLINK_NOFOLLOW |
- LINUX_AT_EMPTY_PATH | LINUX_AT_NO_AUTOMOUNT);
+ LINUX_AT_EMPTY_PATH | LINUX_AT_NO_AUTOMOUNT |
+ LINUX_AT_STATX_FORCE_SYNC | LINUX_AT_STATX_DONT_SYNC |
+ LINUX_AT_RECURSIVE);
if (unsupported != 0) {
*out_flags = unsupported;
return (false);
Index: sys/i386/linux/linux_proto.h
===================================================================
--- sys/i386/linux/linux_proto.h
+++ sys/i386/linux/linux_proto.h
@@ -1730,7 +1730,10 @@
syscallarg_t dummy;
};
struct linux_fchmodat2_args {
- syscallarg_t dummy;
+ 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_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
};
int linux_exit(struct thread *, struct linux_exit_args *);
int linux_fork(struct thread *, struct linux_fork_args *);
@@ -2483,7 +2486,7 @@
#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_NULL
+#define LINUX_SYS_AUE_linux_fchmodat2 AUE_FCHMODAT
#undef PAD_
#undef PADL_
Index: sys/i386/linux/linux_sysent.c
===================================================================
--- sys/i386/linux/linux_sysent.c
+++ sys/i386/linux/linux_sysent.c
@@ -466,5 +466,5 @@
{ .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 = 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 = 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 */
};
Index: sys/i386/linux/linux_systrace_args.c
===================================================================
--- sys/i386/linux/linux_systrace_args.c
+++ sys/i386/linux/linux_systrace_args.c
@@ -3352,7 +3352,12 @@
}
/* linux_fchmodat2 */
case 452: {
- *n_args = 0;
+ 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_uint */
+ *n_args = 4;
break;
}
default:
@@ -8733,6 +8738,22 @@
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_uint";
+ break;
+ default:
+ break;
+ };
break;
default:
break;
@@ -10573,6 +10594,9 @@
case 451:
/* linux_fchmodat2 */
case 452:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
default:
break;
};
Index: sys/i386/linux/syscalls.master
===================================================================
--- sys/i386/linux/syscalls.master
+++ sys/i386/linux/syscalls.master
@@ -2629,8 +2629,13 @@
int linux_cachestat(void);
}
; Linux 6.6:
-452 AUE_NULL STD {
- int linux_fchmodat2(void);
+452 AUE_FCHMODAT STD {
+ int linux_fchmodat2(
+ l_int dfd,
+ const char *filename,
+ l_mode_t mode,
+ l_uint flags
+ );
}
; vim: syntax=off

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 19, 9:22 PM (8 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29980050
Default Alt Text
D54989.diff (17 KB)

Event Timeline