Here is another small patch to remove an old opacket API call.
packet_close() simply calls ssh_packet_close() with the current ssh
pointer as a parameter and then clears the active_state pointer (which
in itself is just a copy of the master ssh pointer and which is used
only for these the old apis).
There are only two instances of packet_close(), one in ssh.c and one in
sshd.c. There we can simply replace the packet_close() call with
ssh_packet_close(ssh);
active_state = NULL; /* XXX legacy API compat */
Additionally, I found something related in ssh.c. There is a bogus
assignment between the ssh pointer and active_state which I think should
be removed, because further up in ssh.c, we set active_state to the
value of ssh (I understand ssh is the master pointer and active_state
ist just a copy for use with the old opacket api calls).
Hence, doing this later appears to be bogus and should be removed:
- ssh = active_state; /* XXX */
And finally, at the end of main(), before exiting main ssh.c leaks the
memory on the ssh pointer (it is allocated by never freed). The leak is
inconsequential, but I think it should be freed anyway.
Hence, after calling ssh_packet_close() we should add:
+ free(ssh);
+ ssh= NULL;
PATCH:
opacket.c | 7 -------
opacket.h | 1 -
ssh.c | 8 +++++---
sshd.c | 5 ++++-
4 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/opacket.c b/opacket.c
index bff4c36..af8516c 100755
--- a/opacket.c
+++ b/opacket.c
@@ -237,13 +237,6 @@ packet_read_poll_seqnr(u_int32_t *seqnr)
}
void
-packet_close(void)
-{
- ssh_packet_close(active_state);
- active_state = NULL;
-}
-
-void
packet_process_incoming(const char *buf, u_int len)
{
int r;
diff --git a/opacket.h b/opacket.h
index d711468..067de68 100755
--- a/opacket.h
+++ b/opacket.h
@@ -35,7 +35,6 @@ do { \
} while (0)
/* old API */
-void packet_close(void);
u_int packet_get_char(void);
u_int packet_get_int(void);
int packet_read_seqnr(u_int32_t *);
diff --git a/ssh.c b/ssh.c
index 3b5ea99..48f347c 100755
--- a/ssh.c
+++ b/ssh.c
@@ -1348,8 +1348,6 @@ main(int ac, char **av)
packet_set_timeout(options.server_alive_interval,
options.server_alive_count_max);
- ssh = active_state; /* XXX */
-
if (timeout_ms > 0)
debug3("timeout: %d ms remain after connect", timeout_ms);
@@ -1491,7 +1489,11 @@ main(int ac, char **av)
skip_connect:
exit_status = ssh_session2(ssh, pw);
- packet_close();
+ ssh_packet_close(ssh);
+ active_state = NULL; /* XXX legacy API compat */
+
+ free(ssh);
+ ssh= NULL;
if (options.control_path != NULL && muxserver_sock != -1)
unlink(options.control_path);
diff --git a/sshd.c b/sshd.c
index 65b96d4..760593b 100755
--- a/sshd.c
+++ b/sshd.c
@@ -2043,7 +2043,10 @@ main(int ac, char **av)
(unsigned long long)obytes, (unsigned long long)ibytes);
verbose("Closing connection to %.500s port %d", remote_ip, remote_port);
- packet_close();
+ ssh_packet_close(ssh);
+ active_state = NULL; /* XXX legacy API compat */
+ free(ssh);
+ ssh= NULL;
if (use_privsep)
mm_terminate();
_______________________________________________
openssh-unix-dev mailing list
openssh-unix-dev@xxxxxxxxxxx
https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev