BUG/MINOR: stconn: fix sedesc memory leak on stream allocation failure

If we fail to allocate a new stream in sc_new_from_endp(), and the call
to sc_new() allocated the sedesc itself (which normally doesn't happen),
then it doesn't get released on the failure path. Let's explicitly
handle this case so that it's not overlooked and avoids some head
scratching sessions.

This may be backported to 2.6.
This commit is contained in:
Willy Tarreau 2023-03-20 19:53:14 +01:00
parent e2f7946339
commit 7a8ca0a063

View File

@ -171,8 +171,12 @@ struct stconn *sc_new_from_endp(struct sedesc *sd, struct session *sess, struct
if (unlikely(!sc))
return NULL;
if (unlikely(!stream_new(sess, sc, input))) {
pool_free(pool_head_connstream, sc);
sd->sc = NULL;
if (sc->sedesc != sd) {
/* none was provided so sc_new() allocated one */
sedesc_free(sc->sedesc);
}
pool_free(pool_head_connstream, sc);
se_fl_set(sd, SE_FL_ORPHAN);
return NULL;
}