Module Name:    src
Committed By:   riastradh
Date:           Fri Dec  6 18:44:00 UTC 2024

Modified Files:
        src/sys/kern: sys_socket.c uipc_accf.c uipc_domain.c uipc_mbuf.c
            uipc_sem.c uipc_socket.c uipc_socket2.c uipc_syscalls.c
            uipc_usrreq.c

Log Message:
sys/kern/sys_socket.c, uipc_*.c: Sprinkle SET_ERROR dtrace probes.

PR kern/58378: Kernel error code origination lacks dtrace probes


To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 src/sys/kern/sys_socket.c
cvs rdiff -u -r1.15 -r1.16 src/sys/kern/uipc_accf.c
cvs rdiff -u -r1.110 -r1.111 src/sys/kern/uipc_domain.c
cvs rdiff -u -r1.253 -r1.254 src/sys/kern/uipc_mbuf.c
cvs rdiff -u -r1.61 -r1.62 src/sys/kern/uipc_sem.c
cvs rdiff -u -r1.312 -r1.313 src/sys/kern/uipc_socket.c
cvs rdiff -u -r1.145 -r1.146 src/sys/kern/uipc_socket2.c
cvs rdiff -u -r1.213 -r1.214 src/sys/kern/uipc_syscalls.c
cvs rdiff -u -r1.205 -r1.206 src/sys/kern/uipc_usrreq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/sys_socket.c
diff -u src/sys/kern/sys_socket.c:1.83 src/sys/kern/sys_socket.c:1.84
--- src/sys/kern/sys_socket.c:1.83	Fri Dec  6 18:36:47 2024
+++ src/sys/kern/sys_socket.c	Fri Dec  6 18:44:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_socket.c,v 1.83 2024/12/06 18:36:47 riastradh Exp $	*/
+/*	$NetBSD: sys_socket.c,v 1.84 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_socket.c,v 1.83 2024/12/06 18:36:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_socket.c,v 1.84 2024/12/06 18:44:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -73,6 +73,7 @@ __KERNEL_RCSID(0, "$NetBSD: sys_socket.c
 #include <sys/poll.h>
 #include <sys/proc.h>
 #include <sys/protosw.h>
+#include <sys/sdt.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/stat.h>
@@ -279,7 +280,7 @@ soo_fpathconf(struct file *fp, int name,
 		*retval = PIPE_BUF;
 		return 0;
 	default:
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	}
 }
 
@@ -287,5 +288,5 @@ static int
 soo_posix_fadvise(struct file *fp, off_t offset, off_t len, int advice)
 {
 
-	return ESPIPE;
+	return SET_ERROR(ESPIPE);
 }

Index: src/sys/kern/uipc_accf.c
diff -u src/sys/kern/uipc_accf.c:1.15 src/sys/kern/uipc_accf.c:1.16
--- src/sys/kern/uipc_accf.c:1.15	Fri Dec  6 18:36:47 2024
+++ src/sys/kern/uipc_accf.c	Fri Dec  6 18:44:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_accf.c,v 1.15 2024/12/06 18:36:47 riastradh Exp $	*/
+/*	$NetBSD: uipc_accf.c,v 1.16 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_accf.c,v 1.15 2024/12/06 18:36:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_accf.c,v 1.16 2024/12/06 18:44:00 riastradh Exp $");
 
 #define ACCEPT_FILTER_MOD
 
@@ -76,6 +76,7 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_accf.c,
 #include <sys/protosw.h>
 #include <sys/queue.h>
 #include <sys/rwlock.h>
+#include <sys/sdt.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/sysctl.h>
@@ -118,7 +119,7 @@ accept_filt_add(struct accept_filter *fi
 	LIST_FOREACH(p, &accept_filtlsthd, accf_next) {
 		if (strcmp(p->accf_name, filt->accf_name) == 0)  {
 			rw_exit(&accept_filter_lock);
-			return EEXIST;
+			return SET_ERROR(EEXIST);
 		}
 	}
 	LIST_INSERT_HEAD(&accept_filtlsthd, filt, accf_next);
@@ -134,7 +135,7 @@ accept_filt_del(struct accept_filter *p)
 	rw_enter(&accept_filter_lock, RW_WRITER);
 	if (p->accf_refcnt != 0) {
 		rw_exit(&accept_filter_lock);
-		return EBUSY;
+		return SET_ERROR(EBUSY);
 	}
 	LIST_REMOVE(p, accf_next);
 	rw_exit(&accept_filter_lock);
@@ -208,11 +209,11 @@ accept_filt_getopt(struct socket *so, st
 	KASSERT(solocked(so));
 
 	if ((so->so_options & SO_ACCEPTCONN) == 0) {
-		error = EINVAL;
+		error = SET_ERROR(EINVAL);
 		goto out;
 	}
 	if ((so->so_options & SO_ACCEPTFILTER) == 0) {
-		error = EINVAL;
+		error = SET_ERROR(EINVAL);
 		goto out;
 	}
 
@@ -239,7 +240,7 @@ accept_filt_clear(struct socket *so)
 	KASSERT(solocked(so));
 
 	if ((so->so_options & SO_ACCEPTCONN) == 0) {
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	}
 	if (so->so_accf != NULL) {
 		/* Break in-flight processing. */
@@ -304,7 +305,7 @@ accept_filt_setopt(struct socket *so, co
 	afp = accept_filt_get(afa.af_name);
 	if (afp == NULL) {
 		solock(so);
-		return ENOENT;
+		return SET_ERROR(ENOENT);
 	}
 	/*
 	 * Allocate the new accept filter instance storage.  We may
@@ -333,7 +334,7 @@ accept_filt_setopt(struct socket *so, co
 	 */
 	solock(so);
 	if ((so->so_options & SO_ACCEPTCONN) == 0 || so->so_accf != NULL) {
-		error = EINVAL;
+		error = SET_ERROR(EINVAL);
 		goto out;
 	}
 
@@ -346,7 +347,7 @@ accept_filt_setopt(struct socket *so, co
 		newaf->so_accept_filter_arg =
 		    (*afp->accf_create)(so, afa.af_arg);
 		if (newaf->so_accept_filter_arg == NULL) {
-			error = EINVAL;
+			error = SET_ERROR(EINVAL);
 			goto out;
 		}
 	}

Index: src/sys/kern/uipc_domain.c
diff -u src/sys/kern/uipc_domain.c:1.110 src/sys/kern/uipc_domain.c:1.111
--- src/sys/kern/uipc_domain.c:1.110	Fri Dec  6 18:36:31 2024
+++ src/sys/kern/uipc_domain.c	Fri Dec  6 18:44:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_domain.c,v 1.110 2024/12/06 18:36:31 riastradh Exp $	*/
+/*	$NetBSD: uipc_domain.c,v 1.111 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1993
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_domain.c,v 1.110 2024/12/06 18:36:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_domain.c,v 1.111 2024/12/06 18:44:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -47,6 +47,7 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_domain.
 #include <sys/proc.h>
 #include <sys/protosw.h>
 #include <sys/queue.h>
+#include <sys/sdt.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/sysctl.h>
@@ -563,14 +564,14 @@ sysctl_unpcblist(SYSCTLFN_ARGS)
 		return sysctl_query(SYSCTLFN_CALL(rnode));
 
 	if (namelen != 4)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	if (oldp != NULL) {
 		len = *oldlenp;
 		elem_size = name[2];
 		elem_count = name[3];
 		if (elem_size != sizeof(pcb))
-			return EINVAL;
+			return SET_ERROR(EINVAL);
 	} else {
 		len = 0;
 		elem_size = sizeof(pcb);
@@ -582,7 +583,7 @@ sysctl_unpcblist(SYSCTLFN_ARGS)
 	needed = 0;
 
 	if (name - oname != 4)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	pf = oname[1];
 	type = oname[2];
@@ -593,7 +594,7 @@ sysctl_unpcblist(SYSCTLFN_ARGS)
 	sysctl_unlock();
 	if ((dfp = fgetdummy()) == NULL) {
 	 	sysctl_relock();
-		return ENOMEM;
+		return SET_ERROR(ENOMEM);
 	}
 
 	/*

Index: src/sys/kern/uipc_mbuf.c
diff -u src/sys/kern/uipc_mbuf.c:1.253 src/sys/kern/uipc_mbuf.c:1.254
--- src/sys/kern/uipc_mbuf.c:1.253	Fri Dec  6 18:36:31 2024
+++ src/sys/kern/uipc_mbuf.c	Fri Dec  6 18:44:00 2024
@@ -1,5 +1,5 @@
 
-/*	$NetBSD: uipc_mbuf.c,v 1.253 2024/12/06 18:36:31 riastradh Exp $	*/
+/*	$NetBSD: uipc_mbuf.c,v 1.254 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1999, 2001, 2018 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,v 1.253 2024/12/06 18:36:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,v 1.254 2024/12/06 18:44:00 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "ether.h"
@@ -84,6 +84,7 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_mbuf.c,
 #include <sys/pool.h>
 #include <sys/proc.h>
 #include <sys/protosw.h>
+#include <sys/sdt.h>
 #include <sys/socket.h>
 #include <sys/sysctl.h>
 #include <sys/syslog.h>
@@ -296,21 +297,21 @@ sysctl_kern_mbuf(SYSCTLFN_ARGS)
 		newval = nmbclusters_limit();
 		break;
 	default:
-		return EOPNOTSUPP;
+		return SET_ERROR(EOPNOTSUPP);
 	}
 
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if (error || newp == NULL)
 		return error;
 	if (newval < 0)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	switch (node.sysctl_num) {
 	case MBUF_NMBCLUSTERS:
 		if (newval < nmbclusters)
-			return EINVAL;
+			return SET_ERROR(EINVAL);
 		if (newval > nmbclusters_limit())
-			return EINVAL;
+			return SET_ERROR(EINVAL);
 		nmbclusters = newval;
 		pool_cache_sethardlimit(mcl_cache, nmbclusters,
 		    mclpool_warnmsg, 60);
@@ -361,9 +362,9 @@ sysctl_kern_mbuf_mowners(SYSCTLFN_ARGS)
 	int error = 0;
 
 	if (namelen != 0)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	if (newp != NULL)
-		return EPERM;
+		return SET_ERROR(EPERM);
 
 	LIST_FOREACH(mo, &mowners, mo_link) {
 		struct mowner_user mo_user;
@@ -372,7 +373,7 @@ sysctl_kern_mbuf_mowners(SYSCTLFN_ARGS)
 
 		if (oldp != NULL) {
 			if (*oldlenp - len < sizeof(mo_user)) {
-				error = ENOMEM;
+				error = SET_ERROR(ENOMEM);
 				break;
 			}
 			error = copyout(&mo_user, (char *)oldp + len,
@@ -1716,7 +1717,7 @@ out:
 	return 0;
 
 enobufs:
-	return ENOBUFS;
+	return SET_ERROR(ENOBUFS);
 }
 
 /*

Index: src/sys/kern/uipc_sem.c
diff -u src/sys/kern/uipc_sem.c:1.61 src/sys/kern/uipc_sem.c:1.62
--- src/sys/kern/uipc_sem.c:1.61	Fri Dec  6 18:36:31 2024
+++ src/sys/kern/uipc_sem.c	Fri Dec  6 18:44:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_sem.c,v 1.61 2024/12/06 18:36:31 riastradh Exp $	*/
+/*	$NetBSD: uipc_sem.c,v 1.62 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2011, 2019 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_sem.c,v 1.61 2024/12/06 18:36:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_sem.c,v 1.62 2024/12/06 18:44:00 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -80,6 +80,7 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_sem.c,v
 #include <sys/mutex.h>
 #include <sys/proc.h>
 #include <sys/rwlock.h>
+#include <sys/sdt.h>
 #include <sys/semaphore.h>
 #include <sys/stat.h>
 #include <sys/syscall.h>
@@ -256,7 +257,7 @@ ksem_sysfini(bool interface)
 		if (nsems_total) {
 			error = syscall_establish(NULL, ksem_syscalls);
 			KASSERT(error == 0);
-			return EBUSY;
+			return SET_ERROR(EBUSY);
 		}
 	}
 	kauth_unlisten_scope(ksem_listener);
@@ -279,7 +280,7 @@ ksem_modcmd(modcmd_t cmd, void *arg)
 		return ksem_sysfini(true);
 
 	default:
-		return ENOTTY;
+		return SET_ERROR(ENOTTY);
 	}
 }
 
@@ -307,7 +308,7 @@ ksem_perm(lwp_t *l, ksem_t *ks)
 	KASSERT(mutex_owned(&ks->ks_lock));
 
 	if (kauth_authorize_system(uc, KAUTH_SYSTEM_SEMAPHORE, 0, ks, NULL, NULL) != 0)
-		return EACCES;
+		return SET_ERROR(EACCES);
 
 	return 0;
 }
@@ -407,7 +408,7 @@ ksem_get(intptr_t id, ksem_t **ksret, in
 		 */
 		ks = ksem_lookup_pshared(id);
 		if (ks == NULL)
-			return EINVAL;
+			return SET_ERROR(EINVAL);
 		KASSERT(ks->ks_pshared_id == id);
 		KASSERT(ks->ks_pshared_proc != NULL);
 		fd = -1;
@@ -416,16 +417,16 @@ ksem_get(intptr_t id, ksem_t **ksret, in
 		file_t *fp = fd_getfile(fd);
 
 		if (__predict_false(fp == NULL))
-			return EINVAL;
+			return SET_ERROR(EINVAL);
 		if (__predict_false(fp->f_type != DTYPE_SEM)) {
 			fd_putfile(fd);
-			return EINVAL;
+			return SET_ERROR(EINVAL);
 		}
 		ks = fp->f_ksem;
 		mutex_enter(&ks->ks_lock);
 		ks->ks_ref++;
 	} else {
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	}
 
 	*ksret = ks;
@@ -446,21 +447,21 @@ ksem_create(lwp_t *l, const char *name, 
 
 	/* Pre-check for the limit. */
 	if (nsems >= ksem_max) {
-		return ENFILE;
+		return SET_ERROR(ENFILE);
 	}
 
 	if (val > SEM_VALUE_MAX) {
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	}
 
 	if (name != NULL) {
 		len = strlen(name);
 		if (len > SEM_MAX_NAMELEN) {
-			return ENAMETOOLONG;
+			return SET_ERROR(ENAMETOOLONG);
 		}
 		/* Name must start with a '/' but not contain one. */
 		if (*name != '/' || len < 2 || strchr(name + 1, '/') != NULL) {
-			return EINVAL;
+			return SET_ERROR(EINVAL);
 		}
 		kname = kmem_alloc(++len, KM_SLEEP);
 		strlcpy(kname, name, len);
@@ -588,7 +589,7 @@ do_ksem_init(lwp_t *l, u_int val, intptr
 		 * would be bad.
 		 */
 		fd_abort(p, fp, fd);
-		return EMFILE;
+		return SET_ERROR(EMFILE);
 	}
 
 	/* Note the mode does not matter for anonymous semaphores. */
@@ -666,7 +667,7 @@ do_ksem_open(struct lwp *l, const char *
 		 * would be bad.
 		 */
 		fd_abort(p, fp, fd);
-		return EMFILE;
+		return SET_ERROR(EMFILE);
 	}
 
 	/*
@@ -699,7 +700,7 @@ do_ksem_open(struct lwp *l, const char *
 		/* Check for exclusive create. */
 		if (oflag & O_EXCL) {
 			mutex_exit(&ks->ks_lock);
-			error = EEXIST;
+			error = SET_ERROR(EEXIST);
 			goto err;
 		}
 		/*
@@ -719,14 +720,14 @@ do_ksem_open(struct lwp *l, const char *
 		if ((oflag & O_CREAT) == 0) {
 			mutex_exit(&ksem_lock);
 			KASSERT(ksnew == NULL);
-			error = ENOENT;
+			error = SET_ERROR(ENOENT);
 			goto err;
 		}
 
 		/* Check for the limit locked. */
 		if (nsems >= ksem_max) {
 			mutex_exit(&ksem_lock);
-			error = ENFILE;
+			error = SET_ERROR(ENFILE);
 			goto err;
 		}
 
@@ -773,7 +774,7 @@ sys__ksem_close(struct lwp *l, const str
 
 	/* This is only for named semaphores. */
 	if (ks->ks_name == NULL) {
-		error = EINVAL;
+		error = SET_ERROR(EINVAL);
 	}
 	ksem_release(ks, -1);
 	if (error) {
@@ -873,7 +874,7 @@ sys__ksem_unlink(struct lwp *l, const st
 	name_destroy(&name);
 	if (ks == NULL) {
 		mutex_exit(&ksem_lock);
-		return ENOENT;
+		return SET_ERROR(ENOENT);
 	}
 	KASSERT(mutex_owned(&ks->ks_lock));
 
@@ -919,7 +920,7 @@ sys__ksem_post(struct lwp *l, const stru
 	}
 	KASSERT(mutex_owned(&ks->ks_lock));
 	if (ks->ks_value == SEM_VALUE_MAX) {
-		error = EOVERFLOW;
+		error = SET_ERROR(EOVERFLOW);
 		goto out;
 	}
 	ks->ks_value++;
@@ -952,7 +953,7 @@ do_ksem_wait(lwp_t *l, intptr_t id, bool
 		} else {
 			timeo = 0;
 		}
-		error = try_p ? EAGAIN : cv_timedwait_sig(&ks->ks_cv,
+		error = try_p ? SET_ERROR(EAGAIN) : cv_timedwait_sig(&ks->ks_cv,
 		    &ks->ks_lock, timeo);
 		ks->ks_waiters--;
 		if (error)
@@ -991,11 +992,11 @@ sys__ksem_timedwait(struct lwp *l, const
 		return error;
 
 	if (ts.tv_sec < 0 || ts.tv_nsec < 0 || ts.tv_nsec >= 1000000000)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	error = do_ksem_wait(l, SCARG(uap, id), false, &ts);
 	if (error == EWOULDBLOCK)
-		error = ETIMEDOUT;
+		error = SET_ERROR(ETIMEDOUT);
 	return error;
 }
 
@@ -1053,12 +1054,12 @@ sys__ksem_destroy(struct lwp *l, const s
 
 	/* Operation is only for unnamed semaphores. */
 	if (ks->ks_name != NULL) {
-		error = EINVAL;
+		error = SET_ERROR(EINVAL);
 		goto out;
 	}
 	/* Cannot destroy if there are waiters. */
 	if (ks->ks_waiters) {
-		error = EBUSY;
+		error = SET_ERROR(EBUSY);
 		goto out;
 	}
 	if (KSEM_ID_IS_PSHARED(id)) {
@@ -1066,7 +1067,7 @@ sys__ksem_destroy(struct lwp *l, const s
 		KASSERT(fd == -1);
 		KASSERT(ks->ks_pshared_proc != NULL);
 		if (ks->ks_pshared_proc != curproc) {
-			error = EINVAL;
+			error = SET_ERROR(EINVAL);
 			goto out;
 		}
 		fd = ks->ks_pshared_fd;

Index: src/sys/kern/uipc_socket.c
diff -u src/sys/kern/uipc_socket.c:1.312 src/sys/kern/uipc_socket.c:1.313
--- src/sys/kern/uipc_socket.c:1.312	Fri Dec  6 18:36:47 2024
+++ src/sys/kern/uipc_socket.c	Fri Dec  6 18:44:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_socket.c,v 1.312 2024/12/06 18:36:47 riastradh Exp $	*/
+/*	$NetBSD: uipc_socket.c,v 1.313 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2002, 2007, 2008, 2009, 2023 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.312 2024/12/06 18:36:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.313 2024/12/06 18:44:00 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -103,6 +103,7 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_socket.
 #include <sys/proc.h>
 #include <sys/protosw.h>
 #include <sys/resourcevar.h>
+#include <sys/sdt.h>
 #include <sys/signalvar.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
@@ -510,16 +511,16 @@ socreate(int dom, struct socket **aso, i
 	if (prp == NULL) {
 		/* no support for domain */
 		if (pffinddomain(dom) == 0)
-			return EAFNOSUPPORT;
+			return SET_ERROR(EAFNOSUPPORT);
 		/* no support for socket type */
 		if (proto == 0 && type != 0)
-			return EPROTOTYPE;
-		return EPROTONOSUPPORT;
+			return SET_ERROR(EPROTOTYPE);
+		return SET_ERROR(EPROTONOSUPPORT);
 	}
 	if (prp->pr_usrreqs == NULL)
-		return EPROTONOSUPPORT;
+		return SET_ERROR(EPROTONOSUPPORT);
 	if (prp->pr_type != type)
-		return EPROTOTYPE;
+		return SET_ERROR(EPROTOTYPE);
 
 	so = soget(true);
 	so->so_type = type;
@@ -640,7 +641,7 @@ sobind(struct socket *so, struct sockadd
 	solock(so);
 	if (nam->sa_family != so->so_proto->pr_domain->dom_family) {
 		sounlock(so);
-		return EAFNOSUPPORT;
+		return SET_ERROR(EAFNOSUPPORT);
 	}
 	error = (*so->so_proto->pr_usrreqs->pr_bind)(so, nam, l);
 	sounlock(so);
@@ -657,7 +658,7 @@ solisten(struct socket *so, int backlog,
 	if ((so->so_state & (SS_ISCONNECTED | SS_ISCONNECTING |
 	    SS_ISDISCONNECTING)) != 0) {
 		sounlock(so);
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	}
 	oldopt = so->so_options;
 	oldqlimit = so->so_qlimit;
@@ -821,7 +822,7 @@ soaccept(struct socket *so, struct socka
 	    (so->so_proto->pr_flags & PR_ABRTACPTDIS) == 0)
 		error = (*so->so_proto->pr_usrreqs->pr_accept)(so, nam);
 	else
-		error = ECONNABORTED;
+		error = SET_ERROR(ECONNABORTED);
 
 	return error;
 }
@@ -834,7 +835,7 @@ soconnect(struct socket *so, struct sock
 	KASSERT(solocked(so));
 
 	if (so->so_options & SO_ACCEPTCONN)
-		return EOPNOTSUPP;
+		return SET_ERROR(EOPNOTSUPP);
 	/*
 	 * If protocol is connection-based, can only connect once.
 	 * Otherwise, if connected, try to disconnect first.
@@ -844,10 +845,10 @@ soconnect(struct socket *so, struct sock
 	if (so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING) &&
 	    ((so->so_proto->pr_flags & PR_CONNREQUIRED) ||
 	    (error = sodisconnect(so)))) {
-		error = EISCONN;
+		error = SET_ERROR(EISCONN);
 	} else {
 		if (nam->sa_family != so->so_proto->pr_domain->dom_family) {
-			return EAFNOSUPPORT;
+			return SET_ERROR(EAFNOSUPPORT);
 		}
 		error = (*so->so_proto->pr_usrreqs->pr_connect)(so, nam, l);
 	}
@@ -871,9 +872,9 @@ sodisconnect(struct socket *so)
 	KASSERT(solocked(so));
 
 	if ((so->so_state & SS_ISCONNECTED) == 0) {
-		error = ENOTCONN;
+		error = SET_ERROR(ENOTCONN);
 	} else if (so->so_state & SS_ISDISCONNECTING) {
-		error = EALREADY;
+		error = SET_ERROR(EALREADY);
 	} else {
 		error = (*so->so_proto->pr_usrreqs->pr_disconnect)(so);
 	}
@@ -929,7 +930,7 @@ sosend(struct socket *so, struct sockadd
 	 * causes us to loop sending 0-length segments to the protocol.
 	 */
 	if (resid < 0) {
-		error = EINVAL;
+		error = SET_ERROR(EINVAL);
 		goto out;
 	}
 	dontroute =
@@ -943,11 +944,11 @@ sosend(struct socket *so, struct sockadd
 		goto out;
 	do {
 		if (so->so_state & SS_CANTSENDMORE) {
-			error = EPIPE;
+			error = SET_ERROR(EPIPE);
 			goto release;
 		}
 		if (so->so_error) {
-			error = so->so_error;
+			error = SET_ERROR(so->so_error);
 			if ((flags & MSG_PEEK) == 0)
 				so->so_error = 0;
 			goto release;
@@ -955,11 +956,11 @@ sosend(struct socket *so, struct sockadd
 		if ((so->so_state & SS_ISCONNECTED) == 0) {
 			if (so->so_proto->pr_flags & PR_CONNREQUIRED) {
 				if (resid || clen == 0) {
-					error = ENOTCONN;
+					error = SET_ERROR(ENOTCONN);
 					goto release;
 				}
 			} else if (addr == NULL) {
-				error = EDESTADDRREQ;
+				error = SET_ERROR(EDESTADDRREQ);
 				goto release;
 			}
 		}
@@ -968,18 +969,18 @@ sosend(struct socket *so, struct sockadd
 			space += 1024;
 		if ((atomic && resid > so->so_snd.sb_hiwat) ||
 		    clen > so->so_snd.sb_hiwat) {
-			error = EMSGSIZE;
+			error = SET_ERROR(EMSGSIZE);
 			goto release;
 		}
 		if (space < resid + clen &&
 		    (atomic || space < so->so_snd.sb_lowat || space < clen)) {
 			if ((so->so_state & SS_NBIO) || (flags & MSG_NBIO)) {
-				error = EWOULDBLOCK;
+				error = SET_ERROR(EWOULDBLOCK);
 				goto release;
 			}
 			sbunlock(&so->so_snd);
 			if (wakeup_state & SS_RESTARTSYS) {
-				error = ERESTART;
+				error = SET_ERROR(ERESTART);
 				goto out;
 			}
 			error = sbwait(&so->so_snd);
@@ -1065,7 +1066,7 @@ sosend(struct socket *so, struct sockadd
 			} while (space > 0 && atomic);
 
 			if (so->so_state & SS_CANTSENDMORE) {
-				error = EPIPE;
+				error = SET_ERROR(EPIPE);
 				goto release;
 			}
 			if (dontroute)
@@ -1247,7 +1248,7 @@ restart:
 			if (m != NULL)
 				goto dontblock;
 			e = so->so_error ? &so->so_error : &so->so_rerror;
-			error = *e;
+			error = SET_ERROR(*e);
 			if ((flags & MSG_PEEK) == 0)
 				*e = 0;
 			goto release;
@@ -1265,21 +1266,21 @@ restart:
 			}
 		if ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) == 0 &&
 		    (so->so_proto->pr_flags & PR_CONNREQUIRED)) {
-			error = ENOTCONN;
+			error = SET_ERROR(ENOTCONN);
 			goto release;
 		}
 		if (uio->uio_resid == 0)
 			goto release;
 		if ((so->so_state & SS_NBIO) ||
 		    (flags & (MSG_DONTWAIT|MSG_NBIO))) {
-			error = EWOULDBLOCK;
+			error = SET_ERROR(EWOULDBLOCK);
 			goto release;
 		}
 		SBLASTRECORDCHK(&so->so_rcv, "soreceive sbwait 1");
 		SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 1");
 		sbunlock(&so->so_rcv);
 		if (wakeup_state & SS_RESTARTSYS)
-			error = ERESTART;
+			error = SET_ERROR(ERESTART);
 		else
 			error = sbwait(&so->so_rcv);
 		if (error != 0) {
@@ -1608,7 +1609,7 @@ dontblock:
 			SBLASTRECORDCHK(&so->so_rcv, "soreceive sbwait 2");
 			SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 2");
 			if (wakeup_state & SS_RESTARTSYS)
-				error = ERESTART;
+				error = SET_ERROR(ERESTART);
 			else
 				error = sbwait(&so->so_rcv);
 			if (error != 0) {
@@ -1672,7 +1673,7 @@ soshutdown(struct socket *so, int how)
 
 	pr = so->so_proto;
 	if (!(how == SHUT_RD || how == SHUT_WR || how == SHUT_RDWR))
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	if (how == SHUT_RD || how == SHUT_RDWR) {
 		sorflush(so);
@@ -1759,7 +1760,7 @@ sosetopt1(struct socket *so, const struc
 			break;
 		if (l.l_linger < 0 || l.l_linger > USHRT_MAX ||
 		    l.l_linger > (INT_MAX / hz)) {
-			error = EDOM;
+			error = SET_ERROR(EDOM);
 			break;
 		}
 		so->so_linger = l.l_linger;
@@ -1804,14 +1805,14 @@ sosetopt1(struct socket *so, const struc
 		 * options, so disallow them.
 		 */
 		if (optval < 1) {
-			error = EINVAL;
+			error = SET_ERROR(EINVAL);
 			break;
 		}
 
 		switch (opt) {
 		case SO_SNDBUF:
 			if (sbreserve(&so->so_snd, (u_long)optval, so) == 0) {
-				error = ENOBUFS;
+				error = SET_ERROR(ENOBUFS);
 				break;
 			}
 			if (sofixedbuf)
@@ -1820,7 +1821,7 @@ sosetopt1(struct socket *so, const struc
 
 		case SO_RCVBUF:
 			if (sbreserve(&so->so_rcv, (u_long)optval, so) == 0) {
-				error = ENOBUFS;
+				error = SET_ERROR(ENOBUFS);
 				break;
 			}
 			if (sofixedbuf)
@@ -1855,11 +1856,11 @@ sosetopt1(struct socket *so, const struc
 			break;
 
 		if (tv.tv_sec < 0 || tv.tv_usec < 0 || tv.tv_usec >= 1000000) {
-			error = EDOM;
+			error = SET_ERROR(EDOM);
 			break;
 		}
 		if (tv.tv_sec > (INT_MAX - tv.tv_usec / tick) / hz) {
-			error = EDOM;
+			error = SET_ERROR(EDOM);
 			break;
 		}
 
@@ -1882,7 +1883,7 @@ sosetopt1(struct socket *so, const struc
 		    (opt, so, sopt), enosys(), error);
 		if (error == ENOSYS || error == EPASSTHROUGH) {
 			solock(so);
-			error = ENOPROTOOPT;
+			error = SET_ERROR(ENOPROTOOPT);
 		}
 		break;
 	}
@@ -1899,7 +1900,7 @@ sosetopt(struct socket *so, struct socko
 		error = sosetopt1(so, sopt);
 		KASSERT(solocked(so));
 	} else {
-		error = ENOPROTOOPT;
+		error = SET_ERROR(ENOPROTOOPT);
 		solock(so);
 	}
 
@@ -2025,7 +2026,7 @@ sogetopt1(struct socket *so, struct sock
 		MODULE_HOOK_CALL(uipc_socket_50_getopt1_hook,
 		    (opt, so, sopt), enosys(), error);
 		if (error)
-			error = ENOPROTOOPT;
+			error = SET_ERROR(ENOPROTOOPT);
 		break;
 	}
 
@@ -2043,7 +2044,7 @@ sogetopt(struct socket *so, struct socko
 			error = ((*so->so_proto->pr_ctloutput)
 			    (PRCO_GETOPT, so, sopt));
 		} else
-			error = (ENOPROTOOPT);
+			error = SET_ERROR(ENOPROTOOPT);
 	} else {
 		error = sogetopt1(so, sopt);
 	}
@@ -2065,7 +2066,7 @@ sockopt_alloc(struct sockopt *sopt, size
 	if (len > sizeof(sopt->sopt_buf)) {
 		data = kmem_zalloc(len, kmflag);
 		if (data == NULL)
-			return ENOMEM;
+			return SET_ERROR(ENOMEM);
 		sopt->sopt_data = data;
 	} else
 		sopt->sopt_data = sopt->sopt_buf;
@@ -2146,7 +2147,7 @@ sockopt_get(const struct sockopt *sopt, 
 {
 
 	if (sopt->sopt_size != len)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	memcpy(buf, sopt->sopt_data, len);
 	return 0;
@@ -2400,7 +2401,7 @@ soo_kqfilter(struct file *fp, struct kno
 			/* Other end of pipe has been closed. */
 			if (so->so_state & SS_ISDISCONNECTED) {
 				sounlock(so);
-				return EBADF;
+				return SET_ERROR(EBADF);
 			}
 		}
 #endif
@@ -2411,7 +2412,7 @@ soo_kqfilter(struct file *fp, struct kno
 		break;
 	default:
 		sounlock(so);
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	}
 	selrecord_knote(&sb->sb_sel, kn);
 	sb->sb_flags |= SB_KNOTE;
@@ -2520,7 +2521,7 @@ sysctl_kern_somaxkva(SYSCTLFN_ARGS)
 		return error;
 
 	if (new_somaxkva < (16 * 1024 * 1024)) /* sanity */
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	mutex_enter(&so_pendfree_lock);
 	somaxkva = new_somaxkva;
@@ -2572,7 +2573,7 @@ sysctl_kern_sooptions(SYSCTLFN_ARGS)
 		return error;
 
 	if (new_options & ~SO_DEFOPTS)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	sooptions = new_options;
 

Index: src/sys/kern/uipc_socket2.c
diff -u src/sys/kern/uipc_socket2.c:1.145 src/sys/kern/uipc_socket2.c:1.146
--- src/sys/kern/uipc_socket2.c:1.145	Fri Dec  6 18:36:47 2024
+++ src/sys/kern/uipc_socket2.c	Fri Dec  6 18:44:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_socket2.c,v 1.145 2024/12/06 18:36:47 riastradh Exp $	*/
+/*	$NetBSD: uipc_socket2.c,v 1.146 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_socket2.c,v 1.145 2024/12/06 18:36:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_socket2.c,v 1.146 2024/12/06 18:44:00 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -79,6 +79,7 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_socket2
 #include <sys/pool.h>
 #include <sys/proc.h>
 #include <sys/protosw.h>
+#include <sys/sdt.h>
 #include <sys/signalvar.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
@@ -518,7 +519,7 @@ soroverflow(struct socket *so)
 
 	so->so_rcv.sb_overflowed++;
 	if (so->so_options & SO_RERROR)  {
-		so->so_rerror = ENOBUFS;
+		so->so_rerror = SET_ERROR(ENOBUFS);
 		sorwakeup(so);
 	}
 }
@@ -648,7 +649,7 @@ sb_max_set(u_long new_sbmax)
 	int s;
 
 	if (new_sbmax < (16 * 1024))
-		return (EINVAL);
+		return SET_ERROR(EINVAL);
 
 	s = splsoftnet();
 	sb_max = new_sbmax;
@@ -691,7 +692,7 @@ soreserve(struct socket *so, u_long sndc
  bad2:
 	sbrelease(&so->so_snd, so);
  bad:
-	return (ENOBUFS);
+	return SET_ERROR(ENOBUFS);
 }
 
 /*
@@ -1171,7 +1172,7 @@ sbappendaddrchain(struct sockbuf *sb, co
 		/* Prepend sockaddr to this record (m) of input chain m0 */
 	  	n = m_prepend_sockaddr(sb, m, asa);
 		if (n == NULL) {
-			error = ENOBUFS;
+			error = SET_ERROR(ENOBUFS);
 			goto bad;
 		}
 
@@ -1541,7 +1542,7 @@ sblock(struct sockbuf *sb, int wf)
 			return 0;
 		}
 		if (wf != M_WAITOK)
-			return EWOULDBLOCK;
+			return SET_ERROR(EWOULDBLOCK);
 		so = sb->sb_so;
 		lock = so->so_lock;
 		if ((sb->sb_flags & SB_NOINTR) != 0) {

Index: src/sys/kern/uipc_syscalls.c
diff -u src/sys/kern/uipc_syscalls.c:1.213 src/sys/kern/uipc_syscalls.c:1.214
--- src/sys/kern/uipc_syscalls.c:1.213	Fri Dec  6 18:36:31 2024
+++ src/sys/kern/uipc_syscalls.c	Fri Dec  6 18:44:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_syscalls.c,v 1.213 2024/12/06 18:36:31 riastradh Exp $	*/
+/*	$NetBSD: uipc_syscalls.c,v 1.214 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009, 2023 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
 #define MBUFTYPES
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.213 2024/12/06 18:36:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.214 2024/12/06 18:44:00 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_pipe.h"
@@ -84,6 +84,7 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_syscall
 #include <sys/mount.h>
 #include <sys/proc.h>
 #include <sys/protosw.h>
+#include <sys/sdt.h>
 #include <sys/signalvar.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
@@ -182,10 +183,10 @@ do_sys_accept(struct lwp *l, int sock, s
 	short		wakeup_state = 0;
 
 	if ((fp = fd_getfile(sock)) == NULL)
-		return EBADF;
+		return SET_ERROR(EBADF);
 	if (fp->f_type != DTYPE_SOCKET) {
 		fd_putfile(sock);
-		return ENOTSOCK;
+		return SET_ERROR(ENOTSOCK);
 	}
 	if ((error = fd_allocfile(&fp2, &fd)) != 0) {
 		fd_putfile(sock);
@@ -199,24 +200,24 @@ do_sys_accept(struct lwp *l, int sock, s
 		sigsuspendsetup(l, mask);
 
 	if (!(so->so_proto->pr_flags & PR_LISTEN)) {
-		error = EOPNOTSUPP;
+		error = SET_ERROR(EOPNOTSUPP);
 		goto bad;
 	}
 	if ((so->so_options & SO_ACCEPTCONN) == 0) {
-		error = EINVAL;
+		error = SET_ERROR(EINVAL);
 		goto bad;
 	}
 	if ((so->so_state & SS_NBIO) && so->so_qlen == 0) {
-		error = EWOULDBLOCK;
+		error = SET_ERROR(EWOULDBLOCK);
 		goto bad;
 	}
 	while (so->so_qlen == 0 && so->so_error == 0) {
 		if (so->so_state & SS_CANTRCVMORE) {
-			so->so_error = ECONNABORTED;
+			so->so_error = SET_ERROR(ECONNABORTED);
 			break;
 		}
 		if (wakeup_state & SS_RESTARTSYS) {
-			error = ERESTART;
+			error = SET_ERROR(ERESTART);
 			goto bad;
 		}
 		error = sowait(so, true, 0);
@@ -226,7 +227,7 @@ do_sys_accept(struct lwp *l, int sock, s
 		wakeup_state = so->so_state;
 	}
 	if (so->so_error) {
-		error = so->so_error;
+		error = SET_ERROR(so->so_error);
 		so->so_error = 0;
 		goto bad;
 	}
@@ -366,7 +367,7 @@ do_sys_connect(struct lwp *l, int fd, st
 	}
 	solock(so);
 	if ((so->so_state & SS_ISCONNECTING) != 0) {
-		error = EALREADY;
+		error = SET_ERROR(EALREADY);
 		goto out;
 	}
 
@@ -375,13 +376,13 @@ do_sys_connect(struct lwp *l, int fd, st
 		goto bad;
 	if ((so->so_state & (SS_NBIO|SS_ISCONNECTING)) ==
 	    (SS_NBIO|SS_ISCONNECTING)) {
-		error = EINPROGRESS;
+		error = SET_ERROR(EINPROGRESS);
 		goto out;
 	}
 	while ((so->so_state & SS_ISCONNECTING) != 0 && so->so_error == 0) {
 		error = sowait(so, true, 0);
 		if (__predict_false((so->so_state & SS_ISABORTING) != 0)) {
-			error = EPIPE;
+			error = SET_ERROR(EPIPE);
 			interrupted = 1;
 			break;
 		}
@@ -392,14 +393,14 @@ do_sys_connect(struct lwp *l, int fd, st
 		}
 	}
 	if (error == 0) {
-		error = so->so_error;
+		error = SET_ERROR(so->so_error);
 		so->so_error = 0;
 	}
  bad:
 	if (!interrupted)
 		so->so_state &= ~SS_ISCONNECTING;
 	if (error == ERESTART)
-		error = EINTR;
+		error = SET_ERROR(EINTR);
  out:
 	sounlock(so);
 	fd_putfile(fd);
@@ -530,7 +531,7 @@ do_sys_sendmsg_so(struct lwp *l, int s, 
 	if (mp->msg_flags & MSG_IOVUSRSPACE) {
 		if ((unsigned int)mp->msg_iovlen > UIO_SMALLIOV) {
 			if ((unsigned int)mp->msg_iovlen > IOV_MAX) {
-				error = EMSGSIZE;
+				error = SET_ERROR(EMSGSIZE);
 				goto bad;
 			}
 			iov = kmem_alloc(iovsz, KM_SLEEP);
@@ -560,7 +561,7 @@ do_sys_sendmsg_so(struct lwp *l, int s, 
 		 */
 		auio.uio_resid += tiov->iov_len;
 		if (tiov->iov_len > SSIZE_MAX || auio.uio_resid > SSIZE_MAX) {
-			error = EINVAL;
+			error = SET_ERROR(EINVAL);
 			goto bad;
 		}
 	}
@@ -574,7 +575,7 @@ do_sys_sendmsg_so(struct lwp *l, int s, 
 
 	if (mp->msg_control) {
 		if (mp->msg_controllen < CMSG_ALIGN(sizeof(struct cmsghdr))) {
-			error = EINVAL;
+			error = SET_ERROR(EINVAL);
 			goto bad;
 		}
 		if (control == NULL) {
@@ -906,7 +907,7 @@ do_sys_recvmsg_so(struct lwp *l, int s, 
 	if (mp->msg_flags & MSG_IOVUSRSPACE) {
 		if ((unsigned int)mp->msg_iovlen > UIO_SMALLIOV) {
 			if ((unsigned int)mp->msg_iovlen > IOV_MAX) {
-				error = EMSGSIZE;
+				error = SET_ERROR(EMSGSIZE);
 				goto out;
 			}
 			iov = kmem_alloc(iovsz, KM_SLEEP);
@@ -935,7 +936,7 @@ do_sys_recvmsg_so(struct lwp *l, int s, 
 		 */
 		auio.uio_resid += tiov->iov_len;
 		if (tiov->iov_len > SSIZE_MAX || auio.uio_resid > SSIZE_MAX) {
-			error = EINVAL;
+			error = SET_ERROR(EINVAL);
 			goto out;
 		}
 	}
@@ -1014,7 +1015,7 @@ sys_recvmmsg(struct lwp *l, const struct
 		if ((error = copyin(SCARG(uap, timeout), &ts, sizeof(ts))) != 0)
 			return error;
 		if (ts.tv_nsec < 0 || ts.tv_nsec >= 1000000000L)
-			return EINVAL;
+			return SET_ERROR(EINVAL);
 		getnanotime(&now);
 		if (timespecaddok(&now, &ts)) {
 			timespecadd(&now, &ts, &ts);
@@ -1032,7 +1033,7 @@ sys_recvmmsg(struct lwp *l, const struct
 	 * If so->so_rerror holds a deferred error return it now.
 	 */
 	if (so->so_rerror) {
-		error = so->so_rerror;
+		error = SET_ERROR(so->so_rerror);
 		so->so_rerror = 0;
 		fd_putfile(s);
 		return error;
@@ -1155,10 +1156,10 @@ sys_setsockopt(struct lwp *l, const stru
 
 	len = SCARG(uap, valsize);
 	if (len > 0 && SCARG(uap, val) == NULL)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	if (len > MCLBYTES)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	if ((error = fd_getsock1(SCARG(uap, s), &so, &fp)) != 0)
 		return (error);
@@ -1201,7 +1202,7 @@ getsockopt(struct lwp *l, const struct s
 		valsize = 0;
 
 	if (valsize > MCLBYTES)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	if ((error = fd_getsock1(SCARG(uap, s), &so, &fp)) != 0)
 		return error;
@@ -1274,7 +1275,7 @@ pipe1(struct lwp *l, int *fildes, int fl
 	proc_t		*p = l->l_proc;
 
 	if (flags & ~(O_CLOEXEC|O_NONBLOCK|O_NOSIGPIPE))
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	if (flags & O_CLOEXEC)
 		soflags |= SOCK_CLOEXEC;
 	if (flags & O_NONBLOCK)
@@ -1351,7 +1352,7 @@ do_sys_getpeername(int fd, struct sockad
 
 	solock(so);
 	if ((so->so_state & SS_ISCONNECTED) == 0)
-		error = ENOTCONN;
+		error = SET_ERROR(ENOTCONN);
 	else {
 		error = (*so->so_proto->pr_usrreqs->pr_peeraddr)(so, nam);
 	}
@@ -1436,7 +1437,7 @@ copyout_sockname(struct sockaddr *asa, u
 	} else
 		len = *alen;
 	if (len < 0)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	if (addr == NULL) {
 		len = 0;
@@ -1522,7 +1523,7 @@ sockargs_sb(struct sockaddr_big *sb, con
 	 */
 	if (buflen > UCHAR_MAX ||
 	    buflen <= offsetof(struct sockaddr_big, sb_data))
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	error = copyin(name, (void *)sb, buflen);
 	if (error)
@@ -1558,13 +1559,13 @@ sockargs(struct mbuf **mp, const void *b
 	 * length is just too much.
 	 */
 	if (buflen > (type == MT_SONAME ? UCHAR_MAX : PAGE_SIZE))
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	/*
 	 * length must greater than sizeof(sa_family) + sizeof(sa_len)
 	 */
 	if (type == MT_SONAME && buflen <= 2)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	/* Allocate an mbuf to hold the arguments. */
 	m = m_get(M_WAIT, type);
@@ -1619,7 +1620,7 @@ sockargs(struct mbuf **mp, const void *b
 		}
 		return 0;
 	default:
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 	}
 }
 
@@ -1685,6 +1686,6 @@ do_sys_peeloff(struct socket *head, void
 
 	return error;
 #else
-	return EOPNOTSUPP;
+	return SET_ERROR(EOPNOTSUPP);
 #endif
 }

Index: src/sys/kern/uipc_usrreq.c
diff -u src/sys/kern/uipc_usrreq.c:1.205 src/sys/kern/uipc_usrreq.c:1.206
--- src/sys/kern/uipc_usrreq.c:1.205	Fri Dec  6 18:36:47 2024
+++ src/sys/kern/uipc_usrreq.c	Fri Dec  6 18:44:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_usrreq.c,v 1.205 2024/12/06 18:36:47 riastradh Exp $	*/
+/*	$NetBSD: uipc_usrreq.c,v 1.206 2024/12/06 18:44:00 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2004, 2008, 2009, 2020 The NetBSD Foundation, Inc.
@@ -96,7 +96,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.205 2024/12/06 18:36:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.206 2024/12/06 18:44:00 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -118,6 +118,7 @@ __KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.
 #include <sys/namei.h>
 #include <sys/proc.h>
 #include <sys/protosw.h>
+#include <sys/sdt.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/stat.h>
@@ -350,7 +351,7 @@ unp_output(struct mbuf *m, struct mbuf *
 
 	/* XXX: server side closed the socket */
 	if (unp->unp_conn == NULL)
-		return ECONNREFUSED;
+		return SET_ERROR(ECONNREFUSED);
 	so2 = unp->unp_conn->unp_socket;
 
 	KASSERT(solocked(so2));
@@ -372,7 +373,7 @@ unp_output(struct mbuf *m, struct mbuf *
 		/* Don't call soroverflow because we're returning this
 		 * error directly to the sender. */
 		so2->so_rcv.sb_overflowed++;
-		return ENOBUFS;
+		return SET_ERROR(ENOBUFS);
 	} else {
 		sorwakeup(so2);
 		return 0;
@@ -452,7 +453,7 @@ unp_recvoob(struct socket *so, struct mb
 {
 	KASSERT(solocked(so));
 
-	return EOPNOTSUPP;
+	return SET_ERROR(EOPNOTSUPP);
 }
 
 static int
@@ -491,7 +492,7 @@ unp_send(struct socket *so, struct mbuf 
 		KASSERT(so->so_lock == uipc_lock);
 		if (nam) {
 			if ((so->so_state & SS_ISCONNECTED) != 0)
-				error = EISCONN;
+				error = SET_ERROR(EISCONN);
 			else {
 				/*
 				 * Note: once connected, the
@@ -506,7 +507,7 @@ unp_send(struct socket *so, struct mbuf 
 			}
 		} else {
 			if ((so->so_state & SS_ISCONNECTED) == 0)
-				error = ENOTCONN;
+				error = SET_ERROR(ENOTCONN);
 		}
 		if (error) {
 			unp_dispose(control);
@@ -525,7 +526,7 @@ unp_send(struct socket *so, struct mbuf 
 #define	rcv (&so2->so_rcv)
 #define	snd (&so->so_snd)
 		if (unp->unp_conn == NULL) {
-			error = ENOTCONN;
+			error = SET_ERROR(ENOTCONN);
 			break;
 		}
 		so2 = unp->unp_conn->unp_socket;
@@ -601,7 +602,7 @@ unp_sendoob(struct socket *so, struct mb
 	m_freem(m);
 	m_freem(control);
 
-	return EOPNOTSUPP;
+	return SET_ERROR(EOPNOTSUPP);
 }
 
 /*
@@ -616,14 +617,14 @@ uipc_ctloutput(int op, struct socket *so
 	KASSERT(solocked(so));
 
 	if (sopt->sopt_level != SOL_LOCAL) {
-		error = ENOPROTOOPT;
+		error = SET_ERROR(ENOPROTOOPT);
 	} else switch (op) {
 
 	case PRCO_SETOPT:
 		switch (sopt->sopt_name) {
 		case LOCAL_OCREDS:
 			if (!compat70_ocreds_valid)  {
-				error = ENOPROTOOPT;
+				error = SET_ERROR(ENOPROTOOPT);
 				break;
 			}
 			/* FALLTHROUGH */
@@ -653,7 +654,7 @@ uipc_ctloutput(int op, struct socket *so
 #undef OPTSET
 
 		default:
-			error = ENOPROTOOPT;
+			error = SET_ERROR(ENOPROTOOPT);
 			break;
 		}
 		break;
@@ -666,7 +667,7 @@ uipc_ctloutput(int op, struct socket *so
 				error = sockopt_set(sopt, &unp->unp_connid,
 				    sizeof(unp->unp_connid));
 			} else {
-				error = EINVAL;
+				error = SET_ERROR(EINVAL);
 			}
 			break;
 		case LOCAL_CREDS:
@@ -684,7 +685,7 @@ uipc_ctloutput(int op, struct socket *so
 #undef OPTBIT
 			/* FALLTHROUGH */
 		default:
-			error = ENOPROTOOPT;
+			error = SET_ERROR(ENOPROTOOPT);
 			break;
 		}
 		solock(so);
@@ -788,7 +789,7 @@ unp_detach(struct socket *so)
 		unp_disconnect1(unp);
 	while (unp->unp_refs) {
 		KASSERT(solocked2(so, unp->unp_refs->unp_socket));
-		if (unp_drop(unp->unp_refs, ECONNRESET)) {
+		if (unp_drop(unp->unp_refs, SET_ERROR(ECONNRESET))) {
 			solock(so);
 			goto retry;
 		}
@@ -820,7 +821,7 @@ unp_accept(struct socket *so, struct soc
 
 	/* XXX code review required to determine if unp can ever be NULL */
 	if (unp == NULL)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	KASSERT(so->so_lock == uipc_lock);
 	/*
@@ -875,7 +876,7 @@ unp_accept(struct socket *so, struct soc
 static int
 unp_ioctl(struct socket *so, u_long cmd, void *nam, struct ifnet *ifp)
 {
-	return EOPNOTSUPP;
+	return SET_ERROR(EOPNOTSUPP);
 }
 
 static int
@@ -888,7 +889,7 @@ unp_stat(struct socket *so, struct stat 
 
 	unp = sotounpcb(so);
 	if (unp == NULL)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	ub->st_blksize = so->so_snd.sb_hiwat;
 	switch (so->so_type) {
@@ -972,13 +973,13 @@ unp_bind(struct socket *so, struct socka
 	KASSERT(nam != NULL);
 
 	if (unp->unp_vnode != NULL)
-		return (EINVAL);
+		return SET_ERROR(EINVAL);
 	if ((unp->unp_flags & UNP_BUSY) != 0) {
 		/*
 		 * EALREADY may not be strictly accurate, but since this
 		 * is a major application error it's hardly a big deal.
 		 */
-		return (EALREADY);
+		return SET_ERROR(EALREADY);
 	}
 	unp->unp_flags |= UNP_BUSY;
 	sounlock(so);
@@ -988,7 +989,7 @@ unp_bind(struct socket *so, struct socka
 
 	pb = pathbuf_create(sun->sun_path);
 	if (pb == NULL) {
-		error = ENOMEM;
+		error = SET_ERROR(ENOMEM);
 		goto bad;
 	}
 	NDINIT(&nd, CREATE, FOLLOW | LOCKPARENT | TRYEMULROOT, pb);
@@ -1007,7 +1008,7 @@ unp_bind(struct socket *so, struct socka
 			vput(nd.ni_dvp);
 		vrele(vp);
 		pathbuf_destroy(pb);
-		error = EADDRINUSE;
+		error = SET_ERROR(EADDRINUSE);
 		goto bad;
 	}
 	vattr_null(&vattr);
@@ -1053,7 +1054,7 @@ unp_listen(struct socket *so, struct lwp
 	 */
 	unp_resetlock(so);
 	if (unp->unp_vnode == NULL)
-		return EINVAL;
+		return SET_ERROR(EINVAL);
 
 	unp_connid(l, unp, UNP_EIDSBIND);
 	return 0;
@@ -1086,7 +1087,7 @@ unp_abort(struct socket *so)
 	KASSERT(solocked(so));
 	KASSERT(sotounpcb(so) != NULL);
 
-	(void)unp_drop(sotounpcb(so), ECONNABORTED);
+	(void)unp_drop(sotounpcb(so), SET_ERROR(ECONNABORTED));
 	KASSERT(so->so_head == NULL);
 	KASSERT(so->so_pcb != NULL);
 	unp_detach(so);
@@ -1100,7 +1101,7 @@ unp_connect1(struct socket *so, struct s
 	struct unpcb *unp2;
 
 	if (so2->so_type != so->so_type)
-		return EPROTOTYPE;
+		return SET_ERROR(EPROTOTYPE);
 
 	/*
 	 * All three sockets involved must be locked by same lock:
@@ -1162,7 +1163,7 @@ unp_connect(struct socket *so, struct so
 		 * EALREADY may not be strictly accurate, but since this
 		 * is a major application error it's hardly a big deal.
 		 */
-		return (EALREADY);
+		return SET_ERROR(EALREADY);
 	}
 	unp->unp_flags |= UNP_BUSY;
 	sounlock(so);
@@ -1170,7 +1171,7 @@ unp_connect(struct socket *so, struct so
 	sun = makeun_sb(nam, &addrlen);
 	pb = pathbuf_create(sun->sun_path);
 	if (pb == NULL) {
-		error = ENOMEM;
+		error = SET_ERROR(ENOMEM);
 		goto bad2;
 	}
 
@@ -1183,7 +1184,7 @@ unp_connect(struct socket *so, struct so
 	vp = nd.ni_vp;
 	pathbuf_destroy(pb);
 	if (vp->v_type != VSOCK) {
-		error = ENOTSOCK;
+		error = SET_ERROR(ENOTSOCK);
 		goto bad;
 	}
 	if ((error = VOP_ACCESS(vp, VWRITE, l->l_cred)) != 0)
@@ -1193,12 +1194,12 @@ unp_connect(struct socket *so, struct so
 	so2 = vp->v_socket;
 	if (so2 == NULL) {
 		mutex_exit(vp->v_interlock);
-		error = ECONNREFUSED;
+		error = SET_ERROR(ECONNREFUSED);
 		goto bad;
 	}
 	if (so->so_type != so2->so_type) {
 		mutex_exit(vp->v_interlock);
-		error = EPROTOTYPE;
+		error = SET_ERROR(EPROTOTYPE);
 		goto bad;
 	}
 	solock(so);
@@ -1214,7 +1215,7 @@ unp_connect(struct socket *so, struct so
 		    so2->so_lock == uipc_lock);
 		if ((so2->so_options & SO_ACCEPTCONN) == 0 ||
 		    (so3 = sonewconn(so2, false)) == NULL) {
-			error = ECONNREFUSED;
+			error = SET_ERROR(ECONNREFUSED);
 			sounlock(so);
 			goto bad;
 		}
@@ -1424,7 +1425,7 @@ unp_externalize(struct mbuf *rights, str
 	for (size_t i = 0; i < nfds; i++) {
 		file_t * const fp = *rp++;
 		if (fp == NULL) {
-			error = EINVAL;
+			error = SET_ERROR(EINVAL);
 			goto out;
 		}
 		/*
@@ -1437,7 +1438,7 @@ unp_externalize(struct mbuf *rights, str
 			vnode_t *vp = fp->f_vnode;
 			if ((vp->v_type == VDIR) &&
 			    !vn_isunder(vp, p->p_cwdi->cwdi_rdir, l)) {
-				error = EPERM;
+				error = SET_ERROR(EPERM);
 				goto out;
 			}
 		}
@@ -1466,7 +1467,7 @@ unp_externalize(struct mbuf *rights, str
 			 * been returned, and some callers may
 			 * expect it.
 			 */
-			error = EMSGSIZE;
+			error = SET_ERROR(EMSGSIZE);
 			goto out;
 		}
 	}
@@ -1552,7 +1553,7 @@ unp_internalize(struct mbuf **controlp)
 	if (cm->cmsg_type != SCM_RIGHTS || cm->cmsg_level != SOL_SOCKET ||
 	    cm->cmsg_len > control->m_len ||
 	    cm->cmsg_len < CMSG_ALIGN(sizeof(*cm)))
-		return (EINVAL);
+		return SET_ERROR(EINVAL);
 
 	/*
 	 * Verify that the file descriptors are valid, and acquire
@@ -1566,7 +1567,7 @@ unp_internalize(struct mbuf **controlp)
 		if (atomic_inc_uint_nv(&unp_rights) > maxmsg) {
 			atomic_dec_uint(&unp_rights);
 			nfds = i;
-			error = EAGAIN;
+			error = SET_ERROR(EAGAIN);
 			goto out;
 		}
 		if ((fp = fd_getfile(fd)) == NULL
@@ -1575,7 +1576,7 @@ unp_internalize(struct mbuf **controlp)
 		    		fd_putfile(fd);
 			atomic_dec_uint(&unp_rights);
 			nfds = i;
-			error = EBADF;
+			error = SET_ERROR(EBADF);
 			goto out;
 		}
 	}
@@ -1583,7 +1584,7 @@ unp_internalize(struct mbuf **controlp)
 	/* Allocate new space and copy header into it. */
 	newcm = malloc(CMSG_SPACE(nfds * sizeof(file_t *)), M_MBUF, M_WAITOK);
 	if (newcm == NULL) {
-		error = E2BIG;
+		error = SET_ERROR(E2BIG);
 		goto out;
 	}
 	memcpy(newcm, cm, sizeof(struct cmsghdr));

Reply via email to