[PATCH] on cleanup channels.c leaks the channels array and some x11 structures

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

 




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

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux