From 4542c1cf5d7077caf33d6d9468f5e647cd9d19e5 Mon Sep 17 00:00:00 2001 From: wollman Date: Sat, 16 Aug 1997 19:16:27 +0000 Subject: Fix all areas of the system (or at least all those in LINT) to avoid storing socket addresses in mbufs. (Socket buffers are the one exception.) A number of kernel APIs needed to get fixed in order to make this happen. Also, fix three protocol families which kept PCBs in mbufs to not malloc them instead. Delete some old compatibility cruft while we're at it, and add some new routines in the in_cksum family. --- sys/net/raw_usrreq.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'sys/net/raw_usrreq.c') diff --git a/sys/net/raw_usrreq.c b/sys/net/raw_usrreq.c index ec847ed..08d02d5 100644 --- a/sys/net/raw_usrreq.c +++ b/sys/net/raw_usrreq.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)raw_usrreq.c 8.1 (Berkeley) 6/10/93 - * $Id: raw_usrreq.c,v 1.12 1997/04/27 20:00:59 wollman Exp $ + * $Id: raw_usrreq.c,v 1.13 1997/08/02 14:32:40 bde Exp $ */ #include @@ -164,13 +164,13 @@ raw_uattach(struct socket *so, int proto, struct proc *p) } static int -raw_ubind(struct socket *so, struct mbuf *nam, struct proc *p) +raw_ubind(struct socket *so, struct sockaddr *nam, struct proc *p) { return EINVAL; } static int -raw_uconnect(struct socket *so, struct mbuf *nam, struct proc *p) +raw_uconnect(struct socket *so, struct sockaddr *nam, struct proc *p) { return EINVAL; } @@ -208,7 +208,7 @@ raw_udisconnect(struct socket *so) /* pru_listen is EOPNOTSUPP */ static int -raw_upeeraddr(struct socket *so, struct mbuf *nam) +raw_upeeraddr(struct socket *so, struct sockaddr **nam) { struct rawcb *rp = sotorawcb(so); unsigned len; @@ -218,9 +218,7 @@ raw_upeeraddr(struct socket *so, struct mbuf *nam) if (rp->rcb_faddr == 0) { return ENOTCONN; } - len = rp->rcb_faddr->sa_len; - bcopy((caddr_t)rp->rcb_faddr, mtod(nam, caddr_t), len); - nam->m_len = len; + *nam = dup_sockaddr(rp->rcb_faddr, 1); return 0; } @@ -229,7 +227,7 @@ raw_upeeraddr(struct socket *so, struct mbuf *nam) static int raw_usend(struct socket *so, int flags, struct mbuf *m, - struct mbuf *nam, struct mbuf *control, struct proc *p) + struct sockaddr *nam, struct mbuf *control, struct proc *p) { int error; struct rawcb *rp = sotorawcb(so); @@ -253,7 +251,7 @@ raw_usend(struct socket *so, int flags, struct mbuf *m, error = EISCONN; goto release; } - rp->rcb_faddr = mtod(nam, struct sockaddr *); + rp->rcb_faddr = nam; } else if (rp->rcb_faddr == 0) { error = ENOTCONN; goto release; @@ -282,7 +280,7 @@ raw_ushutdown(struct socket *so) } static int -raw_usockaddr(struct socket *so, struct mbuf *nam) +raw_usockaddr(struct socket *so, struct sockaddr **nam) { struct rawcb *rp = sotorawcb(so); unsigned len; @@ -291,9 +289,7 @@ raw_usockaddr(struct socket *so, struct mbuf *nam) return EINVAL; if (rp->rcb_laddr == 0) return EINVAL; - len = rp->rcb_laddr->sa_len; - bcopy((caddr_t)rp->rcb_laddr, mtod(nam, caddr_t), len); - nam->m_len = len; + *nam = dup_sockaddr(rp->rcb_laddr, 1); return 0; } -- cgit v1.1