The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/src/commit/?id=db3eca2be2067f7e81d65686b33dcbd475aed363
commit db3eca2be2067f7e81d65686b33dcbd475aed363 Author: Brooks Davis <[email protected]> AuthorDate: 2026-07-15 08:43:50 +0000 Commit: Brooks Davis <[email protected]> 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,
