mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
Merge branch 'master' into branch-1.23.0
This commit is contained in:
commit
38026a21ee
2 changed files with 48 additions and 35 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
9 April 2025: Wouter
|
9 April 2025: Wouter
|
||||||
- Fix to detect if atomic_store links in configure.
|
- Fix to detect if atomic_store links in configure.
|
||||||
|
- Fix #1264: unbound 1.22.0 leaks memory when doing DoH.
|
||||||
|
|
||||||
8 April 2025: Wouter
|
8 April 2025: Wouter
|
||||||
- Tag for 1.23.0rc1.
|
- Tag for 1.23.0rc1.
|
||||||
|
|
|
||||||
|
|
@ -3057,7 +3057,7 @@ int comm_point_perform_accept(struct comm_point* c,
|
||||||
if(verbosity >= 3)
|
if(verbosity >= 3)
|
||||||
log_err_addr("accept rejected",
|
log_err_addr("accept rejected",
|
||||||
"connection limit exceeded", addr, *addrlen);
|
"connection limit exceeded", addr, *addrlen);
|
||||||
close(new_fd);
|
sock_close(new_fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3158,6 +3158,40 @@ static int http2_submit_settings(struct http2_session* h2_session)
|
||||||
}
|
}
|
||||||
#endif /* HAVE_NGHTTP2 */
|
#endif /* HAVE_NGHTTP2 */
|
||||||
|
|
||||||
|
#ifdef HAVE_NGHTTP2
|
||||||
|
/** Delete http2 stream. After session delete or stream close callback */
|
||||||
|
static void http2_stream_delete(struct http2_session* h2_session,
|
||||||
|
struct http2_stream* h2_stream)
|
||||||
|
{
|
||||||
|
if(h2_stream->mesh_state) {
|
||||||
|
mesh_state_remove_reply(h2_stream->mesh, h2_stream->mesh_state,
|
||||||
|
h2_session->c);
|
||||||
|
h2_stream->mesh_state = NULL;
|
||||||
|
}
|
||||||
|
http2_req_stream_clear(h2_stream);
|
||||||
|
free(h2_stream);
|
||||||
|
}
|
||||||
|
#endif /* HAVE_NGHTTP2 */
|
||||||
|
|
||||||
|
/** delete http2 session server. After closing connection. */
|
||||||
|
static void http2_session_server_delete(struct http2_session* h2_session)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_NGHTTP2
|
||||||
|
struct http2_stream* h2_stream, *next;
|
||||||
|
nghttp2_session_del(h2_session->session); /* NULL input is fine */
|
||||||
|
h2_session->session = NULL;
|
||||||
|
for(h2_stream = h2_session->first_stream; h2_stream;) {
|
||||||
|
next = h2_stream->next;
|
||||||
|
http2_stream_delete(h2_session, h2_stream);
|
||||||
|
h2_stream = next;
|
||||||
|
}
|
||||||
|
h2_session->first_stream = NULL;
|
||||||
|
h2_session->is_drop = 0;
|
||||||
|
h2_session->postpone_drop = 0;
|
||||||
|
h2_session->c->h2_stream = NULL;
|
||||||
|
#endif
|
||||||
|
(void)h2_session;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
comm_point_tcp_accept_callback(int fd, short event, void* arg)
|
comm_point_tcp_accept_callback(int fd, short event, void* arg)
|
||||||
|
|
@ -3196,6 +3230,8 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
|
||||||
if(!c_hdl->h2_session ||
|
if(!c_hdl->h2_session ||
|
||||||
!http2_submit_settings(c_hdl->h2_session)) {
|
!http2_submit_settings(c_hdl->h2_session)) {
|
||||||
log_warn("failed to submit http2 settings");
|
log_warn("failed to submit http2 settings");
|
||||||
|
if(c_hdl->h2_session)
|
||||||
|
http2_session_server_delete(c_hdl->h2_session);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!c->ssl) {
|
if(!c->ssl) {
|
||||||
|
|
@ -3213,14 +3249,23 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
|
||||||
}
|
}
|
||||||
if(!c_hdl->ev->ev) {
|
if(!c_hdl->ev->ev) {
|
||||||
log_warn("could not ub_event_new, dropped tcp");
|
log_warn("could not ub_event_new, dropped tcp");
|
||||||
|
#ifdef HAVE_NGHTTP2
|
||||||
|
if(c_hdl->type == comm_http && c_hdl->h2_session)
|
||||||
|
http2_session_server_delete(c_hdl->h2_session);
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log_assert(fd != -1);
|
log_assert(fd != -1);
|
||||||
(void)fd;
|
(void)fd;
|
||||||
new_fd = comm_point_perform_accept(c, &c_hdl->repinfo.remote_addr,
|
new_fd = comm_point_perform_accept(c, &c_hdl->repinfo.remote_addr,
|
||||||
&c_hdl->repinfo.remote_addrlen);
|
&c_hdl->repinfo.remote_addrlen);
|
||||||
if(new_fd == -1)
|
if(new_fd == -1) {
|
||||||
|
#ifdef HAVE_NGHTTP2
|
||||||
|
if(c_hdl->type == comm_http && c_hdl->h2_session)
|
||||||
|
http2_session_server_delete(c_hdl->h2_session);
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
/* Copy remote_address to client_address.
|
/* Copy remote_address to client_address.
|
||||||
* Simplest way/time for streams to do that. */
|
* Simplest way/time for streams to do that. */
|
||||||
c_hdl->repinfo.client_addrlen = c_hdl->repinfo.remote_addrlen;
|
c_hdl->repinfo.client_addrlen = c_hdl->repinfo.remote_addrlen;
|
||||||
|
|
@ -5035,19 +5080,6 @@ struct http2_stream* http2_stream_create(int32_t stream_id)
|
||||||
h2_stream->stream_id = stream_id;
|
h2_stream->stream_id = stream_id;
|
||||||
return h2_stream;
|
return h2_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Delete http2 stream. After session delete or stream close callback */
|
|
||||||
static void http2_stream_delete(struct http2_session* h2_session,
|
|
||||||
struct http2_stream* h2_stream)
|
|
||||||
{
|
|
||||||
if(h2_stream->mesh_state) {
|
|
||||||
mesh_state_remove_reply(h2_stream->mesh, h2_stream->mesh_state,
|
|
||||||
h2_session->c);
|
|
||||||
h2_stream->mesh_state = NULL;
|
|
||||||
}
|
|
||||||
http2_req_stream_clear(h2_stream);
|
|
||||||
free(h2_stream);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void http2_stream_add_meshstate(struct http2_stream* h2_stream,
|
void http2_stream_add_meshstate(struct http2_stream* h2_stream,
|
||||||
|
|
@ -5064,26 +5096,6 @@ void http2_stream_remove_mesh_state(struct http2_stream* h2_stream)
|
||||||
h2_stream->mesh_state = NULL;
|
h2_stream->mesh_state = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** delete http2 session server. After closing connection. */
|
|
||||||
static void http2_session_server_delete(struct http2_session* h2_session)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_NGHTTP2
|
|
||||||
struct http2_stream* h2_stream, *next;
|
|
||||||
nghttp2_session_del(h2_session->session); /* NULL input is fine */
|
|
||||||
h2_session->session = NULL;
|
|
||||||
for(h2_stream = h2_session->first_stream; h2_stream;) {
|
|
||||||
next = h2_stream->next;
|
|
||||||
http2_stream_delete(h2_session, h2_stream);
|
|
||||||
h2_stream = next;
|
|
||||||
}
|
|
||||||
h2_session->first_stream = NULL;
|
|
||||||
h2_session->is_drop = 0;
|
|
||||||
h2_session->postpone_drop = 0;
|
|
||||||
h2_session->c->h2_stream = NULL;
|
|
||||||
#endif
|
|
||||||
(void)h2_session;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_NGHTTP2
|
#ifdef HAVE_NGHTTP2
|
||||||
void http2_session_add_stream(struct http2_session* h2_session,
|
void http2_session_add_stream(struct http2_session* h2_session,
|
||||||
struct http2_stream* h2_stream)
|
struct http2_stream* h2_stream)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue