--- src/sys/netproto/ipsec/keysock.c 2005/03/04 02:21:49 1.9 +++ src/sys/netproto/ipsec/keysock.c 2005/06/03 00:22:27 1.10 @@ -82,7 +82,7 @@ key_output(struct mbuf *m, struct socket { struct sadb_msg *msg; int len, error = 0; - int s; + if (m == 0) panic("key_output: NULL pointer was passed.\n"); @@ -119,10 +119,10 @@ key_output(struct mbuf *m, struct socket } /*XXX giant lock*/ - s = splnet(); + crit_enter(); error = key_parse(m, so); m = NULL; - splx(s); + crit_exit(); end: if (m) m_freem(m); @@ -374,10 +374,10 @@ key_sendup_mbuf(so, m, target) static int key_abort(struct socket *so) { - int s, error; - s = splnet(); + int error; + crit_enter(); error = raw_usrreqs.pru_abort(so); - splx(s); + crit_exit(); return error; } @@ -389,7 +389,7 @@ static int key_attach(struct socket *so, int proto, struct pru_attach_info *ai) { struct keycb *kp; - int s, error; + int error; if (sotorawcb(so) != 0) return EISCONN; /* XXX panic? */ @@ -398,20 +398,20 @@ key_attach(struct socket *so, int proto, return ENOBUFS; /* - * The splnet() is necessary to block protocols from sending + * The critical section is necessary to block protocols from sending * error notifications (like RTM_REDIRECT or RTM_LOSING) while * this PCB is extant but incompletely initialized. * Probably we should try to do more of this work beforehand and * eliminate the spl. */ - s = splnet(); + crit_enter(); so->so_pcb = (caddr_t)kp; error = raw_usrreqs.pru_attach(so, proto, ai); kp = (struct keycb *)sotorawcb(so); if (error) { free(kp, M_PCB); so->so_pcb = (caddr_t) 0; - splx(s); + crit_exit(); return error; } @@ -425,7 +425,7 @@ key_attach(struct socket *so, int proto, soisconnected(so); so->so_options |= SO_USELOOPBACK; - splx(s); + crit_exit(); return 0; } @@ -436,10 +436,10 @@ key_attach(struct socket *so, int proto, static int key_bind(struct socket *so, struct sockaddr *nam, struct thread *td) { - int s, error; - s = splnet(); + int error; + crit_enter(); error = raw_usrreqs.pru_bind(so, nam, td); /* xxx just EINVAL */ - splx(s); + crit_exit(); return error; } @@ -450,10 +450,10 @@ key_bind(struct socket *so, struct socka static int key_connect(struct socket *so, struct sockaddr *nam, struct thread *td) { - int s, error; - s = splnet(); + int error; + crit_enter(); error = raw_usrreqs.pru_connect(so, nam, td); /* XXX just EINVAL */ - splx(s); + crit_exit(); return error; } @@ -465,9 +465,9 @@ static int key_detach(struct socket *so) { struct keycb *kp = (struct keycb *)sotorawcb(so); - int s, error; + int error; - s = splnet(); + crit_enter(); if (kp != 0) { if (kp->kp_raw.rcb_proto.sp_protocol == PF_KEY) /* XXX: AF_KEY */ @@ -477,7 +477,7 @@ key_detach(struct socket *so) key_freereg(so); } error = raw_usrreqs.pru_detach(so); - splx(s); + crit_exit(); return error; } @@ -488,10 +488,10 @@ key_detach(struct socket *so) static int key_disconnect(struct socket *so) { - int s, error; - s = splnet(); + int error; + crit_enter(); error = raw_usrreqs.pru_disconnect(so); - splx(s); + crit_exit(); return error; } @@ -502,10 +502,10 @@ key_disconnect(struct socket *so) static int key_peeraddr(struct socket *so, struct sockaddr **nam) { - int s, error; - s = splnet(); + int error; + crit_enter(); error = raw_usrreqs.pru_peeraddr(so, nam); - splx(s); + crit_exit(); return error; } @@ -517,10 +517,10 @@ static int key_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *nam, struct mbuf *control, struct thread *td) { - int s, error; - s = splnet(); + int error; + crit_enter(); error = raw_usrreqs.pru_send(so, flags, m, nam, control, td); - splx(s); + crit_exit(); return error; } @@ -531,10 +531,10 @@ key_send(struct socket *so, int flags, s static int key_shutdown(struct socket *so) { - int s, error; - s = splnet(); + int error; + crit_enter(); error = raw_usrreqs.pru_shutdown(so); - splx(s); + crit_exit(); return error; } @@ -545,10 +545,10 @@ key_shutdown(struct socket *so) static int key_sockaddr(struct socket *so, struct sockaddr **nam) { - int s, error; - s = splnet(); + int error; + crit_enter(); error = raw_usrreqs.pru_sockaddr(so, nam); - splx(s); + crit_exit(); return error; }