Although with XXXXXX we no longer reallocate tcpcb to tcptw, we are still
interested in not wasting extra memory while a connection waits for 2MSL
timeout.
- In tcp_twstart() when transitioning to TIME_WAIT, if the file descriptor had been closed, let's free the socket and contexts that hang off the socket (e.g. kTLS context).
- In tcp_usr_detach() differentiate this case by absence of INP_DROPPED flag and don't free the pcb.
- After the 2MSL timeout in tcp_close() differentiate a pcb that has been left by tcp_usr_detach() by checking that inp_socket pointer is NULL.
- Go around the code touched by XXXXXX and restore safety checks for a connection in TIME_WAIT state. Previously we were guarding against dereferencing inp_ppcb as tcptw, now we are guarding against dereferencing inp_socket.