Additional ssh patches relating to the same fatal() cleanup issue. They
authorMatthew Dillon <dillon@dragonflybsd.org>
Wed, 17 Sep 2003 02:01:05 +0000 (02:01 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Wed, 17 Sep 2003 02:01:05 +0000 (02:01 +0000)
should just fix 'fatal' to not try to clean things up but, oh well.  This
is a slightly modified security fix from 3.7.1.

crypto/openssh/buffer.c
crypto/openssh/channels.c
crypto/openssh/version.h

index 97ce19d..97fb924 100644 (file)
@@ -10,7 +10,7 @@
  * incompatible with the protocol description in the RFC file, it must be
  * called by a name other than "ssh" or "Secure Shell".
  *
- * $DragonFly: src/crypto/openssh/Attic/buffer.c,v 1.3 2003/09/16 16:59:41 dillon Exp $
+ * $DragonFly: src/crypto/openssh/Attic/buffer.c,v 1.4 2003/09/17 02:01:05 dillon Exp $
  */
 
 #include "includes.h"
@@ -25,10 +25,11 @@ RCSID("$OpenBSD: buffer.c,v 1.16 2002/06/26 08:54:18 markus Exp $");
 void
 buffer_init(Buffer *buffer)
 {
-       buffer->alloc = 4096;
-       buffer->buf = xmalloc(buffer->alloc);
-       buffer->offset = 0;
-       buffer->end = 0;
+       const u_int len = 4096;
+
+       bzero(buffer, sizeof(Buffer));
+       buffer->buf = xmalloc(len);
+       buffer->alloc = len;
 }
 
 /* Frees any memory used for the buffer. */
@@ -36,8 +37,10 @@ buffer_init(Buffer *buffer)
 void
 buffer_free(Buffer *buffer)
 {
-       memset(buffer->buf, 0, buffer->alloc);
-       xfree(buffer->buf);
+       if (buffer->alloc > 0) {
+               memset(buffer->buf, 0, buffer->alloc);
+               xfree(buffer->buf);
+       }
 }
 
 /*
index 788f6ac..0d00cea 100644 (file)
@@ -41,7 +41,7 @@
 #include "includes.h"
 RCSID("$OpenBSD: channels.c,v 1.183 2002/09/17 07:47:02 itojun Exp $");
 RCSID("$FreeBSD: src/crypto/openssh/channels.c,v 1.1.1.1.2.8 2003/02/03 17:31:06 des Exp $");
-RCSID("$DragonFly: src/crypto/openssh/Attic/channels.c,v 1.2 2003/06/17 04:24:36 dillon Exp $");
+RCSID("$DragonFly: src/crypto/openssh/Attic/channels.c,v 1.3 2003/09/17 02:01:05 dillon Exp $");
 
 #include "ssh.h"
 #include "ssh1.h"
@@ -231,12 +231,13 @@ channel_new(char *ctype, int type, int rfd, int wfd, int efd,
        if (found == -1) {
                /* There are no free slots.  Take last+1 slot and expand the array.  */
                found = channels_alloc;
-               channels_alloc += 10;
                if (channels_alloc > 10000)
                        fatal("channel_new: internal error: channels_alloc %d "
                            "too big.", channels_alloc);
+               channels = xrealloc(channels,
+                   (channels_alloc + 10) * sizeof(Channel *));
+               channels_alloc += 10;
                debug2("channel: expanding %d", channels_alloc);
-               channels = xrealloc(channels, channels_alloc * sizeof(Channel *));
                for (i = found; i < channels_alloc; i++)
                        channels[i] = NULL;
        }
index 4ad399d..2e45c85 100644 (file)
@@ -1,12 +1,12 @@
 /* $OpenBSD: version.h,v 1.35 2002/10/01 13:24:50 markus Exp $ */
 /* $FreeBSD: src/crypto/openssh/version.h,v 1.1.1.1.2.10 2003/02/03 17:31:08 des Exp $ */
-/* $DragonFly: src/crypto/openssh/Attic/version.h,v 1.3 2003/09/16 16:46:28 dillon Exp $ */
+/* $DragonFly: src/crypto/openssh/Attic/version.h,v 1.4 2003/09/17 02:01:05 dillon Exp $ */
 
 #ifndef SSH_VERSION
 
 #define SSH_VERSION             (ssh_version_get())
 #define SSH_VERSION_BASE        "OpenSSH_3.5p1"
-#define SSH_VERSION_ADDENDUM    "FreeBSD-20030916"
+#define SSH_VERSION_ADDENDUM    "DragonFly-20030916B"
 
 const char *ssh_version_get(void);
 void ssh_version_set_addendum(const char *add);