? netipsec/o Index: net/raw_cb.c =================================================================== RCS file: /cvsroot/src/sys/net/raw_cb.c,v retrieving revision 1.21 diff -u -p -u -r1.21 raw_cb.c --- net/raw_cb.c 19 May 2014 02:51:24 -0000 1.21 +++ net/raw_cb.c 21 May 2014 20:09:01 -0000 @@ -97,7 +97,7 @@ raw_attach(struct socket *so, int proto) * Detach the raw connection block and discard socket resources. */ void -raw_detach(struct socket *so) +raw_detach1(struct socket *so, size_t sz) { struct rawcb *rp = sotorawcb(so); @@ -110,11 +110,17 @@ raw_detach(struct socket *so) /* Note: sofree() drops the socket's lock. */ sofree(so); - kmem_free(rp, sizeof(*rp)); + kmem_free(rp, sz); mutex_enter(softnet_lock); } +void +raw_detach(struct socket *so) +{ + raw_detach1(so, sizeof(struct rawcb)); +} + /* * Disconnect and possibly release resources. */ Index: net/raw_cb.h =================================================================== RCS file: /cvsroot/src/sys/net/raw_cb.h,v retrieving revision 1.21 diff -u -p -u -r1.21 raw_cb.h --- net/raw_cb.h 19 May 2014 02:51:24 -0000 1.21 +++ net/raw_cb.h 21 May 2014 20:09:01 -0000 @@ -61,6 +61,7 @@ extern struct rawcbhead rawcb; /* head int raw_attach(struct socket *, int); void *raw_ctlinput(int, const struct sockaddr *, void *); void raw_detach(struct socket *); +void raw_detach1(struct socket *, size_t); void raw_disconnect(struct rawcb *); void raw_init(void); void raw_input(struct mbuf *, ...); Index: netipsec/keysock.c =================================================================== RCS file: /cvsroot/src/sys/netipsec/keysock.c,v retrieving revision 1.24 diff -u -p -u -r1.24 keysock.c --- netipsec/keysock.c 20 May 2014 19:04:00 -0000 1.24 +++ netipsec/keysock.c 21 May 2014 20:09:01 -0000 @@ -463,8 +463,8 @@ key_attach(struct socket *so, int proto, if (sotorawcb(so) != 0) return EISCONN; /* XXX panic? */ - kp = (struct keycb *)malloc(sizeof *kp, M_PCB, M_WAITOK|M_ZERO); /* XXX */ - if (kp == 0) + kp = kmem_zalloc(sizeof(*kp), KM_SLEEP); + if (kp == NULL) return ENOBUFS; /* @@ -479,7 +479,7 @@ key_attach(struct socket *so, int proto, error = raw_usrreqs.pru_attach(so, proto, td); kp = (struct keycb *)sotorawcb(so); if (error) { - free(kp, M_PCB); + kmem_free(kp, sizeof(*kp)); so->so_pcb = NULL; splx(s); return error; @@ -671,7 +671,7 @@ key_detach(struct socket *so) key_cb.key_count--; key_cb.any_count--; key_freereg(so); - raw_detach(so); + raw_detach1(so, sizeof(*kp)); splx(s); }