When freeing the channels, the channel table and some structures are not releaseed and leak.
Patch attached. Best Regards Markus Schmidt
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; + } } /*
_______________________________________________ openssh-unix-dev mailing list openssh-unix-dev@xxxxxxxxxxx https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev