mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-13 03:30:28 +09:00
socket: do not free poll object if it is locked
As it may a cause a use after free if `send` fails when ssh_poll_ctx_dopoll does its callback ssh_poll_ctx_dopoll still wants to use the poll object later Signed-off-by: Philippe Antoine <p.antoine@catenacyber.fr> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Jakub Jelen
parent
53ac23ded4
commit
c99261437f
14
src/poll.c
14
src/poll.c
@@ -682,6 +682,20 @@ void ssh_poll_ctx_remove(ssh_poll_ctx ctx, ssh_poll_handle p)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns if a poll object is locked.
|
||||
*
|
||||
* @param p Pointer to an already allocated poll object.
|
||||
* @returns true if the poll object is locked; false otherwise.
|
||||
*/
|
||||
bool ssh_poll_is_locked(ssh_poll_handle p)
|
||||
{
|
||||
if (p == NULL) {
|
||||
return false;
|
||||
}
|
||||
return p->lock_cnt > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Poll all the sockets associated through a poll object with a
|
||||
* poll context. If any of the events are set after the poll, the
|
||||
|
||||
Reference in New Issue
Block a user