Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Jul 2026 09:32:42 +0000
From:      Brooks Davis <brooks@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: db3eca2be206 - main - exterrctl(2): add kern_exterrctl
Message-ID:  <6a5753ba.45416.2e3347a4@gitrepo.freebsd.org>

index | next in thread | raw e-mail

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,


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a5753ba.45416.2e3347a4>