openssh - Fix a broken assignment
authorMatthew Dillon <dillon@apollo.backplane.com>
Tue, 11 Apr 2017 05:01:03 +0000 (22:01 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 11 Apr 2017 05:01:03 +0000 (22:01 -0700)
* Fix a broken assignment.  NOTE: OpenSSH master already has this fix.

* Document dangerous sscanf()s, but note that it is not possible for a
  buffer overflow to occur in these cases.

Dragonfly-bugs: 3007 (dcb)

crypto/openssh/ssh_api.c
crypto/openssh/sshconnect.c
crypto/openssh/sshconnect2.c
crypto/openssh/sshd.c

index 2a9f149..c30634a 100644 (file)
@@ -357,6 +357,9 @@ _ssh_read_banner(struct ssh *ssh, char **bannerp)
        /*
         * Check that the versions match.  In future this might accept
         * several versions and set appropriate flags to handle them.
+        *
+        * NOTE: unbounded string to remote_version, but limited size of
+        *       buf prevents overflow.
         */
        if (sscanf(buf, "SSH-%d.%d-%[^\n]\n",
            &remote_major, &remote_minor, remote_version) != 3)
index 6a413b6..e32d9ab 100644 (file)
@@ -625,6 +625,9 @@ ssh_exchange_identification(int timeout_ms)
        /*
         * Check that the versions match.  In future this might accept
         * several versions and set appropriate flags to handle them.
+        *
+        * NOTE: unbounded string to remote_version, but limited size of
+        *       buf prevents overflow.
         */
        if (sscanf(server_version_string, "SSH-%d.%d-%[^\n]\n",
            &remote_major, &remote_minor, remote_version) != 3)
index fae8b0f..5078eb9 100644 (file)
@@ -1620,7 +1620,7 @@ ssh_keysign(struct sshkey *key, u_char **sigp, size_t *lenp,
        if ((b = sshbuf_new()) == NULL)
                fatal("%s: sshbuf_new failed", __func__);
        /* send # of sock, data to be signed */
-       if ((r = sshbuf_put_u32(b, sock) != 0) ||
+       if ((r = sshbuf_put_u32(b, sock)) != 0 ||
            (r = sshbuf_put_string(b, data, datalen)) != 0)
                fatal("%s: buffer error: %s", __func__, ssh_err(r));
        if (ssh_msg_send(to[1], version, b) == -1)
index 799c771..b66d5f9 100644 (file)
@@ -473,6 +473,9 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out)
        /*
         * Check that the versions match.  In future this might accept
         * several versions and set appropriate flags to handle them.
+        *
+        * NOTE: unbounded string to remote_version, but limited size of
+        *       buf prevents overflow.
         */
        if (sscanf(client_version_string, "SSH-%d.%d-%[^\n]\n",
            &remote_major, &remote_minor, remote_version) != 3) {