Markus Schmidt
2019-Feb-05 10:53 UTC
[PATCH] on cleanup channels.c leaks the channels array and some x11 structures
When freeing the channels, the channel table and some structures are not releaseed and leak. Patch attached. Best Regards Markus Schmidt -------------- next part -------------- diff --git a/channels.c b/channels.c old mode 100644 new mode 100755 index 19da16e..e0f9cba --- a/channels.c +++ b/channels.c @@ -639,10 +639,41 @@ void channel_free_all(struct ssh *ssh) { u_int i; + struct ssh_channels *sc = ssh->chanctxt; - for (i = 0; i < ssh->chanctxt->channels_alloc; i++) - if (ssh->chanctxt->channels[i] != NULL) - channel_free(ssh, ssh->chanctxt->channels[i]); + + for (i = 0; i < sc->channels_alloc; i++) + if (sc->channels[i] != NULL) + channel_free(ssh, sc->channels[i]); + + free(sc->channels); + sc->channels= NULL; + + sc->channels_alloc = 0; + sc->channel_max_fd = 0; + + + if (sc->x11_saved_display) { + free(sc->x11_saved_display); + sc->x11_saved_display= NULL; + } + + if (sc->x11_saved_proto) { + free(sc->x11_saved_proto); + sc->x11_saved_proto= NULL; + } + + if (sc->x11_saved_data) { + free(sc->x11_saved_data); + sc->x11_saved_data= NULL; + sc->x11_saved_data_len = 0; + } + + if (sc->x11_fake_data) { + free(sc->x11_fake_data); + sc->x11_fake_data= NULL; + sc->x11_fake_data_len = 0; + } } /*
Markus Schmidt
2019-Feb-05 14:16 UTC
[PATCH] on cleanup channels.c leaks the channels array and some x11 structures
Also on bugzilla: https://bugzilla.mindrot.org/show_bug.cgi?id=2963 On 02.05.19 11:53 , Markus Schmidt wrote:> > When freeing the channels, the channel table and some structures are not > releaseed and leak. > > Patch attached. > > > Best Regards > > > Markus Schmidt