Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148574824
D54989.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
17 KB
Referenced Files
None
Subscribers
None
D54989.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D54989: Minor tweaks to linux compat
Attached
Detach File
Event Timeline
Log In to Comment