From e8099375fe2152257b1b367f8bf8198dac615ad6 Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Mon, 11 Aug 2025 18:35:27 +0200 Subject: [PATCH] poll: Check return value of ssh_poll_ctx_add() Signed-off-by: Jakub Jelen Reviewed-by: Andreas Schneider --- src/poll.c | 15 ++++++++++----- src/session.c | 5 ++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/poll.c b/src/poll.c index 67f095b7..09f6ec08 100644 --- a/src/poll.c +++ b/src/poll.c @@ -637,14 +637,12 @@ int ssh_poll_ctx_add(ssh_poll_ctx ctx, ssh_poll_handle p) int ssh_poll_ctx_add_socket(ssh_poll_ctx ctx, ssh_socket s) { ssh_poll_handle p = NULL; - int ret; p = ssh_socket_get_poll_handle(s); if (p == NULL) { return -1; } - ret = ssh_poll_ctx_add(ctx, p); - return ret; + return ssh_poll_ctx_add(ctx, p); } /** @@ -948,6 +946,7 @@ int ssh_event_add_session(ssh_event event, ssh_session session) #ifdef WITH_SERVER struct ssh_iterator *iterator = NULL; #endif + int rc; if (event == NULL || event->ctx == NULL || session == NULL) { return SSH_ERROR; @@ -962,7 +961,10 @@ int ssh_event_add_session(ssh_event event, ssh_session session) * session->default_poll_ctx->polls_used */ ssh_poll_ctx_remove(session->default_poll_ctx, p); - ssh_poll_ctx_add(event->ctx, p); + rc = ssh_poll_ctx_add(event->ctx, p); + if (rc != SSH_OK) { + return rc; + } /* associate the pollhandler with a session so we can put it back * at ssh_event_free() */ @@ -1110,7 +1112,10 @@ int ssh_event_remove_session(ssh_event event, ssh_session session) */ ssh_poll_ctx_remove(event->ctx, p); p->session = NULL; - ssh_poll_ctx_add(session->default_poll_ctx, p); + rc = ssh_poll_ctx_add(session->default_poll_ctx, p); + if (rc != SSH_OK) { + return rc; + } rc = SSH_OK; /* * Restart the loop! diff --git a/src/session.c b/src/session.c index d3f7f088..78eb2417 100644 --- a/src/session.c +++ b/src/session.c @@ -744,7 +744,10 @@ int ssh_handle_packets(ssh_session session, int timeout) ssh_set_error_oom(session); return SSH_ERROR; } - ssh_poll_ctx_add(ctx, spoll); + rc = ssh_poll_ctx_add(ctx, spoll); + if (rc != SSH_OK) { + return SSH_ERROR; + } } if (timeout == SSH_TIMEOUT_USER) {