Module Name: src Committed By: rtr Date: Sat May 2 17:18:04 UTC 2015
Modified Files: src/sys/compat/linux/common: linux_socket.c src/sys/compat/svr4: svr4_stream.c src/sys/kern: uipc_socket.c uipc_syscalls.c uipc_usrreq.c src/sys/net: if_gre.c link_proto.c raw_cb.h raw_usrreq.c rtsock.c src/sys/netatalk: ddp_usrreq.c src/sys/netbt: hci_socket.c l2cap_socket.c rfcomm_socket.c sco_socket.c src/sys/netinet: dccp_usrreq.c dccp_var.h in_pcb.c in_pcb.h raw_ip.c tcp_input.c tcp_usrreq.c udp_usrreq.c src/sys/netinet6: dccp6_usrreq.c dccp6_var.h in6_pcb.c in6_pcb.h raw_ip6.c udp6_output.c udp6_usrreq.c udp6_var.h src/sys/netipsec: keysock.c src/sys/netmpls: mpls_proto.c src/sys/netnatm: natm.c src/sys/netsmb: smb_trantcp.c src/sys/nfs: nfs_socket.c src/sys/rump/net/lib/libsockin: sockin.c src/sys/sys: param.h protosw.h socketvar.h un.h Log Message: make connect syscall use sockaddr_big and modify pr_{send,connect} nam parameter type from buf * to sockaddr *. final commit for parameter type changes to protocol user requests * bump kernel version to 7.99.15 for parameter type changes to pr_{send,connect} To generate a diff of this commit: cvs rdiff -u -r1.123 -r1.124 src/sys/compat/linux/common/linux_socket.c cvs rdiff -u -r1.84 -r1.85 src/sys/compat/svr4/svr4_stream.c cvs rdiff -u -r1.239 -r1.240 src/sys/kern/uipc_socket.c cvs rdiff -u -r1.176 -r1.177 src/sys/kern/uipc_syscalls.c cvs rdiff -u -r1.178 -r1.179 src/sys/kern/uipc_usrreq.c cvs rdiff -u -r1.164 -r1.165 src/sys/net/if_gre.c cvs rdiff -u -r1.27 -r1.28 src/sys/net/link_proto.c cvs rdiff -u -r1.24 -r1.25 src/sys/net/raw_cb.h cvs rdiff -u -r1.53 -r1.54 src/sys/net/raw_usrreq.c cvs rdiff -u -r1.170 -r1.171 src/sys/net/rtsock.c cvs rdiff -u -r1.67 -r1.68 src/sys/netatalk/ddp_usrreq.c cvs rdiff -u -r1.43 -r1.44 src/sys/netbt/hci_socket.c cvs rdiff -u -r1.34 -r1.35 src/sys/netbt/l2cap_socket.c cvs rdiff -u -r1.36 -r1.37 src/sys/netbt/rfcomm_socket.c \ src/sys/netbt/sco_socket.c cvs rdiff -u -r1.5 -r1.6 src/sys/netinet/dccp_usrreq.c cvs rdiff -u -r1.1 -r1.2 src/sys/netinet/dccp_var.h cvs rdiff -u -r1.159 -r1.160 src/sys/netinet/in_pcb.c cvs rdiff -u -r1.57 -r1.58 src/sys/netinet/in_pcb.h cvs rdiff -u -r1.151 -r1.152 src/sys/netinet/raw_ip.c cvs rdiff -u -r1.338 -r1.339 src/sys/netinet/tcp_input.c cvs rdiff -u -r1.207 -r1.208 src/sys/netinet/tcp_usrreq.c cvs rdiff -u -r1.220 -r1.221 src/sys/netinet/udp_usrreq.c cvs rdiff -u -r1.5 -r1.6 src/sys/netinet6/dccp6_usrreq.c cvs rdiff -u -r1.3 -r1.4 src/sys/netinet6/dccp6_var.h cvs rdiff -u -r1.139 -r1.140 src/sys/netinet6/in6_pcb.c \ src/sys/netinet6/raw_ip6.c cvs rdiff -u -r1.44 -r1.45 src/sys/netinet6/in6_pcb.h cvs rdiff -u -r1.48 -r1.49 src/sys/netinet6/udp6_output.c cvs rdiff -u -r1.119 -r1.120 src/sys/netinet6/udp6_usrreq.c cvs rdiff -u -r1.27 -r1.28 src/sys/netinet6/udp6_var.h cvs rdiff -u -r1.47 -r1.48 src/sys/netipsec/keysock.c cvs rdiff -u -r1.27 -r1.28 src/sys/netmpls/mpls_proto.c cvs rdiff -u -r1.48 -r1.49 src/sys/netnatm/natm.c cvs rdiff -u -r1.47 -r1.48 src/sys/netsmb/smb_trantcp.c cvs rdiff -u -r1.194 -r1.195 src/sys/nfs/nfs_socket.c cvs rdiff -u -r1.61 -r1.62 src/sys/rump/net/lib/libsockin/sockin.c cvs rdiff -u -r1.476 -r1.477 src/sys/sys/param.h cvs rdiff -u -r1.63 -r1.64 src/sys/sys/protosw.h cvs rdiff -u -r1.137 -r1.138 src/sys/sys/socketvar.h cvs rdiff -u -r1.55 -r1.56 src/sys/sys/un.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/linux/common/linux_socket.c diff -u src/sys/compat/linux/common/linux_socket.c:1.123 src/sys/compat/linux/common/linux_socket.c:1.124 --- src/sys/compat/linux/common/linux_socket.c:1.123 Fri Apr 3 20:01:07 2015 +++ src/sys/compat/linux/common/linux_socket.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_socket.c,v 1.123 2015/04/03 20:01:07 rtr Exp $ */ +/* $NetBSD: linux_socket.c,v 1.124 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.123 2015/04/03 20:01:07 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.124 2015/05/02 17:18:03 rtr Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -1402,14 +1402,14 @@ linux_sys_connect(struct lwp *l, const s syscallarg(int) namelen; } */ int error; - struct mbuf *nam; + struct sockaddr_big sb; - error = linux_get_sa(l, SCARG(uap, s), &nam, SCARG(uap, name), + error = linux_get_sa_sb(l, SCARG(uap, s), &sb, SCARG(uap, name), SCARG(uap, namelen)); if (error) return (error); - error = do_sys_connect(l, SCARG(uap, s), nam); + error = do_sys_connect(l, SCARG(uap, s), (struct sockaddr *)&sb); if (error == EISCONN) { struct socket *so; Index: src/sys/compat/svr4/svr4_stream.c diff -u src/sys/compat/svr4/svr4_stream.c:1.84 src/sys/compat/svr4/svr4_stream.c:1.85 --- src/sys/compat/svr4/svr4_stream.c:1.84 Fri Apr 24 22:32:37 2015 +++ src/sys/compat/svr4/svr4_stream.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: svr4_stream.c,v 1.84 2015/04/24 22:32:37 rtr Exp $ */ +/* $NetBSD: svr4_stream.c,v 1.85 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 1994, 2008 The NetBSD Foundation, Inc. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: svr4_stream.c,v 1.84 2015/04/24 22:32:37 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: svr4_stream.c,v 1.85 2015/05/02 17:18:03 rtr Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -1495,7 +1495,8 @@ svr4_sys_putmsg(struct lwp *l, const str switch (st->s_cmd = sc.cmd) { case SVR4_TI_CONNECT_REQUEST: /* connect */ KERNEL_UNLOCK_ONE(NULL); - return do_sys_connect(l, SCARG(uap, fd), nam); + return do_sys_connect(l, SCARG(uap, fd), + mtod(nam, struct sockaddr *)); case SVR4_TI_SENDTO_REQUEST: /* sendto */ KERNEL_UNLOCK_ONE(NULL); Index: src/sys/kern/uipc_socket.c diff -u src/sys/kern/uipc_socket.c:1.239 src/sys/kern/uipc_socket.c:1.240 --- src/sys/kern/uipc_socket.c:1.239 Fri Apr 24 22:32:37 2015 +++ src/sys/kern/uipc_socket.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_socket.c,v 1.239 2015/04/24 22:32:37 rtr Exp $ */ +/* $NetBSD: uipc_socket.c,v 1.240 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.239 2015/04/24 22:32:37 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.240 2015/05/02 17:18:03 rtr Exp $"); #include "opt_compat_netbsd.h" #include "opt_sock_counters.h" @@ -811,7 +811,7 @@ soaccept(struct socket *so, struct socka } int -soconnect(struct socket *so, struct mbuf *nam, struct lwp *l) +soconnect(struct socket *so, struct sockaddr *nam, struct lwp *l) { int error; @@ -1051,12 +1051,17 @@ sosend(struct socket *so, struct mbuf *a so->so_options |= SO_DONTROUTE; if (resid > 0) so->so_state |= SS_MORETOCOME; - if (flags & MSG_OOB) + if (flags & MSG_OOB) { error = (*so->so_proto->pr_usrreqs->pr_sendoob)(so, top, control); - else + } else { + struct sockaddr *sin = NULL; + if (addr) { + sin = mtod(addr, struct sockaddr *); + } error = (*so->so_proto->pr_usrreqs->pr_send)(so, - top, addr, control, l); + top, sin, control, l); + } if (dontroute) so->so_options &= ~SO_DONTROUTE; if (resid > 0) Index: src/sys/kern/uipc_syscalls.c diff -u src/sys/kern/uipc_syscalls.c:1.176 src/sys/kern/uipc_syscalls.c:1.177 --- src/sys/kern/uipc_syscalls.c:1.176 Fri Apr 24 22:32:37 2015 +++ src/sys/kern/uipc_syscalls.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_syscalls.c,v 1.176 2015/04/24 22:32:37 rtr Exp $ */ +/* $NetBSD: uipc_syscalls.c,v 1.177 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.176 2015/04/24 22:32:37 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.177 2015/05/02 17:18:03 rtr Exp $"); #include "opt_pipe.h" @@ -336,28 +336,25 @@ sys_connect(struct lwp *l, const struct syscallarg(unsigned int) namelen; } */ int error; - struct mbuf *nam; + struct sockaddr_big sbig; - error = sockargs(&nam, SCARG(uap, name), SCARG(uap, namelen), - MT_SONAME); + error = sockargs_sb(&sbig, SCARG(uap, name), SCARG(uap, namelen)); if (error) return error; - return do_sys_connect(l, SCARG(uap, s), nam); + return do_sys_connect(l, SCARG(uap, s), (struct sockaddr *)&sbig); } int -do_sys_connect(struct lwp *l, int fd, struct mbuf *nam) +do_sys_connect(struct lwp *l, int fd, struct sockaddr *nam) { struct socket *so; int error; int interrupted = 0; if ((error = fd_getsock(fd, &so)) != 0) { - m_freem(nam); return (error); } solock(so); - MCLAIM(nam, so->so_mowner); if ((so->so_state & SS_ISCONNECTING) != 0) { error = EALREADY; goto out; @@ -396,7 +393,6 @@ do_sys_connect(struct lwp *l, int fd, st out: sounlock(so); fd_putfile(fd); - m_freem(nam); return error; } Index: src/sys/kern/uipc_usrreq.c diff -u src/sys/kern/uipc_usrreq.c:1.178 src/sys/kern/uipc_usrreq.c:1.179 --- src/sys/kern/uipc_usrreq.c:1.178 Sun Apr 26 21:40:48 2015 +++ src/sys/kern/uipc_usrreq.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_usrreq.c,v 1.178 2015/04/26 21:40:48 rtr Exp $ */ +/* $NetBSD: uipc_usrreq.c,v 1.179 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 1998, 2000, 2004, 2008, 2009 The NetBSD Foundation, Inc. @@ -96,7 +96,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.178 2015/04/26 21:40:48 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.179 2015/05/02 17:18:03 rtr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -409,7 +409,7 @@ unp_recvoob(struct socket *so, struct mb } static int -unp_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +unp_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct unpcb *unp = sotounpcb(so); @@ -861,28 +861,6 @@ unp_sockaddr(struct socket *so, struct s } /* - * Allocate the new sockaddr. We have to allocate one - * extra byte so that we can ensure that the pathname - * is nul-terminated. Note that unlike linux, we don't - * include in the address length the NUL in the path - * component, because doing so, would exceed sizeof(sockaddr_un) - * for fully occupied pathnames. Linux is also inconsistent, - * because it does not include the NUL in the length of - * what it calls "abstract" unix sockets. - */ -static struct sockaddr_un * -makeun(struct mbuf *nam, size_t *addrlen) -{ - struct sockaddr_un *sun; - - *addrlen = nam->m_len + 1; - sun = malloc(*addrlen, M_SONAME, M_WAITOK); - m_copydata(nam, 0, nam->m_len, (void *)sun); - *(((char *)sun) + nam->m_len) = '\0'; - return sun; -} - -/* * we only need to perform this allocation until syscalls other than * bind are adjusted to use sockaddr_big. */ @@ -1105,7 +1083,7 @@ unp_connect1(struct socket *so, struct s } int -unp_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +unp_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct sockaddr_un *sun; vnode_t *vp; @@ -1127,7 +1105,7 @@ unp_connect(struct socket *so, struct mb unp->unp_flags |= UNP_BUSY; sounlock(so); - sun = makeun(nam, &addrlen); + sun = makeun_sb(nam, &addrlen); pb = pathbuf_create(sun->sun_path); if (pb == NULL) { error = ENOMEM; Index: src/sys/net/if_gre.c diff -u src/sys/net/if_gre.c:1.164 src/sys/net/if_gre.c:1.165 --- src/sys/net/if_gre.c:1.164 Fri Apr 24 22:32:37 2015 +++ src/sys/net/if_gre.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: if_gre.c,v 1.164 2015/04/24 22:32:37 rtr Exp $ */ +/* $NetBSD: if_gre.c,v 1.165 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc. @@ -45,7 +45,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_gre.c,v 1.164 2015/04/24 22:32:37 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_gre.c,v 1.165 2015/05/02 17:18:03 rtr Exp $"); #include "opt_atalk.h" #include "opt_gre.h" @@ -418,9 +418,8 @@ static int gre_socreate(struct gre_softc *sc, const struct gre_soparm *sp, int *fdout) { int fd, rc; - struct mbuf *m; - struct sockaddr *sa; struct socket *so; + struct sockaddr_big sbig; sa_family_t af; int val; @@ -436,32 +435,21 @@ gre_socreate(struct gre_softc *sc, const if ((rc = fd_getsock(fd, &so)) != 0) return rc; - if ((m = getsombuf(so, MT_SONAME)) == NULL) { - rc = ENOBUFS; - goto out; - } - sa = mtod(m, struct sockaddr *); - sockaddr_copy(sa, MIN(MLEN, sizeof(sp->sp_src)), sstocsa(&sp->sp_src)); - m->m_len = sp->sp_src.ss_len; - - if ((rc = sobind(so, sa, curlwp)) != 0) { + memcpy(&sbig, &sp->sp_src, sizeof(sp->sp_src)); + if ((rc = sobind(so, (struct sockaddr *)&sbig, curlwp)) != 0) { GRE_DPRINTF(sc, "sobind failed\n"); goto out; } - sockaddr_copy(sa, MIN(MLEN, sizeof(sp->sp_dst)), sstocsa(&sp->sp_dst)); - m->m_len = sp->sp_dst.ss_len; - + memcpy(&sbig, &sp->sp_dst, sizeof(sp->sp_dst)); solock(so); - if ((rc = soconnect(so, m, curlwp)) != 0) { + if ((rc = soconnect(so, (struct sockaddr *)&sbig, curlwp)) != 0) { GRE_DPRINTF(sc, "soconnect failed\n"); sounlock(so); goto out; } sounlock(so); - m = NULL; - /* XXX convert to a (new) SOL_SOCKET call */ KASSERT(so->so_proto != NULL); rc = so_setsockopt(curlwp, so, IPPROTO_IP, IP_TTL, @@ -479,8 +467,6 @@ gre_socreate(struct gre_softc *sc, const rc = 0; } out: - m_freem(m); - if (rc != 0) fd_close(fd); else { Index: src/sys/net/link_proto.c diff -u src/sys/net/link_proto.c:1.27 src/sys/net/link_proto.c:1.28 --- src/sys/net/link_proto.c:1.27 Sun Apr 26 21:40:48 2015 +++ src/sys/net/link_proto.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: link_proto.c,v 1.27 2015/04/26 21:40:48 rtr Exp $ */ +/* $NetBSD: link_proto.c,v 1.28 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 1982, 1986, 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.27 2015/04/26 21:40:48 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.28 2015/05/02 17:18:03 rtr Exp $"); #include <sys/param.h> #include <sys/socket.h> @@ -53,7 +53,7 @@ static void link_detach(struct socket *) static int link_accept(struct socket *, struct sockaddr *); static int link_bind(struct socket *, struct sockaddr *, struct lwp *); static int link_listen(struct socket *, struct lwp *); -static int link_connect(struct socket *, struct mbuf *, struct lwp *); +static int link_connect(struct socket *, struct sockaddr *, struct lwp *); static int link_connect2(struct socket *, struct socket *); static int link_disconnect(struct socket *); static int link_shutdown(struct socket *); @@ -64,7 +64,7 @@ static int link_peeraddr(struct socket * static int link_sockaddr(struct socket *, struct sockaddr *); static int link_rcvd(struct socket *, int, struct lwp *); static int link_recvoob(struct socket *, struct mbuf *, int); -static int link_send(struct socket *, struct mbuf *, struct mbuf *, +static int link_send(struct socket *, struct mbuf *, struct sockaddr *, struct mbuf *, struct lwp *); static int link_sendoob(struct socket *, struct mbuf *, struct mbuf *); static int link_purgeif(struct socket *, struct ifnet *); @@ -287,7 +287,7 @@ link_listen(struct socket *so, struct lw } static int -link_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +link_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { KASSERT(solocked(so)); @@ -373,7 +373,7 @@ link_recvoob(struct socket *so, struct m } static int -link_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +link_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { KASSERT(solocked(so)); Index: src/sys/net/raw_cb.h diff -u src/sys/net/raw_cb.h:1.24 src/sys/net/raw_cb.h:1.25 --- src/sys/net/raw_cb.h:1.24 Fri Apr 24 22:32:37 2015 +++ src/sys/net/raw_cb.h Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_cb.h,v 1.24 2015/04/24 22:32:37 rtr Exp $ */ +/* $NetBSD: raw_cb.h,v 1.25 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -71,7 +71,7 @@ int raw_usrreq(struct socket *, void raw_setsockaddr(struct rawcb *, struct sockaddr *); void raw_setpeeraddr(struct rawcb *, struct sockaddr *); int raw_send(struct socket *, - struct mbuf *, struct mbuf *, struct mbuf *, struct lwp *); + struct mbuf *, struct sockaddr *, struct mbuf *, struct lwp *); #endif /* _KERNEL */ Index: src/sys/net/raw_usrreq.c diff -u src/sys/net/raw_usrreq.c:1.53 src/sys/net/raw_usrreq.c:1.54 --- src/sys/net/raw_usrreq.c:1.53 Fri Apr 24 22:32:37 2015 +++ src/sys/net/raw_usrreq.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_usrreq.c,v 1.53 2015/04/24 22:32:37 rtr Exp $ */ +/* $NetBSD: raw_usrreq.c,v 1.54 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.53 2015/04/24 22:32:37 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.54 2015/05/02 17:18:03 rtr Exp $"); #include <sys/param.h> #include <sys/mbuf.h> @@ -152,7 +152,7 @@ raw_setpeeraddr(struct rawcb *rp, struct } int -raw_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +raw_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct rawcb *rp = sotorawcb(so); Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.170 src/sys/net/rtsock.c:1.171 --- src/sys/net/rtsock.c:1.170 Sun Apr 26 21:40:48 2015 +++ src/sys/net/rtsock.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.170 2015/04/26 21:40:48 rtr Exp $ */ +/* $NetBSD: rtsock.c,v 1.171 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.170 2015/04/26 21:40:48 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.171 2015/05/02 17:18:03 rtr Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -255,7 +255,7 @@ COMPATNAME(route_listen)(struct socket * } static int -COMPATNAME(route_connect)(struct socket *so, struct mbuf *nam, struct lwp *l) +COMPATNAME(route_connect)(struct socket *so, struct sockaddr *nam, struct lwp *l) { KASSERT(solocked(so)); @@ -378,7 +378,7 @@ COMPATNAME(route_recvoob)(struct socket static int COMPATNAME(route_send)(struct socket *so, struct mbuf *m, - struct mbuf *nam, struct mbuf *control, struct lwp *l) + struct sockaddr *nam, struct mbuf *control, struct lwp *l) { int error = 0; int s; Index: src/sys/netatalk/ddp_usrreq.c diff -u src/sys/netatalk/ddp_usrreq.c:1.67 src/sys/netatalk/ddp_usrreq.c:1.68 --- src/sys/netatalk/ddp_usrreq.c:1.67 Sun Apr 26 21:40:49 2015 +++ src/sys/netatalk/ddp_usrreq.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: ddp_usrreq.c,v 1.67 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: ddp_usrreq.c,v 1.68 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (c) 1990,1991 Regents of The University of Michigan. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ddp_usrreq.c,v 1.67 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ddp_usrreq.c,v 1.68 2015/05/02 17:18:03 rtr Exp $"); #include "opt_mbuftrace.h" @@ -365,7 +365,7 @@ ddp_listen(struct socket *so, struct lwp } static int -ddp_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +ddp_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct ddpcb *ddp = sotoddpcb(so); int error = 0; @@ -376,9 +376,7 @@ ddp_connect(struct socket *so, struct mb if (ddp->ddp_fsat.sat_port != ATADDR_ANYPORT) return EISCONN; - if (nam->m_len != sizeof(struct sockaddr_at)) - return EINVAL; - error = at_pcbconnect(ddp, mtod(nam, struct sockaddr_at *)); + error = at_pcbconnect(ddp, (struct sockaddr_at *)nam); if (error == 0) soisconnected(so); @@ -479,7 +477,7 @@ ddp_recvoob(struct socket *so, struct mb } static int -ddp_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +ddp_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct ddpcb *ddp = sotoddpcb(so); @@ -493,9 +491,7 @@ ddp_send(struct socket *so, struct mbuf if (ddp->ddp_fsat.sat_port != ATADDR_ANYPORT) return EISCONN; s = splnet(); - if (nam->m_len != sizeof(struct sockaddr_at)) - return EINVAL; - error = at_pcbconnect(ddp, mtod(nam, struct sockaddr_at *)); + error = at_pcbconnect(ddp, (struct sockaddr_at *)nam); if (error) { splx(s); return error; Index: src/sys/netbt/hci_socket.c diff -u src/sys/netbt/hci_socket.c:1.43 src/sys/netbt/hci_socket.c:1.44 --- src/sys/netbt/hci_socket.c:1.43 Sun Apr 26 21:40:49 2015 +++ src/sys/netbt/hci_socket.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: hci_socket.c,v 1.43 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: hci_socket.c,v 1.44 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.43 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.44 2015/05/02 17:18:03 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -526,16 +526,15 @@ hci_listen(struct socket *so, struct lwp } static int -hci_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +hci_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct hci_pcb *pcb = so->so_pcb; - struct sockaddr_bt *sa; + struct sockaddr_bt *sa = (struct sockaddr_bt *)nam; KASSERT(solocked(so)); KASSERT(pcb != NULL); KASSERT(nam != NULL); - sa = mtod(nam, struct sockaddr_bt *); if (sa->bt_len != sizeof(struct sockaddr_bt)) return EINVAL; @@ -666,11 +665,11 @@ hci_recvoob(struct socket *so, struct mb } static int -hci_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +hci_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct hci_pcb *pcb = so->so_pcb; - struct sockaddr_bt * sa = NULL; + struct sockaddr_bt * sa = (struct sockaddr_bt *)nam; int err = 0; KASSERT(solocked(so)); @@ -680,8 +679,6 @@ hci_send(struct socket *so, struct mbuf m_freem(control); if (nam) { - sa = mtod(nam, struct sockaddr_bt *); - if (sa->bt_len != sizeof(struct sockaddr_bt)) { err = EINVAL; goto release; Index: src/sys/netbt/l2cap_socket.c diff -u src/sys/netbt/l2cap_socket.c:1.34 src/sys/netbt/l2cap_socket.c:1.35 --- src/sys/netbt/l2cap_socket.c:1.34 Sun Apr 26 21:40:49 2015 +++ src/sys/netbt/l2cap_socket.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: l2cap_socket.c,v 1.34 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: l2cap_socket.c,v 1.35 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.34 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.35 2015/05/02 17:18:03 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -165,10 +165,10 @@ l2cap_listen(struct socket *so, struct l } static int -l2cap_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +l2cap_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct l2cap_channel *pcb = so->so_pcb; - struct sockaddr_bt *sa; + struct sockaddr_bt *sa = (struct sockaddr_bt *)nam; KASSERT(solocked(so)); KASSERT(nam != NULL); @@ -176,7 +176,6 @@ l2cap_connect(struct socket *so, struct if (pcb == NULL) return EINVAL; - sa = mtod(nam, struct sockaddr_bt *); if (sa->bt_len != sizeof(struct sockaddr_bt)) return EINVAL; @@ -292,7 +291,7 @@ l2cap_recvoob(struct socket *so, struct } static int -l2cap_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +l2cap_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct l2cap_channel *pcb = so->so_pcb; Index: src/sys/netbt/rfcomm_socket.c diff -u src/sys/netbt/rfcomm_socket.c:1.36 src/sys/netbt/rfcomm_socket.c:1.37 --- src/sys/netbt/rfcomm_socket.c:1.36 Sun Apr 26 21:40:49 2015 +++ src/sys/netbt/rfcomm_socket.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: rfcomm_socket.c,v 1.36 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: rfcomm_socket.c,v 1.37 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.36 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.37 2015/05/02 17:18:03 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -173,10 +173,10 @@ rfcomm_listen(struct socket *so, struct } static int -rfcomm_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +rfcomm_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct rfcomm_dlc *pcb = so->so_pcb; - struct sockaddr_bt *sa; + struct sockaddr_bt *sa = (struct sockaddr_bt *)nam; KASSERT(solocked(so)); KASSERT(nam != NULL); @@ -184,7 +184,6 @@ rfcomm_connect(struct socket *so, struct if (pcb == NULL) return EINVAL; - sa = mtod(nam, struct sockaddr_bt *); if (sa->bt_len != sizeof(struct sockaddr_bt)) return EINVAL; @@ -307,7 +306,7 @@ rfcomm_recvoob(struct socket *so, struct } static int -rfcomm_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +rfcomm_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct rfcomm_dlc *pcb = so->so_pcb; Index: src/sys/netbt/sco_socket.c diff -u src/sys/netbt/sco_socket.c:1.36 src/sys/netbt/sco_socket.c:1.37 --- src/sys/netbt/sco_socket.c:1.36 Sun Apr 26 21:40:49 2015 +++ src/sys/netbt/sco_socket.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sco_socket.c,v 1.36 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: sco_socket.c,v 1.37 2015/05/02 17:18:03 rtr Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.36 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.37 2015/05/02 17:18:03 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -156,10 +156,10 @@ sco_listen(struct socket *so, struct lwp } static int -sco_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +sco_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct sco_pcb *pcb = so->so_pcb; - struct sockaddr_bt *sa; + struct sockaddr_bt *sa = (struct sockaddr_bt *)nam; KASSERT(solocked(so)); KASSERT(nam != NULL); @@ -167,7 +167,6 @@ sco_connect(struct socket *so, struct mb if (pcb == NULL) return EINVAL; - sa = mtod(nam, struct sockaddr_bt *); if (sa->bt_len != sizeof(struct sockaddr_bt)) return EINVAL; @@ -285,7 +284,7 @@ sco_recvoob(struct socket *so, struct mb } static int -sco_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +sco_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct sco_pcb *pcb = so->so_pcb; Index: src/sys/netinet/dccp_usrreq.c diff -u src/sys/netinet/dccp_usrreq.c:1.5 src/sys/netinet/dccp_usrreq.c:1.6 --- src/sys/netinet/dccp_usrreq.c:1.5 Mon Apr 27 02:59:44 2015 +++ src/sys/netinet/dccp_usrreq.c Sat May 2 17:18:03 2015 @@ -1,5 +1,5 @@ /* $KAME: dccp_usrreq.c,v 1.67 2005/11/03 16:05:04 nishida Exp $ */ -/* $NetBSD: dccp_usrreq.c,v 1.5 2015/04/27 02:59:44 ozaki-r Exp $ */ +/* $NetBSD: dccp_usrreq.c,v 1.6 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (c) 2003 Joacim Häggmark, Magnus Erixzon, Nils-Erik Mattsson @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dccp_usrreq.c,v 1.5 2015/04/27 02:59:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dccp_usrreq.c,v 1.6 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_dccp.h" @@ -1851,11 +1851,10 @@ dccp_bind(struct socket *so, struct sock * Called by the connect system call. */ static int -dccp_connect(struct socket *so, struct mbuf *m, struct lwp *l) +dccp_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct inpcb *inp; struct dccpcb *dp; - struct sockaddr *nam; int error; struct sockaddr_in *sin; char test[2]; @@ -1889,7 +1888,6 @@ dccp_connect(struct socket *so, struct m dccpstat.dccps_connattempt++; - nam = mtod(m, struct sockaddr *); sin = (struct sockaddr_in *)nam; if (sin->sin_family == AF_INET && IN_MULTICAST(ntohl(sin->sin_addr.s_addr))) { @@ -1897,7 +1895,7 @@ dccp_connect(struct socket *so, struct m goto bad; } - error = dccp_doconnect(so, m, l, 0); + error = dccp_doconnect(so, nam, l, 0); if (error != 0) goto bad; @@ -1931,7 +1929,8 @@ dccp_connect2(struct socket *so, struct * */ int -dccp_doconnect(struct socket *so, struct mbuf *m, struct lwp *l, int isipv6) +dccp_doconnect(struct socket *so, struct sockaddr *nam, + struct lwp *l, int isipv6) { struct inpcb *inp; #ifdef INET6 @@ -1974,11 +1973,11 @@ dccp_doconnect(struct socket *so, struct #ifdef INET6 if (isipv6) { - error = in6_pcbconnect(in6p, m, l); + error = in6_pcbconnect(in6p, (struct sockaddr_in6 *)nam, l); DCCP_DEBUG((LOG_INFO, "in6_pcbconnect=%d\n",error)); } else #endif - error = in_pcbconnect(inp, m, l); + error = in_pcbconnect(inp, (struct sockaddr_in *)nam, l); if (error) { DCCP_DEBUG((LOG_INFO, "in_pcbconnect=%d\n",error)); return error; @@ -2112,12 +2111,11 @@ dccp_disconnect2(struct dccpcb *dp) } int -dccp_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +dccp_send(struct socket *so, struct mbuf *m, struct sockaddr *addr, struct mbuf *control, struct lwp *l) { struct inpcb *inp; struct dccpcb *dp; - struct sockaddr *addr; int error = 0; int isipv6 = 0; @@ -2131,11 +2129,6 @@ dccp_send(struct socket *so, struct mbuf return EINVAL; } - if (nam == 0) - addr = NULL; - else - addr = mtod(nam, struct sockaddr *); - #ifdef INET6 isipv6 = addr && addr->sa_family == AF_INET6; #endif @@ -2197,7 +2190,7 @@ dccp_send(struct socket *so, struct mbuf dp->pktcnt ++; if (addr && dp->state == DCCPS_CLOSED) { - error = dccp_doconnect(so, nam, l, isipv6); + error = dccp_doconnect(so, addr, l, isipv6); if (error) goto out; } Index: src/sys/netinet/dccp_var.h diff -u src/sys/netinet/dccp_var.h:1.1 src/sys/netinet/dccp_var.h:1.2 --- src/sys/netinet/dccp_var.h:1.1 Tue Feb 10 19:11:52 2015 +++ src/sys/netinet/dccp_var.h Sat May 2 17:18:03 2015 @@ -1,5 +1,5 @@ /* $KAME: dccp_var.h,v 1.29 2005/11/03 14:59:28 nishida Exp $ */ -/* $NetBSD: dccp_var.h,v 1.1 2015/02/10 19:11:52 rjs Exp $ */ +/* $NetBSD: dccp_var.h,v 1.2 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (c) 2003 Joacim Häggmark, Magnus Erixzon, Nils-Erik Mattsson @@ -306,14 +306,14 @@ struct dccpcb * dccp_newdccpcb(int, void *); int dccp_shutdown(struct socket *); int dccp_output(struct dccpcb *, u_int8_t); -int dccp_doconnect(struct socket *, struct mbuf *, struct lwp *, int); +int dccp_doconnect(struct socket *, struct sockaddr *, struct lwp *, int); int dccp_add_option(struct dccpcb *, u_int8_t, char *, u_int8_t); int dccp_add_feature(struct dccpcb *, u_int8_t, u_int8_t, char *, u_int8_t); int dccp_detach(struct socket *); int dccp_attach(struct socket *, int); int dccp_abort(struct socket *); int dccp_disconnect(struct socket *); -int dccp_send(struct socket *, struct mbuf *, struct mbuf *, +int dccp_send(struct socket *, struct mbuf *, struct sockaddr *, struct mbuf *, struct lwp *); void dccp_retrans_t(void *); void dccp_connect_t(void *); Index: src/sys/netinet/in_pcb.c diff -u src/sys/netinet/in_pcb.c:1.159 src/sys/netinet/in_pcb.c:1.160 --- src/sys/netinet/in_pcb.c:1.159 Sat May 2 14:41:32 2015 +++ src/sys/netinet/in_pcb.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: in_pcb.c,v 1.159 2015/05/02 14:41:32 roy Exp $ */ +/* $NetBSD: in_pcb.c,v 1.160 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -93,7 +93,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in_pcb.c,v 1.159 2015/05/02 14:41:32 roy Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in_pcb.c,v 1.160 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -443,26 +443,38 @@ in_pcbbind(void *v, struct sockaddr_in * } /* + * adapter function that accepts nam as mbuf for in_pcbconnect() + */ +int +in_pcbconnect_m(void *v, struct mbuf *nam, struct lwp *l) +{ + struct sockaddr_in *sin = mtod(nam, struct sockaddr_in *); + + if (sizeof (*sin) != nam->m_len) { + return EINVAL; + } + + return in_pcbconnect(v, sin, l); +} + +/* * Connect from a socket to a specified address. * Both address and port must be specified in argument sin. * If don't have a local address for this socket yet, * then pick one. */ int -in_pcbconnect(void *v, struct mbuf *nam, struct lwp *l) +in_pcbconnect(void *v, struct sockaddr_in *sin, struct lwp *l) { struct inpcb *inp = v; struct in_ifaddr *ia = NULL; struct sockaddr_in *ifaddr = NULL; - struct sockaddr_in *sin = mtod(nam, struct sockaddr_in *); vestigial_inpcb_t vestige; int error; if (inp->inp_af != AF_INET) return (EINVAL); - if (nam->m_len != sizeof (*sin)) - return (EINVAL); if (sin->sin_len != sizeof (*sin)) return (EINVAL); if (sin->sin_family != AF_INET) Index: src/sys/netinet/in_pcb.h diff -u src/sys/netinet/in_pcb.h:1.57 src/sys/netinet/in_pcb.h:1.58 --- src/sys/netinet/in_pcb.h:1.57 Fri Apr 24 22:32:37 2015 +++ src/sys/netinet/in_pcb.h Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: in_pcb.h,v 1.57 2015/04/24 22:32:37 rtr Exp $ */ +/* $NetBSD: in_pcb.h,v 1.58 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -132,7 +132,8 @@ struct inpcb { void in_losing(struct inpcb *); int in_pcballoc(struct socket *, void *); int in_pcbbind(void *, struct sockaddr_in *, struct lwp *); -int in_pcbconnect(void *, struct mbuf *, struct lwp *); +int in_pcbconnect(void *, struct sockaddr_in *, struct lwp *); +int in_pcbconnect_m(void *, struct mbuf *, struct lwp *); void in_pcbdetach(void *); void in_pcbdisconnect(void *); void in_pcbinit(struct inpcbtable *, int, int); Index: src/sys/netinet/raw_ip.c diff -u src/sys/netinet/raw_ip.c:1.151 src/sys/netinet/raw_ip.c:1.152 --- src/sys/netinet/raw_ip.c:1.151 Sat May 2 14:41:32 2015 +++ src/sys/netinet/raw_ip.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_ip.c,v 1.151 2015/05/02 14:41:32 roy Exp $ */ +/* $NetBSD: raw_ip.c,v 1.152 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.151 2015/05/02 14:41:32 roy Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.152 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_compat_netbsd.h" @@ -607,7 +607,7 @@ rip_listen(struct socket *so, struct lwp } static int -rip_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +rip_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct inpcb *inp = sotoinpcb(so); int error = 0; @@ -618,9 +618,7 @@ rip_connect(struct socket *so, struct mb KASSERT(nam != NULL); s = splsoftnet(); - if (nam->m_len != sizeof(struct sockaddr_in)) - return EINVAL; - error = rip_connect_pcb(inp, mtod(nam, struct sockaddr_in *)); + error = rip_connect_pcb(inp, (struct sockaddr_in *)nam); if (! error) soisconnected(so); splx(s); @@ -744,7 +742,7 @@ rip_recvoob(struct socket *so, struct mb } static int -rip_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +rip_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct inpcb *inp = sotoinpcb(so); @@ -771,9 +769,7 @@ rip_send(struct socket *so, struct mbuf error = EISCONN; goto die; } - if (nam->m_len != sizeof(struct sockaddr_in)) - return EINVAL; - error = rip_connect_pcb(inp, mtod(nam, struct sockaddr_in *)); + error = rip_connect_pcb(inp, (struct sockaddr_in *)nam); if (error) { die: m_freem(m); Index: src/sys/netinet/tcp_input.c diff -u src/sys/netinet/tcp_input.c:1.338 src/sys/netinet/tcp_input.c:1.339 --- src/sys/netinet/tcp_input.c:1.338 Mon Apr 27 02:59:44 2015 +++ src/sys/netinet/tcp_input.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tcp_input.c,v 1.338 2015/04/27 02:59:44 ozaki-r Exp $ */ +/* $NetBSD: tcp_input.c,v 1.339 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -148,7 +148,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.338 2015/04/27 02:59:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.339 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -4076,7 +4076,7 @@ syn_cache_get(struct sockaddr *src, stru am->m_len = src->sa_len; bcopy(src, mtod(am, void *), src->sa_len); if (inp) { - if (in_pcbconnect(inp, am, &lwp0)) { + if (in_pcbconnect_m(inp, am, &lwp0)) { (void) m_free(am); goto resetandabort; } @@ -4097,7 +4097,7 @@ syn_cache_get(struct sockaddr *src, stru &sin6->sin6_addr.s6_addr32[3], sizeof(sin6->sin6_addr.s6_addr32[3])); } - if (in6_pcbconnect(in6p, am, NULL)) { + if (in6_pcbconnect_m(in6p, am, NULL)) { (void) m_free(am); goto resetandabort; } Index: src/sys/netinet/tcp_usrreq.c diff -u src/sys/netinet/tcp_usrreq.c:1.207 src/sys/netinet/tcp_usrreq.c:1.208 --- src/sys/netinet/tcp_usrreq.c:1.207 Sun Apr 26 21:40:49 2015 +++ src/sys/netinet/tcp_usrreq.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tcp_usrreq.c,v 1.207 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: tcp_usrreq.c,v 1.208 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -99,7 +99,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.207 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.208 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_tcp_debug.h" @@ -765,7 +765,7 @@ release: } static int -tcp_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +tcp_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct inpcb *inp = NULL; struct in6pcb *in6p = NULL; @@ -794,7 +794,7 @@ tcp_connect(struct socket *so, struct mb if (error) goto release; } - error = in_pcbconnect(inp, nam, l); + error = in_pcbconnect(inp, (struct sockaddr_in *)nam, l); } #endif #ifdef INET6 @@ -804,7 +804,7 @@ tcp_connect(struct socket *so, struct mb if (error) goto release; } - error = in6_pcbconnect(in6p, nam, l); + error = in6_pcbconnect(in6p, (struct sockaddr_in6 *)nam, l); if (!error) { /* mapped addr case */ if (IN6_IS_ADDR_V4MAPPED(&in6p->in6p_faddr)) @@ -1125,7 +1125,7 @@ tcp_recvoob(struct socket *so, struct mb } static int -tcp_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +tcp_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct inpcb *inp = NULL; Index: src/sys/netinet/udp_usrreq.c diff -u src/sys/netinet/udp_usrreq.c:1.220 src/sys/netinet/udp_usrreq.c:1.221 --- src/sys/netinet/udp_usrreq.c:1.220 Sun Apr 26 21:40:49 2015 +++ src/sys/netinet/udp_usrreq.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: udp_usrreq.c,v 1.220 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: udp_usrreq.c,v 1.221 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.220 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.221 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_compat_netbsd.h" @@ -932,7 +932,7 @@ udp_listen(struct socket *so, struct lwp } static int -udp_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +udp_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct inpcb *inp = sotoinpcb(so); int error = 0; @@ -943,7 +943,7 @@ udp_connect(struct socket *so, struct mb KASSERT(nam != NULL); s = splsoftnet(); - error = in_pcbconnect(inp, nam, l); + error = in_pcbconnect(inp, (struct sockaddr_in *)nam, l); if (! error) soisconnected(so); splx(s); @@ -1066,7 +1066,7 @@ udp_recvoob(struct socket *so, struct mb } static int -udp_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +udp_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct inpcb *inp = sotoinpcb(so); @@ -1093,7 +1093,7 @@ udp_send(struct socket *so, struct mbuf error = EISCONN; goto die; } - error = in_pcbconnect(inp, nam, l); + error = in_pcbconnect(inp, (struct sockaddr_in *)nam, l); if (error) goto die; } else { Index: src/sys/netinet6/dccp6_usrreq.c diff -u src/sys/netinet6/dccp6_usrreq.c:1.5 src/sys/netinet6/dccp6_usrreq.c:1.6 --- src/sys/netinet6/dccp6_usrreq.c:1.5 Sun Apr 26 21:40:49 2015 +++ src/sys/netinet6/dccp6_usrreq.c Sat May 2 17:18:03 2015 @@ -1,5 +1,5 @@ /* $KAME: dccp6_usrreq.c,v 1.13 2005/07/27 08:42:56 nishida Exp $ */ -/* $NetBSD: dccp6_usrreq.c,v 1.5 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: dccp6_usrreq.c,v 1.6 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (C) 2003 WIDE Project. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dccp6_usrreq.c,v 1.5 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dccp6_usrreq.c,v 1.6 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_dccp.h" @@ -143,13 +143,12 @@ dccp6_bind(struct socket *so, struct soc } int -dccp6_connect(struct socket *so, struct mbuf *m, struct lwp *l) +dccp6_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct in6pcb *in6p; struct dccpcb *dp; int error; struct sockaddr_in6 *sin6; - struct sockaddr *nam; char test[2]; DCCP_DEBUG((LOG_INFO, "Entering dccp6_connect!\n")); @@ -187,7 +186,6 @@ dccp6_connect(struct socket *so, struct dp->who = DCCP_CLIENT; dp->seq_snd = (((u_int64_t)random() << 32) | random()) % 281474976710656LL; - nam = mtod(m, struct sockaddr *); sin6 = (struct sockaddr_in6 *)nam; if (sin6->sin6_family == AF_INET6 && IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) { @@ -198,7 +196,7 @@ dccp6_connect(struct socket *so, struct dp->inp_vflag &= ~INP_IPV4; dp->inp_vflag |= INP_IPV6; - error = dccp_doconnect(so, m, l, 1); + error = dccp_doconnect(so, nam, l, 1); if (error != 0) goto bad; @@ -407,7 +405,7 @@ dccp6_rcvd(struct socket *so, int flags, } static int -dccp6_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +dccp6_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { return dccp_send(so, m, nam, control, l); Index: src/sys/netinet6/dccp6_var.h diff -u src/sys/netinet6/dccp6_var.h:1.3 src/sys/netinet6/dccp6_var.h:1.4 --- src/sys/netinet6/dccp6_var.h:1.3 Sat Apr 25 14:56:05 2015 +++ src/sys/netinet6/dccp6_var.h Sat May 2 17:18:03 2015 @@ -1,5 +1,5 @@ /* $KAME: dccp6_var.h,v 1.3 2003/11/18 04:55:43 ono Exp $ */ -/* $NetBSD: dccp6_var.h,v 1.3 2015/04/25 14:56:05 rtr Exp $ */ +/* $NetBSD: dccp6_var.h,v 1.4 2015/05/02 17:18:03 rtr Exp $ */ /* * Copyright (c) 2003 Joacim Häggmark @@ -45,7 +45,7 @@ int dccp6_usrreq(struct socket *, int, s struct mbuf *, struct lwp *); int dccp6_bind(struct socket *, struct sockaddr *, struct lwp *); int dccp6_listen(struct socket *, struct lwp *); -int dccp6_connect(struct socket *, struct mbuf *, struct lwp *); +int dccp6_connect(struct socket *, struct sockaddr *, struct lwp *); int dccp6_accept(struct socket *, struct sockaddr *); #endif Index: src/sys/netinet6/in6_pcb.c diff -u src/sys/netinet6/in6_pcb.c:1.139 src/sys/netinet6/in6_pcb.c:1.140 --- src/sys/netinet6/in6_pcb.c:1.139 Mon Apr 27 10:14:44 2015 +++ src/sys/netinet6/in6_pcb.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_pcb.c,v 1.139 2015/04/27 10:14:44 ozaki-r Exp $ */ +/* $NetBSD: in6_pcb.c,v 1.140 2015/05/02 17:18:03 rtr Exp $ */ /* $KAME: in6_pcb.c,v 1.84 2001/02/08 18:02:08 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_pcb.c,v 1.139 2015/04/27 10:14:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_pcb.c,v 1.140 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -418,17 +418,31 @@ in6_pcbbind(void *v, struct sockaddr_in6 } /* + * adapter function that accepts nam as mbuf for in6_pcbconnect + */ +int +in6_pcbconnect_m(void *v, struct mbuf *nam, struct lwp *l) +{ + struct sockaddr_in6 *sin6 = mtod(nam, struct sockaddr_in6 *); + + if (sizeof (*sin6) != nam->m_len) { + return EINVAL; + } + + return in6_pcbconnect(v, sin6, l); +} + +/* * Connect from a socket to a specified address. * Both address and port must be specified in argument sin6. * If don't have a local address for this socket yet, * then pick one. */ int -in6_pcbconnect(void *v, struct mbuf *nam, struct lwp *l) +in6_pcbconnect(void *v, struct sockaddr_in6 *sin6, struct lwp *l) { struct in6pcb *in6p = v; struct in6_addr *in6a = NULL; - struct sockaddr_in6 *sin6 = mtod(nam, struct sockaddr_in6 *); struct ifnet *ifp = NULL; /* outgoing interface */ int error = 0; int scope_ambiguous = 0; @@ -443,8 +457,6 @@ in6_pcbconnect(void *v, struct mbuf *nam if (in6p->in6p_af != AF_INET6) return (EINVAL); - if (nam->m_len != sizeof(*sin6)) - return (EINVAL); if (sin6->sin6_len != sizeof(*sin6)) return (EINVAL); if (sin6->sin6_family != AF_INET6) Index: src/sys/netinet6/raw_ip6.c diff -u src/sys/netinet6/raw_ip6.c:1.139 src/sys/netinet6/raw_ip6.c:1.140 --- src/sys/netinet6/raw_ip6.c:1.139 Sun Apr 26 21:40:49 2015 +++ src/sys/netinet6/raw_ip6.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_ip6.c,v 1.139 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: raw_ip6.c,v 1.140 2015/05/02 17:18:03 rtr Exp $ */ /* $KAME: raw_ip6.c,v 1.82 2001/07/23 18:57:56 jinmei Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: raw_ip6.c,v 1.139 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_ip6.c,v 1.140 2015/05/02 17:18:03 rtr Exp $"); #include "opt_ipsec.h" @@ -698,10 +698,10 @@ rip6_listen(struct socket *so, struct lw } static int -rip6_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +rip6_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct in6pcb *in6p = sotoin6pcb(so); - struct sockaddr_in6 *addr; + struct sockaddr_in6 *addr = (struct sockaddr_in6 *)nam; struct in6_addr *in6a = NULL; struct ifnet *ifp = NULL; int scope_ambiguous = 0; @@ -711,10 +711,6 @@ rip6_connect(struct socket *so, struct m KASSERT(in6p != NULL); KASSERT(nam != NULL); - addr = mtod(nam, struct sockaddr_in6 *); - - if (nam->m_len != sizeof(*addr)) - return EINVAL; if (IFNET_EMPTY()) return EADDRNOTAVAIL; if (addr->sin6_family != AF_INET6) @@ -853,7 +849,7 @@ rip6_recvoob(struct socket *so, struct m } static int -rip6_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +rip6_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct in6pcb *in6p = sotoin6pcb(so); @@ -884,12 +880,7 @@ rip6_send(struct socket *so, struct mbuf error = ENOTCONN; goto release; } - if (nam->m_len != sizeof(tmp)) { - error = EINVAL; - goto release; - } - - tmp = *mtod(nam, struct sockaddr_in6 *); + tmp = *(struct sockaddr_in6 *)nam; dst = &tmp; if (dst->sin6_family != AF_INET6) { Index: src/sys/netinet6/in6_pcb.h diff -u src/sys/netinet6/in6_pcb.h:1.44 src/sys/netinet6/in6_pcb.h:1.45 --- src/sys/netinet6/in6_pcb.h:1.44 Mon Apr 27 02:59:44 2015 +++ src/sys/netinet6/in6_pcb.h Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_pcb.h,v 1.44 2015/04/27 02:59:44 ozaki-r Exp $ */ +/* $NetBSD: in6_pcb.h,v 1.45 2015/05/02 17:18:03 rtr Exp $ */ /* $KAME: in6_pcb.h,v 1.45 2001/02/09 05:59:46 itojun Exp $ */ /* @@ -157,7 +157,8 @@ void in6_losing(struct in6pcb *); void in6_pcbinit(struct inpcbtable *, int, int); int in6_pcballoc(struct socket *, void *); int in6_pcbbind(void *, struct sockaddr_in6 *, struct lwp *); -int in6_pcbconnect(void *, struct mbuf *, struct lwp *); +int in6_pcbconnect(void *, struct sockaddr_in6 *, struct lwp *); +int in6_pcbconnect_m(void *, struct mbuf *, struct lwp *); void in6_pcbdetach(struct in6pcb *); void in6_pcbdisconnect(struct in6pcb *); struct in6pcb *in6_pcblookup_port(struct inpcbtable *, struct in6_addr *, Index: src/sys/netinet6/udp6_output.c diff -u src/sys/netinet6/udp6_output.c:1.48 src/sys/netinet6/udp6_output.c:1.49 --- src/sys/netinet6/udp6_output.c:1.48 Mon Apr 27 02:59:44 2015 +++ src/sys/netinet6/udp6_output.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: udp6_output.c,v 1.48 2015/04/27 02:59:44 ozaki-r Exp $ */ +/* $NetBSD: udp6_output.c,v 1.49 2015/05/02 17:18:03 rtr Exp $ */ /* $KAME: udp6_output.c,v 1.43 2001/10/15 09:19:52 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: udp6_output.c,v 1.48 2015/04/27 02:59:44 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp6_output.c,v 1.49 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" @@ -111,7 +111,7 @@ __KERNEL_RCSID(0, "$NetBSD: udp6_output. int udp6_output(struct in6pcb * const in6p, struct mbuf *m, - struct mbuf * const addr6, struct mbuf * const control, + struct sockaddr_in6 * const addr6, struct mbuf * const control, struct lwp * const l) { u_int32_t ulen = m->m_pkthdr.len; @@ -136,11 +136,7 @@ udp6_output(struct in6pcb * const in6p, struct sockaddr_in6 tmp; if (addr6) { - if (addr6->m_len != sizeof(*sin6)) { - error = EINVAL; - goto release; - } - sin6 = mtod(addr6, struct sockaddr_in6 *); + sin6 = addr6; if (sin6->sin6_family != AF_INET6) { error = EAFNOSUPPORT; goto release; Index: src/sys/netinet6/udp6_usrreq.c diff -u src/sys/netinet6/udp6_usrreq.c:1.119 src/sys/netinet6/udp6_usrreq.c:1.120 --- src/sys/netinet6/udp6_usrreq.c:1.119 Sun Apr 26 21:40:49 2015 +++ src/sys/netinet6/udp6_usrreq.c Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: udp6_usrreq.c,v 1.119 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: udp6_usrreq.c,v 1.120 2015/05/02 17:18:03 rtr Exp $ */ /* $KAME: udp6_usrreq.c,v 1.86 2001/05/27 17:33:00 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.119 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.120 2015/05/02 17:18:03 rtr Exp $"); #include "opt_inet.h" #include "opt_inet_csum.h" @@ -721,7 +721,7 @@ udp6_listen(struct socket *so, struct lw } static int -udp6_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +udp6_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { struct in6pcb *in6p = sotoin6pcb(so); int error = 0; @@ -733,7 +733,7 @@ udp6_connect(struct socket *so, struct m if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr)) return EISCONN; s = splsoftnet(); - error = in6_pcbconnect(in6p, nam, l); + error = in6_pcbconnect(in6p, (struct sockaddr_in6 *)nam, l); splx(s); if (error == 0) soisconnected(so); @@ -863,7 +863,7 @@ udp6_recvoob(struct socket *so, struct m } static int -udp6_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +udp6_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { struct in6pcb *in6p = sotoin6pcb(so); @@ -875,7 +875,7 @@ udp6_send(struct socket *so, struct mbuf KASSERT(m != NULL); s = splsoftnet(); - error = udp6_output(in6p, m, nam, control, l); + error = udp6_output(in6p, m, (struct sockaddr_in6 *)nam, control, l); splx(s); return error; Index: src/sys/netinet6/udp6_var.h diff -u src/sys/netinet6/udp6_var.h:1.27 src/sys/netinet6/udp6_var.h:1.28 --- src/sys/netinet6/udp6_var.h:1.27 Thu May 22 22:56:53 2014 +++ src/sys/netinet6/udp6_var.h Sat May 2 17:18:03 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: udp6_var.h,v 1.27 2014/05/22 22:56:53 rmind Exp $ */ +/* $NetBSD: udp6_var.h,v 1.28 2015/05/02 17:18:03 rtr Exp $ */ /* $KAME: udp6_var.h,v 1.11 2000/06/05 00:14:31 itojun Exp $ */ /* @@ -106,7 +106,7 @@ void *udp6_ctlinput(int, const struct so int udp6_ctloutput(int, struct socket *, struct sockopt *); void udp6_init(void); int udp6_input(struct mbuf **, int *, int); -int udp6_output(struct in6pcb *, struct mbuf *, struct mbuf *, +int udp6_output(struct in6pcb *, struct mbuf *, struct sockaddr_in6 *, struct mbuf *, struct lwp *); int udp6_sysctl(int *, u_int, void *, size_t *, void *, size_t); int udp6_usrreq(struct socket *, int, struct mbuf *, struct mbuf *, Index: src/sys/netipsec/keysock.c diff -u src/sys/netipsec/keysock.c:1.47 src/sys/netipsec/keysock.c:1.48 --- src/sys/netipsec/keysock.c:1.47 Sun Apr 26 21:40:49 2015 +++ src/sys/netipsec/keysock.c Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: keysock.c,v 1.47 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: keysock.c,v 1.48 2015/05/02 17:18:04 rtr Exp $ */ /* $FreeBSD: src/sys/netipsec/keysock.c,v 1.3.2.1 2003/01/24 05:11:36 sam Exp $ */ /* $KAME: keysock.c,v 1.25 2001/08/13 20:07:41 itojun Exp $ */ @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.47 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.48 2015/05/02 17:18:04 rtr Exp $"); /* This code has derived from sys/net/rtsock.c on FreeBSD2.2.5 */ @@ -509,7 +509,7 @@ key_listen(struct socket *so, struct lwp } static int -key_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +key_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { KASSERT(solocked(so)); @@ -631,7 +631,7 @@ key_recvoob(struct socket *so, struct mb } static int -key_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +key_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { int error = 0; Index: src/sys/netmpls/mpls_proto.c diff -u src/sys/netmpls/mpls_proto.c:1.27 src/sys/netmpls/mpls_proto.c:1.28 --- src/sys/netmpls/mpls_proto.c:1.27 Sun Apr 26 21:40:49 2015 +++ src/sys/netmpls/mpls_proto.c Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: mpls_proto.c,v 1.27 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: mpls_proto.c,v 1.28 2015/05/02 17:18:04 rtr Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.27 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.28 2015/05/02 17:18:04 rtr Exp $"); #include "opt_inet.h" #include "opt_mbuftrace.h" @@ -119,7 +119,7 @@ mpls_listen(struct socket *so, struct lw } static int -mpls_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +mpls_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { KASSERT(solocked(so)); @@ -205,7 +205,7 @@ mpls_recvoob(struct socket *so, struct m } static int -mpls_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +mpls_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct lwp *l) { KASSERT(solocked(so)); Index: src/sys/netnatm/natm.c diff -u src/sys/netnatm/natm.c:1.48 src/sys/netnatm/natm.c:1.49 --- src/sys/netnatm/natm.c:1.48 Sun Apr 26 21:40:49 2015 +++ src/sys/netnatm/natm.c Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: natm.c,v 1.48 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: natm.c,v 1.49 2015/05/02 17:18:04 rtr Exp $ */ /* * Copyright (c) 1996 Charles D. Cranor and Washington University. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: natm.c,v 1.48 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: natm.c,v 1.49 2015/05/02 17:18:04 rtr Exp $"); #include <sys/param.h> #include <sys/kmem.h> @@ -122,11 +122,11 @@ natm_listen(struct socket *so, struct lw } static int -natm_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +natm_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { int error = 0, s2; struct natmpcb *npcb; - struct sockaddr_natm *snatm; + struct sockaddr_natm *snatm = (struct sockaddr_natm *)nam; struct atm_pseudoioctl api; struct atm_pseudohdr *aph; struct ifnet *ifp; @@ -138,9 +138,6 @@ natm_connect(struct socket *so, struct m * validate nam and npcb */ - if (nam->m_len != sizeof(*snatm)) - return EINVAL; - snatm = mtod(nam, struct sockaddr_natm *); if (snatm->snatm_len != sizeof(*snatm) || (npcb->npcb_flags & NPCB_FREE) == 0) return EINVAL; @@ -342,7 +339,7 @@ natm_recvoob(struct socket *so, struct m } static int -natm_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +natm_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, struct mbuf *control) { struct natmpcb *npcb = (struct natmpcb *) so->so_pcb; Index: src/sys/netsmb/smb_trantcp.c diff -u src/sys/netsmb/smb_trantcp.c:1.47 src/sys/netsmb/smb_trantcp.c:1.48 --- src/sys/netsmb/smb_trantcp.c:1.47 Mon May 19 02:51:25 2014 +++ src/sys/netsmb/smb_trantcp.c Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: smb_trantcp.c,v 1.47 2014/05/19 02:51:25 rmind Exp $ */ +/* $NetBSD: smb_trantcp.c,v 1.48 2015/05/02 17:18:04 rtr Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: smb_trantcp.c,v 1.47 2014/05/19 02:51:25 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: smb_trantcp.c,v 1.48 2015/05/02 17:18:04 rtr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -185,7 +185,7 @@ nb_connect_in(struct nbpcb *nbp, struct *mtod(m, struct sockaddr *) = *(struct sockaddr *)to; m->m_len = sizeof(struct sockaddr); solock(so); - error = soconnect(so, m, l); + error = soconnect(so, mtod(m, struct sockaddr*), l); m_free(m); if (error) { sounlock(so); Index: src/sys/nfs/nfs_socket.c diff -u src/sys/nfs/nfs_socket.c:1.194 src/sys/nfs/nfs_socket.c:1.195 --- src/sys/nfs/nfs_socket.c:1.194 Fri Apr 3 20:01:07 2015 +++ src/sys/nfs/nfs_socket.c Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: nfs_socket.c,v 1.194 2015/04/03 20:01:07 rtr Exp $ */ +/* $NetBSD: nfs_socket.c,v 1.195 2015/05/02 17:18:04 rtr Exp $ */ /* * Copyright (c) 1989, 1991, 1993, 1995 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nfs_socket.c,v 1.194 2015/04/03 20:01:07 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nfs_socket.c,v 1.195 2015/05/02 17:18:04 rtr Exp $"); #ifdef _KERNEL_OPT #include "opt_nfs.h" @@ -243,7 +243,7 @@ nfs_connect(struct nfsmount *nmp, struct goto bad; } } else { - error = soconnect(so, nmp->nm_nam, l); + error = soconnect(so, mtod(nmp->nm_nam, struct sockaddr *), l); if (error) { sounlock(so); goto bad; @@ -800,7 +800,8 @@ nfs_timer(void *arg) m, NULL, NULL, NULL); else error = (*so->so_proto->pr_usrreqs->pr_send)(so, - m, nmp->nm_nam, NULL, NULL); + m, mtod(nmp->nm_nam, struct sockaddr *), + NULL, NULL); if (error) { if (NFSIGNORE_SOERROR(nmp->nm_soflags, error)) { #ifdef DEBUG Index: src/sys/rump/net/lib/libsockin/sockin.c diff -u src/sys/rump/net/lib/libsockin/sockin.c:1.61 src/sys/rump/net/lib/libsockin/sockin.c:1.62 --- src/sys/rump/net/lib/libsockin/sockin.c:1.61 Sun Apr 26 21:40:49 2015 +++ src/sys/rump/net/lib/libsockin/sockin.c Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sockin.c,v 1.61 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: sockin.c,v 1.62 2015/05/02 17:18:04 rtr Exp $ */ /* * Copyright (c) 2008, 2009 Antti Kantee. All Rights Reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.61 2015/04/26 21:40:49 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.62 2015/05/02 17:18:04 rtr Exp $"); #include <sys/param.h> #include <sys/condvar.h> @@ -72,7 +72,7 @@ static int sockin_accept(struct socket * static int sockin_connect2(struct socket *, struct socket *); static int sockin_bind(struct socket *, struct sockaddr *, struct lwp *); static int sockin_listen(struct socket *, struct lwp *); -static int sockin_connect(struct socket *, struct mbuf *, struct lwp *); +static int sockin_connect(struct socket *, struct sockaddr *, struct lwp *); static int sockin_disconnect(struct socket *); static int sockin_shutdown(struct socket *); static int sockin_abort(struct socket *); @@ -82,7 +82,7 @@ static int sockin_peeraddr(struct socket static int sockin_sockaddr(struct socket *, struct sockaddr *); static int sockin_rcvd(struct socket *, int, struct lwp *); static int sockin_recvoob(struct socket *, struct mbuf *, int); -static int sockin_send(struct socket *, struct mbuf *, struct mbuf *, +static int sockin_send(struct socket *, struct mbuf *, struct sockaddr *, struct mbuf *, struct lwp *); static int sockin_sendoob(struct socket *, struct mbuf *, struct mbuf *); static int sockin_purgeif(struct socket *, struct ifnet *); @@ -508,15 +508,14 @@ sockin_listen(struct socket *so, struct } static int -sockin_connect(struct socket *so, struct mbuf *nam, struct lwp *l) +sockin_connect(struct socket *so, struct sockaddr *nam, struct lwp *l) { int error = 0; KASSERT(solocked(so)); KASSERT(nam != NULL); - error = rumpcomp_sockin_connect(SO2S(so), - mtod(nam, struct sockaddr *), nam->m_len); + error = rumpcomp_sockin_connect(SO2S(so), nam, nam->sa_len); if (error == 0) soisconnected(so); @@ -617,10 +616,9 @@ sockin_recvoob(struct socket *so, struct } static int -sockin_send(struct socket *so, struct mbuf *m, struct mbuf *nam, +sockin_send(struct socket *so, struct mbuf *m, struct sockaddr *saddr, struct mbuf *control, struct lwp *l) { - struct sockaddr *saddr; struct msghdr mhdr; size_t iov_max, i; struct iovec iov_buf[32], *iov; @@ -655,8 +653,7 @@ sockin_send(struct socket *so, struct mb mhdr.msg_iovlen = i; s = SO2S(so); - if (nam != NULL) { - saddr = mtod(nam, struct sockaddr *); + if (saddr != NULL) { mhdr.msg_name = saddr; mhdr.msg_namelen = saddr->sa_len; } Index: src/sys/sys/param.h diff -u src/sys/sys/param.h:1.476 src/sys/sys/param.h:1.477 --- src/sys/sys/param.h:1.476 Sat May 2 08:00:08 2015 +++ src/sys/sys/param.h Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: param.h,v 1.476 2015/05/02 08:00:08 mlelstv Exp $ */ +/* $NetBSD: param.h,v 1.477 2015/05/02 17:18:04 rtr Exp $ */ /*- * Copyright (c) 1982, 1986, 1989, 1993 @@ -63,7 +63,7 @@ * 2.99.9 (299000900) */ -#define __NetBSD_Version__ 799001400 /* NetBSD 7.99.14 */ +#define __NetBSD_Version__ 799001500 /* NetBSD 7.99.15 */ #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \ (m) * 1000000) + (p) * 100) <= __NetBSD_Version__) Index: src/sys/sys/protosw.h diff -u src/sys/sys/protosw.h:1.63 src/sys/sys/protosw.h:1.64 --- src/sys/sys/protosw.h:1.63 Sun Apr 26 21:40:49 2015 +++ src/sys/sys/protosw.h Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: protosw.h,v 1.63 2015/04/26 21:40:49 rtr Exp $ */ +/* $NetBSD: protosw.h,v 1.64 2015/05/02 17:18:04 rtr Exp $ */ /*- * Copyright (c) 1982, 1986, 1993 @@ -239,7 +239,7 @@ struct pr_usrreqs { int (*pr_attach)(struct socket *, int); void (*pr_detach)(struct socket *); int (*pr_accept)(struct socket *, struct sockaddr *); - int (*pr_connect)(struct socket *, struct mbuf *, struct lwp *); + int (*pr_connect)(struct socket *, struct sockaddr *, struct lwp *); int (*pr_connect2)(struct socket *, struct socket *); int (*pr_bind)(struct socket *, struct sockaddr *, struct lwp *); int (*pr_listen)(struct socket *, struct lwp *); @@ -252,7 +252,7 @@ struct pr_usrreqs { int (*pr_sockaddr)(struct socket *, struct sockaddr *); int (*pr_rcvd)(struct socket *, int, struct lwp *); int (*pr_recvoob)(struct socket *, struct mbuf *, int); - int (*pr_send)(struct socket *, struct mbuf *, struct mbuf *, + int (*pr_send)(struct socket *, struct mbuf *, struct sockaddr *, struct mbuf *, struct lwp *); int (*pr_sendoob)(struct socket *, struct mbuf *, struct mbuf *); int (*pr_purgeif)(struct socket *, struct ifnet *); @@ -327,7 +327,7 @@ name##_bind_wrapper(struct socket *a, } \ static int \ name##_connect_wrapper(struct socket *a, \ - struct mbuf *b, struct lwp *c) \ + struct sockaddr *b, struct lwp *c) \ { \ int rv; \ KERNEL_LOCK(1, NULL); \ @@ -442,7 +442,7 @@ name##_recvoob_wrapper(struct socket *a, } \ static int \ name##_send_wrapper(struct socket *a, struct mbuf *b, \ - struct mbuf *c, struct mbuf *d, struct lwp *e) \ + struct sockaddr *c, struct mbuf *d, struct lwp *e) \ { \ int rv; \ KERNEL_LOCK(1, NULL); \ Index: src/sys/sys/socketvar.h diff -u src/sys/sys/socketvar.h:1.137 src/sys/sys/socketvar.h:1.138 --- src/sys/sys/socketvar.h:1.137 Fri Apr 24 22:32:38 2015 +++ src/sys/sys/socketvar.h Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: socketvar.h,v 1.137 2015/04/24 22:32:38 rtr Exp $ */ +/* $NetBSD: socketvar.h,v 1.138 2015/05/02 17:18:04 rtr Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -293,7 +293,7 @@ int sobind(struct socket *, struct socka void socantrcvmore(struct socket *); void socantsendmore(struct socket *); int soclose(struct socket *); -int soconnect(struct socket *, struct mbuf *, struct lwp *); +int soconnect(struct socket *, struct sockaddr *, struct lwp *); int soconnect2(struct socket *, struct socket *); int socreate(int, struct socket **, int, int, struct lwp *, struct socket *); @@ -355,7 +355,7 @@ int do_sys_recvmsg(struct lwp *, int, st struct mbuf **, register_t *); int do_sys_bind(struct lwp *, int, struct sockaddr *); -int do_sys_connect(struct lwp *, int, struct mbuf *); +int do_sys_connect(struct lwp *, int, struct sockaddr *); int do_sys_accept(struct lwp *, int, struct sockaddr *, register_t *, const sigset_t *, int, int); Index: src/sys/sys/un.h diff -u src/sys/sys/un.h:1.55 src/sys/sys/un.h:1.56 --- src/sys/sys/un.h:1.55 Sat Aug 9 05:33:01 2014 +++ src/sys/sys/un.h Sat May 2 17:18:04 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: un.h,v 1.55 2014/08/09 05:33:01 rtr Exp $ */ +/* $NetBSD: un.h,v 1.56 2015/05/02 17:18:04 rtr Exp $ */ /* * Copyright (c) 1982, 1986, 1993 @@ -75,6 +75,7 @@ struct unpcbid { struct unpcb; struct socket; struct sockopt; +struct sockaddr; extern const struct pr_usrreqs unp_usrreqs; @@ -84,7 +85,7 @@ kmutex_t *uipc_dgramlock(void); kmutex_t *uipc_streamlock(void); kmutex_t *uipc_rawlock(void); -int unp_connect(struct socket *, struct mbuf *, struct lwp *); +int unp_connect(struct socket *, struct sockaddr *, struct lwp *); int unp_connect2(struct socket *, struct socket *); void unp_dispose(struct mbuf *); int unp_externalize(struct mbuf *, struct lwp *, int);