git: 18d47c1856f4 - main - rpc: correct resultproc_t's type

From: Brooks Davis <brooks_at_FreeBSD.org>
Date: Mon, 02 Feb 2026 21:20:36 UTC
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=18d47c1856f4ec3f7a2f9a726bba2ebe64d63dd7

commit 18d47c1856f4ec3f7a2f9a726bba2ebe64d63dd7
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2026-02-02 21:20:16 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2026-02-02 21:20:16 +0000

    rpc: correct resultproc_t's type
    
    It takes exactly three arguments of known type.
    
    Tweak the types of various resultproc_t functions to match the type (mostly
    added const to struct pointers) allowing us to drop casts.
    
    Effort:         CHERI upstreaming
    Reviewed by:    vangyzen, glebius
    Sponsored by:   DARPA, AFRL
    Differential Revision:  https://reviews.freebsd.org/D54941
---
 contrib/netbsd-tests/lib/libc/rpc/t_rpc.c | 5 +++--
 include/rpc/clnt.h                        | 3 ++-
 lib/libc/rpc/rpc_soc.c                    | 8 +++++---
 usr.bin/rpcinfo/rpcinfo.c                 | 8 +++++---
 4 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
index 3000f6aec98b..2737151826bf 100644
--- a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
+++ b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
@@ -39,7 +39,8 @@ __RCSID("$NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $");
 #define RPCBPROC_NULL 0
 
 static int
-reply(caddr_t replyp, struct netbuf * raddrp, struct netconfig * nconf)
+reply(caddr_t replyp, const struct netbuf * raddrp,
+    const struct netconfig * nconf)
 {
 	char host[NI_MAXHOST];
 	struct sockaddr *sock = raddrp->buf;
@@ -244,7 +245,7 @@ allhosts(const char *transp)
 
 	clnt_stat = rpc_broadcast(RPCBPROG, RPCBVERS, RPCBPROC_NULL,
 	    (xdrproc_t)xdr_void, NULL, (xdrproc_t)xdr_void,
-	    NULL, (resultproc_t)reply, transp);
+	    NULL, reply, transp);
 	if (clnt_stat != RPC_SUCCESS && clnt_stat != RPC_TIMEDOUT)
 		ERRX(EXIT_FAILURE, "%s", clnt_sperrno(clnt_stat));
 }
diff --git a/include/rpc/clnt.h b/include/rpc/clnt.h
index eb5e1f5b350f..d7b3e2beb8c0 100644
--- a/include/rpc/clnt.h
+++ b/include/rpc/clnt.h
@@ -514,7 +514,8 @@ __END_DECLS
  *	const char		*nettype;	-- Transport type
  */
 
-typedef bool_t (*resultproc_t)(caddr_t, ...);
+typedef bool_t (*resultproc_t)(caddr_t, const struct netbuf *,
+			       const struct netconfig *);
 
 __BEGIN_DECLS
 extern enum clnt_stat rpc_broadcast(const rpcprog_t, const rpcvers_t,
diff --git a/lib/libc/rpc/rpc_soc.c b/lib/libc/rpc/rpc_soc.c
index e986593badf4..24a19624d366 100644
--- a/lib/libc/rpc/rpc_soc.c
+++ b/lib/libc/rpc/rpc_soc.c
@@ -72,7 +72,8 @@
 static CLIENT *clnt_com_create(struct sockaddr_in *, rpcprog_t, rpcvers_t,
     int *, u_int, u_int, char *);
 static SVCXPRT *svc_com_create(int, u_int, u_int, char *);
-static bool_t rpc_wrap_bcast(char *, struct netbuf *, struct netconfig *);
+static bool_t rpc_wrap_bcast(char *, const struct netbuf *,
+    const struct netconfig *);
 
 /* XXX */
 #define IN4_LOCALHOST_STRING    "127.0.0.1"
@@ -318,7 +319,8 @@ static _Thread_local clnt_broadcast_resultproc_t clnt_broadcast_result;
  */
 /* ARGSUSED */
 static bool_t
-rpc_wrap_bcast(char *resultp, struct netbuf *addr, struct netconfig *nconf)
+rpc_wrap_bcast(char *resultp, const struct netbuf *addr,
+    const struct netconfig *nconf)
 /*
  *	char *resultp;		// results of the call
  *	struct netbuf *addr;	// address of the guy who responded
@@ -355,7 +357,7 @@ clnt_broadcast(u_long prog, u_long vers, u_long proc, xdrproc_t xargs,
 
 	ret = rpc_broadcast((rpcprog_t)prog, (rpcvers_t)vers,
 	    (rpcproc_t)proc, xargs, argsp, xresults, resultsp,
-	    (resultproc_t) rpc_wrap_bcast, "udp");
+	    rpc_wrap_bcast, "udp");
 
 	clnt_broadcast_result = NULL;
 	return (ret);
diff --git a/usr.bin/rpcinfo/rpcinfo.c b/usr.bin/rpcinfo/rpcinfo.c
index 5f2dd4433292..5156dd2db4e0 100644
--- a/usr.bin/rpcinfo/rpcinfo.c
+++ b/usr.bin/rpcinfo/rpcinfo.c
@@ -125,7 +125,8 @@ static void	pmapdump(int, char **);
 static void	get_inet_address(struct sockaddr_in *, char *);
 #endif
 
-static bool_t	reply_proc(void *, struct netbuf *, struct netconfig *);
+static bool_t	reply_proc(char *, const struct netbuf *,
+			   const struct netconfig *);
 static void	brdcst(int, char **);
 static void	addrping(char *, char *, int, char **);
 static void	progping(char *, int, char **);
@@ -584,7 +585,8 @@ get_inet_address(struct sockaddr_in *addr, char *host)
 
 /*ARGSUSED*/
 static bool_t
-reply_proc(void *res, struct netbuf *who, struct netconfig *nconf)
+reply_proc(char *res __unused, const struct netbuf *who,
+    const struct netconfig *nconf)
 	/* void *res;			Nothing comes back */
 	/* struct netbuf *who;		Who sent us the reply */
 	/* struct netconfig *nconf; 	On which transport the reply came */
@@ -621,7 +623,7 @@ brdcst(int argc, char **argv)
 	vers = getvers(argv[1]);
 	rpc_stat = rpc_broadcast(prognum, vers, NULLPROC,
 		(xdrproc_t) xdr_void, (char *)NULL, (xdrproc_t) xdr_void,
-		(char *)NULL, (resultproc_t) reply_proc, NULL);
+		(char *)NULL, reply_proc, NULL);
 	if ((rpc_stat != RPC_SUCCESS) && (rpc_stat != RPC_TIMEDOUT))
 		errx(1, "broadcast failed: %s", clnt_sperrno(rpc_stat));
 	exit(0);