o In udp|rip_disconnect() acquire a socket lock before the socket
state modification. To prevent races do that while holding inpcb lock. Reviewed by: rwatson
This commit is contained in:
parent
635354c446
commit
d45e4f9945
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=158800
@ -671,9 +671,11 @@ rip_disconnect(struct socket *so)
|
||||
INP_INFO_WLOCK(&ripcbinfo);
|
||||
INP_LOCK(inp);
|
||||
inp->inp_faddr.s_addr = INADDR_ANY;
|
||||
SOCK_LOCK(so);
|
||||
so->so_state &= ~SS_ISCONNECTED;
|
||||
SOCK_UNLOCK(so);
|
||||
INP_UNLOCK(inp);
|
||||
INP_INFO_WUNLOCK(&ripcbinfo);
|
||||
so->so_state &= ~SS_ISCONNECTED;
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -1057,9 +1057,11 @@ udp_disconnect(struct socket *so)
|
||||
|
||||
in_pcbdisconnect(inp);
|
||||
inp->inp_laddr.s_addr = INADDR_ANY;
|
||||
SOCK_LOCK(so);
|
||||
so->so_state &= ~SS_ISCONNECTED; /* XXX */
|
||||
SOCK_UNLOCK(so);
|
||||
INP_UNLOCK(inp);
|
||||
INP_INFO_WUNLOCK(&udbinfo);
|
||||
so->so_state &= ~SS_ISCONNECTED; /* XXX */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user