git: db3eca2be206 - main - exterrctl(2): add kern_exterrctl
Date: Wed, 15 Jul 2026 09:32:42 UTC
The branch main has been updated by brooks:
URL: https://cgit.FreeBSD.org/src/commit/?id=db3eca2be2067f7e81d65686b33dcbd475aed363
commit db3eca2be2067f7e81d65686b33dcbd475aed363
Author: Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2026-07-15 08:43:50 +0000
Commit: Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2026-07-15 09:32:16 +0000
exterrctl(2): add kern_exterrctl
Reviewed by: kib
Effort: CHERI upstreaming
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D58055
---
sys/kern/sys_generic.c | 16 +++++++++++-----
sys/sys/syscallsubr.h | 1 +
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index bbfeebbe2f2e..c867867f2618 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -2310,25 +2310,31 @@ exterr_copyout(struct thread *td)
int
sys_exterrctl(struct thread *td, struct exterrctl_args *uap)
+{
+ return (kern_exterrctl(td, uap->op, uap->flags, uap->ptr));
+}
+
+int
+kern_exterrctl(struct thread *td, u_int op, u_int flags, void *ptr)
{
uint32_t ver;
int error;
- if ((uap->flags & ~(EXTERRCTLF_FORCE)) != 0)
+ if ((flags & ~(EXTERRCTLF_FORCE)) != 0)
return (EINVAL);
- switch (uap->op) {
+ switch (op) {
case EXTERRCTL_ENABLE:
if ((td->td_pflags2 & TDP2_UEXTERR) != 0 &&
- (uap->flags & EXTERRCTLF_FORCE) == 0)
+ (flags & EXTERRCTLF_FORCE) == 0)
return (EBUSY);
td->td_pflags2 &= ~TDP2_UEXTERR;
- error = copyin(uap->ptr, &ver, sizeof(ver));
+ error = copyin(ptr, &ver, sizeof(ver));
if (error != 0)
return (error);
if (ver != UEXTERROR_VER)
return (EINVAL);
td->td_pflags2 |= TDP2_UEXTERR;
- td->td_exterr_ptr = uap->ptr;
+ td->td_exterr_ptr = ptr;
return (0);
case EXTERRCTL_DISABLE:
if ((td->td_pflags2 & TDP2_UEXTERR) == 0)
diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h
index f0652806b999..e7a118195b53 100644
--- a/sys/sys/syscallsubr.h
+++ b/sys/sys/syscallsubr.h
@@ -167,6 +167,7 @@ int kern_extattr_set_fp(struct thread *td, struct file *fp,
int kern_extattr_set_path(struct thread *td, const char *path,
int attrnamespace, const char *attrname, void *data,
size_t nbytes, int follow, enum uio_seg pathseg);
+int kern_exterrctl(struct thread *td, u_int op, u_int flags, void *ptr);
int kern_fchmodat(struct thread *td, int fd, const char *path,
enum uio_seg pathseg, mode_t mode, int flag);
int kern_fchownat(struct thread *td, int fd, const char *path,