mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-06 13:09:50 +00:00
ipdivert: check that PCB is still valid after taking INPCB_RLOCK.
We are inspecting PCBs of divert sockets under NET_EPOCH section, but PCB could be already detached and we should check INP_FREED flag when we took INP_RLOCK. PR: 254478 MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D29420
This commit is contained in:
parent
b013912772
commit
c80a4b76ce
@ -280,6 +280,10 @@ divert_packet(struct mbuf *m, bool incoming)
|
||||
/* XXX why does only one socket match? */
|
||||
if (inp->inp_lport == nport) {
|
||||
INP_RLOCK(inp);
|
||||
if (__predict_false(inp->inp_flags2 & INP_FREED)) {
|
||||
INP_RUNLOCK(inp);
|
||||
continue;
|
||||
}
|
||||
sa = inp->inp_socket;
|
||||
SOCKBUF_LOCK(&sa->so_rcv);
|
||||
if (sbappendaddr_locked(&sa->so_rcv,
|
||||
|
Loading…
Reference in New Issue
Block a user