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