- Fix for the ignore of tcp events for closed comm points, preserve

the use after free protection features.
This commit is contained in:
W.C.A. Wijngaards 2022-11-28 10:04:52 +01:00
parent b86a97019f
commit 6f7da59b77
2 changed files with 13 additions and 2 deletions

View file

@ -1,3 +1,7 @@
28 November 2022: Wouter
- Fix for the ignore of tcp events for closed comm points, preserve
the use after free protection features.
22 November 2022: George
- Ignore expired error responses.

View file

@ -2665,6 +2665,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
#endif
) {
int has_tcpq = (c->tcp_req_info != NULL);
int* moreread = c->tcp_more_read_again;
if(!comm_point_tcp_handle_read(fd, c, 0)) {
reclaim_tcp_handler(c);
if(!c->tcp_do_close) {
@ -2679,12 +2680,13 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
if(!tcp_req_info_read_again(fd, c))
return;
}
if(c->tcp_more_read_again && *c->tcp_more_read_again)
if(moreread && *moreread)
tcp_more_read_again(fd, c);
return;
}
if(event&UB_EV_WRITE) {
int has_tcpq = (c->tcp_req_info != NULL);
int* morewrite = c->tcp_more_write_again;
if(!comm_point_tcp_handle_write(fd, c)) {
reclaim_tcp_handler(c);
if(!c->tcp_do_close) {
@ -2699,7 +2701,7 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
if(!tcp_req_info_read_again(fd, c))
return;
}
if(c->tcp_more_write_again && *c->tcp_more_write_again)
if(morewrite && *morewrite)
tcp_more_write_again(fd, c);
return;
}
@ -4495,6 +4497,11 @@ comm_point_close(struct comm_point* c)
tcp_req_info_clear(c->tcp_req_info);
if(c->h2_session)
http2_session_server_delete(c->h2_session);
/* stop the comm point from reading or writing after it is closed. */
if(c->tcp_more_read_again && *c->tcp_more_read_again)
*c->tcp_more_read_again = 0;
if(c->tcp_more_write_again && *c->tcp_more_write_again)
*c->tcp_more_write_again = 0;
/* close fd after removing from event lists, or epoll.. is messed up */
if(c->fd != -1 && !c->do_not_close) {