We have no interest on pru_abort() return value. Also we call it only through soabort() which is dummy pru_abort() wrapper and has no return value.
Also only the connection oriented sockets need to implement (*pru_abort)() handler. Such sockets are tcp(4) and unix(4) sockets, so we could remove existing code for all others. Also the route domain and key management sockets have the wrong handlers because they don't destroy passed socket, but only disconnect it. We call soabort()/pru_abort() only to destroy the sockets linked to the `so_q' and `so_q1' of listening socket. Such sockets are not yet exported to the userland and have no associated file descriptor. We have two cases when we destroy them. The first case is the soclose() when we destroy the listening socket. The second one is the syn_cache_get() when we destroy newly created socket in the error path of incoming connection. Also, I like to have the diagnostic block within pru_rcvd() and pru_abort() wrappers. The requests handlers are optional, but they have no "pru_ != NULL" check, so something like below could be reasonable pru_abort(struct socket *so) { #ifdef DIAGNOSTIC if (so->so_proto->pr_usrreqs->pru_abort == NULL) panic("Inappropriate %s call for socket of proto %d type %d", __func__, so->so_proto->pr_protocol, so->so_proto->pr_type); #endif (*so->so_proto->pr_usrreqs->pru_abort)(so); } Index: sys/kern/uipc_usrreq.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_usrreq.c,v retrieving revision 1.188 diff -u -p -r1.188 uipc_usrreq.c --- sys/kern/uipc_usrreq.c 17 Sep 2022 12:40:52 -0000 1.188 +++ sys/kern/uipc_usrreq.c 17 Sep 2022 19:06:09 -0000 @@ -501,15 +501,13 @@ out: return (error); } -int +void uipc_abort(struct socket *so) { struct unpcb *unp = sotounpcb(so); unp_detach(unp); sofree(so, 0); - - return (0); } int Index: sys/net/pfkeyv2.c =================================================================== RCS file: /cvs/src/sys/net/pfkeyv2.c,v retrieving revision 1.252 diff -u -p -r1.252 pfkeyv2.c --- sys/net/pfkeyv2.c 3 Sep 2022 22:43:38 -0000 1.252 +++ sys/net/pfkeyv2.c 17 Sep 2022 19:06:10 -0000 @@ -175,7 +175,6 @@ int pfkeyv2_disconnect(struct socket *); int pfkeyv2_shutdown(struct socket *); int pfkeyv2_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int pfkeyv2_abort(struct socket *); int pfkeyv2_sockaddr(struct socket *, struct mbuf *); int pfkeyv2_peeraddr(struct socket *, struct mbuf *); int pfkeyv2_output(struct mbuf *, struct socket *); @@ -209,7 +208,6 @@ const struct pr_usrreqs pfkeyv2_usrreqs .pru_disconnect = pfkeyv2_disconnect, .pru_shutdown = pfkeyv2_shutdown, .pru_send = pfkeyv2_send, - .pru_abort = pfkeyv2_abort, .pru_sockaddr = pfkeyv2_sockaddr, .pru_peeraddr = pfkeyv2_peeraddr, }; @@ -380,13 +378,6 @@ out: m_freem(m); return (error); -} - -int -pfkeyv2_abort(struct socket *so) -{ - soisdisconnected(so); - return (0); } int Index: sys/net/rtsock.c =================================================================== RCS file: /cvs/src/sys/net/rtsock.c,v retrieving revision 1.356 diff -u -p -r1.356 rtsock.c --- sys/net/rtsock.c 13 Sep 2022 09:05:47 -0000 1.356 +++ sys/net/rtsock.c 17 Sep 2022 19:06:10 -0000 @@ -118,7 +118,6 @@ int route_shutdown(struct socket *); void route_rcvd(struct socket *); int route_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int route_abort(struct socket *); int route_sockaddr(struct socket *, struct mbuf *); int route_peeraddr(struct socket *, struct mbuf *); void route_input(struct mbuf *m0, struct socket *, sa_family_t); @@ -345,13 +344,6 @@ out: } int -route_abort(struct socket *so) -{ - soisdisconnected(so); - return (0); -} - -int route_sockaddr(struct socket *so, struct mbuf *nam) { return (EINVAL); @@ -2406,7 +2398,6 @@ const struct pr_usrreqs route_usrreqs = .pru_shutdown = route_shutdown, .pru_rcvd = route_rcvd, .pru_send = route_send, - .pru_abort = route_abort, .pru_sockaddr = route_sockaddr, .pru_peeraddr = route_peeraddr, }; Index: sys/netinet/ip_divert.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_divert.c,v retrieving revision 1.87 diff -u -p -r1.87 ip_divert.c --- sys/netinet/ip_divert.c 5 Sep 2022 14:56:09 -0000 1.87 +++ sys/netinet/ip_divert.c 17 Sep 2022 19:06:10 -0000 @@ -70,7 +70,6 @@ const struct pr_usrreqs divert_usrreqs = .pru_bind = divert_bind, .pru_shutdown = divert_shutdown, .pru_send = divert_send, - .pru_abort = divert_abort, .pru_control = in_control, .pru_sockaddr = in_sockaddr, .pru_peeraddr = in_peeraddr, @@ -333,19 +332,6 @@ divert_send(struct socket *so, struct mb soassertlocked(so); return (divert_output(inp, m, addr, control)); -} - -int -divert_abort(struct socket *so) -{ - struct inpcb *inp = sotoinpcb(so); - - soassertlocked(so); - - soisdisconnected(so); - in_pcbdetach(inp); - - return (0); } int Index: sys/netinet/ip_divert.h =================================================================== RCS file: /cvs/src/sys/netinet/ip_divert.h,v retrieving revision 1.22 diff -u -p -r1.22 ip_divert.h --- sys/netinet/ip_divert.h 5 Sep 2022 14:56:09 -0000 1.22 +++ sys/netinet/ip_divert.h 17 Sep 2022 19:06:10 -0000 @@ -78,6 +78,5 @@ int divert_bind(struct socket *, struct int divert_shutdown(struct socket *); int divert_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int divert_abort(struct socket *); #endif /* _KERNEL */ #endif /* _IP_DIVERT_H_ */ Index: sys/netinet/ip_gre.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_gre.c,v retrieving revision 1.84 diff -u -p -r1.84 ip_gre.c --- sys/netinet/ip_gre.c 3 Sep 2022 22:43:38 -0000 1.84 +++ sys/netinet/ip_gre.c 17 Sep 2022 19:06:10 -0000 @@ -71,7 +71,6 @@ const struct pr_usrreqs gre_usrreqs = { .pru_disconnect = rip_disconnect, .pru_shutdown = rip_shutdown, .pru_send = gre_send, - .pru_abort = rip_abort, .pru_control = in_control, .pru_sockaddr = in_sockaddr, .pru_peeraddr = in_peeraddr, Index: sys/netinet/ip_var.h =================================================================== RCS file: /cvs/src/sys/netinet/ip_var.h,v retrieving revision 1.105 diff -u -p -r1.105 ip_var.h --- sys/netinet/ip_var.h 13 Sep 2022 09:05:02 -0000 1.105 +++ sys/netinet/ip_var.h 17 Sep 2022 19:06:10 -0000 @@ -266,7 +266,6 @@ int rip_disconnect(struct socket *); int rip_shutdown(struct socket *); int rip_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int rip_abort(struct socket *); #ifdef MROUTING extern struct socket *ip_mrouter[]; /* multicast routing daemon */ #endif Index: sys/netinet/raw_ip.c =================================================================== RCS file: /cvs/src/sys/netinet/raw_ip.c,v retrieving revision 1.148 diff -u -p -r1.148 raw_ip.c --- sys/netinet/raw_ip.c 13 Sep 2022 09:05:02 -0000 1.148 +++ sys/netinet/raw_ip.c 17 Sep 2022 19:06:10 -0000 @@ -113,7 +113,6 @@ const struct pr_usrreqs rip_usrreqs = { .pru_disconnect = rip_disconnect, .pru_shutdown = rip_shutdown, .pru_send = rip_send, - .pru_abort = rip_abort, .pru_control = in_control, .pru_sockaddr = in_sockaddr, .pru_peeraddr = in_peeraddr, @@ -643,21 +642,4 @@ out: m_freem(m); return (error); -} - -int -rip_abort(struct socket *so) -{ - struct inpcb *inp = sotoinpcb(so); - - soassertlocked(so); - - soisdisconnected(so); -#ifdef MROUTING - if (so == ip_mrouter[inp->inp_rtableid]) - ip_mrouter_done(so); -#endif - in_pcbdetach(inp); - - return (0); } Index: sys/netinet/tcp_usrreq.c =================================================================== RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v retrieving revision 1.208 diff -u -p -r1.208 tcp_usrreq.c --- sys/netinet/tcp_usrreq.c 13 Sep 2022 09:05:47 -0000 1.208 +++ sys/netinet/tcp_usrreq.c 17 Sep 2022 19:06:10 -0000 @@ -865,18 +865,17 @@ out: /* * Abort the TCP. */ -int +void tcp_abort(struct socket *so) { struct inpcb *inp; struct tcpcb *tp, *otp = NULL; - int error; short ostate; soassertlocked(so); - if ((error = tcp_sogetpcb(so, &inp, &tp))) - return (error); + if (tcp_sogetpcb(so, &inp, &tp)) + return; if (so->so_options & SO_DEBUG) { otp = tp; @@ -887,7 +886,6 @@ tcp_abort(struct socket *so) if (otp) tcp_trace(TA_USER, ostate, tp, otp, NULL, PRU_ABORT, 0); - return (0); } int Index: sys/netinet/tcp_var.h =================================================================== RCS file: /cvs/src/sys/netinet/tcp_var.h,v retrieving revision 1.158 diff -u -p -r1.158 tcp_var.h --- sys/netinet/tcp_var.h 13 Sep 2022 09:05:47 -0000 1.158 +++ sys/netinet/tcp_var.h 17 Sep 2022 19:06:10 -0000 @@ -728,7 +728,7 @@ int tcp_shutdown(struct socket *); void tcp_rcvd(struct socket *); int tcp_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int tcp_abort(struct socket *); +void tcp_abort(struct socket *); int tcp_sockaddr(struct socket *, struct mbuf *); int tcp_peeraddr(struct socket *, struct mbuf *); int tcp_sense(struct socket *, struct stat *); Index: sys/netinet/udp_usrreq.c =================================================================== RCS file: /cvs/src/sys/netinet/udp_usrreq.c,v retrieving revision 1.302 diff -u -p -r1.302 udp_usrreq.c --- sys/netinet/udp_usrreq.c 5 Sep 2022 14:56:09 -0000 1.302 +++ sys/netinet/udp_usrreq.c 17 Sep 2022 19:06:10 -0000 @@ -132,7 +132,6 @@ const struct pr_usrreqs udp_usrreqs = { .pru_disconnect = udp_disconnect, .pru_shutdown = udp_shutdown, .pru_send = udp_send, - .pru_abort = udp_abort, .pru_control = in_control, .pru_sockaddr = in_sockaddr, .pru_peeraddr = in_peeraddr, @@ -149,7 +148,6 @@ const struct pr_usrreqs udp6_usrreqs = { .pru_disconnect = udp_disconnect, .pru_shutdown = udp_shutdown, .pru_send = udp_send, - .pru_abort = udp_abort, .pru_control = in6_control, .pru_sockaddr = in6_sockaddr, .pru_peeraddr = in6_peeraddr, @@ -1258,19 +1256,6 @@ udp_send(struct socket *so, struct mbuf error = udp_output(inp, m, addr, control); return (error); -} - -int -udp_abort(struct socket *so) -{ - struct inpcb *inp = sotoinpcb(so); - - soassertlocked(so); - - soisdisconnected(so); - in_pcbdetach(inp); - - return (0); } /* Index: sys/netinet/udp_var.h =================================================================== RCS file: /cvs/src/sys/netinet/udp_var.h,v retrieving revision 1.47 diff -u -p -r1.47 udp_var.h --- sys/netinet/udp_var.h 5 Sep 2022 14:56:09 -0000 1.47 +++ sys/netinet/udp_var.h 17 Sep 2022 19:06:10 -0000 @@ -153,6 +153,5 @@ int udp_disconnect(struct socket *); int udp_shutdown(struct socket *); int udp_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int udp_abort(struct socket *); #endif /* _KERNEL */ #endif /* _NETINET_UDP_VAR_H_ */ Index: sys/netinet6/ip6_divert.c =================================================================== RCS file: /cvs/src/sys/netinet6/ip6_divert.c,v retrieving revision 1.86 diff -u -p -r1.86 ip6_divert.c --- sys/netinet6/ip6_divert.c 5 Sep 2022 14:56:09 -0000 1.86 +++ sys/netinet6/ip6_divert.c 17 Sep 2022 19:06:10 -0000 @@ -71,7 +71,6 @@ const struct pr_usrreqs divert6_usrreqs .pru_bind = divert6_bind, .pru_shutdown = divert6_shutdown, .pru_send = divert6_send, - .pru_abort = divert6_abort, .pru_control = in6_control, .pru_sockaddr = in6_sockaddr, .pru_peeraddr = in6_peeraddr, @@ -341,18 +340,6 @@ divert6_send(struct socket *so, struct m soassertlocked(so); return (divert6_output(inp, m, addr, control)); -} - -int -divert6_abort(struct socket *so) -{ - struct inpcb *inp = sotoinpcb(so); - - soassertlocked(so); - soisdisconnected(so); - in_pcbdetach(inp); - - return (0); } int Index: sys/netinet6/ip6_divert.h =================================================================== RCS file: /cvs/src/sys/netinet6/ip6_divert.h,v retrieving revision 1.20 diff -u -p -r1.20 ip6_divert.h --- sys/netinet6/ip6_divert.h 5 Sep 2022 14:56:09 -0000 1.20 +++ sys/netinet6/ip6_divert.h 17 Sep 2022 19:06:10 -0000 @@ -78,7 +78,6 @@ int divert6_bind(struct socket *, struc int divert6_shutdown(struct socket *); int divert6_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int divert6_abort(struct socket *); #endif /* _KERNEL */ #endif /* _IP6_DIVERT_H_ */ Index: sys/netinet6/ip6_var.h =================================================================== RCS file: /cvs/src/sys/netinet6/ip6_var.h,v retrieving revision 1.103 diff -u -p -r1.103 ip6_var.h --- sys/netinet6/ip6_var.h 13 Sep 2022 09:05:02 -0000 1.103 +++ sys/netinet6/ip6_var.h 17 Sep 2022 19:06:10 -0000 @@ -361,7 +361,6 @@ int rip6_disconnect(struct socket *); int rip6_shutdown(struct socket *); int rip6_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int rip6_abort(struct socket *); int rip6_sysctl(int *, u_int, void *, size_t *, void *, size_t); int dest6_input(struct mbuf **, int *, int, int); Index: sys/netinet6/raw_ip6.c =================================================================== RCS file: /cvs/src/sys/netinet6/raw_ip6.c,v retrieving revision 1.169 diff -u -p -r1.169 raw_ip6.c --- sys/netinet6/raw_ip6.c 13 Sep 2022 09:05:02 -0000 1.169 +++ sys/netinet6/raw_ip6.c 17 Sep 2022 19:06:10 -0000 @@ -115,7 +115,6 @@ const struct pr_usrreqs rip6_usrreqs = { .pru_disconnect = rip6_disconnect, .pru_shutdown = rip6_shutdown, .pru_send = rip6_send, - .pru_abort = rip6_abort, .pru_control = in6_control, .pru_sockaddr = in6_sockaddr, .pru_peeraddr = in6_peeraddr, @@ -777,26 +776,6 @@ out: m_freem(m); return (error); -} - -int -rip6_abort(struct socket *so) -{ - struct inpcb *in6p = sotoinpcb(so); - - soassertlocked(so); - - soisdisconnected(so); -#ifdef MROUTING - if (so == ip6_mrouter[in6p->inp_rtableid]) - ip6_mrouter_done(so); -#endif - free(in6p->inp_icmp6filt, M_PCB, sizeof(struct icmp6_filter)); - in6p->inp_icmp6filt = NULL; - - in_pcbdetach(in6p); - - return (0); } int Index: sys/sys/protosw.h =================================================================== RCS file: /cvs/src/sys/sys/protosw.h,v retrieving revision 1.56 diff -u -p -r1.56 protosw.h --- sys/sys/protosw.h 13 Sep 2022 09:05:47 -0000 1.56 +++ sys/sys/protosw.h 17 Sep 2022 19:06:10 -0000 @@ -75,7 +75,7 @@ struct pr_usrreqs { void (*pru_rcvd)(struct socket *); int (*pru_send)(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); - int (*pru_abort)(struct socket *); + void (*pru_abort)(struct socket *); int (*pru_control)(struct socket *, u_long, caddr_t, struct ifnet *); int (*pru_sense)(struct socket *, struct stat *); @@ -349,10 +349,10 @@ pru_send(struct socket *so, struct mbuf return (*so->so_proto->pr_usrreqs->pru_send)(so, top, addr, control); } -static inline int +static inline void pru_abort(struct socket *so) { - return (*so->so_proto->pr_usrreqs->pru_abort)(so); + (*so->so_proto->pr_usrreqs->pru_abort)(so); } static inline int Index: sys/sys/unpcb.h =================================================================== RCS file: /cvs/src/sys/sys/unpcb.h,v retrieving revision 1.41 diff -u -p -r1.41 unpcb.h --- sys/sys/unpcb.h 13 Sep 2022 09:05:47 -0000 1.41 +++ sys/sys/unpcb.h 17 Sep 2022 19:06:10 -0000 @@ -123,7 +123,7 @@ int uipc_shutdown(struct socket *); void uipc_rcvd(struct socket *); int uipc_send(struct socket *, struct mbuf *, struct mbuf *, struct mbuf *); -int uipc_abort(struct socket *); +void uipc_abort(struct socket *); int uipc_sense(struct socket *, struct stat *); int uipc_sockaddr(struct socket *, struct mbuf *); int uipc_peeraddr(struct socket *, struct mbuf *);