Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Dec 2001 18:10:02 -0800 (PST)
From:      ian j hart <ianjhart@ntlworld.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/32175: ssh-keygen -p core dumps
Message-ID:  <200112200210.fBK2A2633931@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/32175; it has been noted by GNATS.

From: ian j hart <ianjhart@ntlworld.com>
To: freebsd-gnats-submit@freebsd.org, anarcat@anarcat.dyndns.org
Cc:  
Subject: Re: bin/32175: ssh-keygen -p core dumps
Date: Thu, 20 Dec 2001 02:08:29 +0000

 Printing the comment is the source of the crash.
 The error appears to be in /usr/src/crypto/openssh/authfile.c
 
 *** authfile.c.orig     Thu Dec 20 01:17:00 2001
 --- authfile.c  Thu Dec 20 01:21:33 2001
 ***************
 *** 556,562 ****
         lseek(fd, (off_t) 0, SEEK_SET);         /* rewind */
         if (pub == NULL) {
                 /* closes fd */
 !               return key_load_private_pem(fd, KEY_UNSPEC, passphrase,
 NULL);
         } else {
                 /* it's a SSH v1 key if the public key part is readable
 */
                 key_free(pub);
 --- 556,562 ----
         lseek(fd, (off_t) 0, SEEK_SET);         /* rewind */
         if (pub == NULL) {
                 /* closes fd */
 !               return key_load_private_pem(fd, KEY_UNSPEC, passphrase,
 commentp);
         } else {
                 /* it's a SSH v1 key if the public key part is readable
 */
                 key_free(pub);
 
 commentp is the address of a pointer to a heap? allocated
 string (for the comment). key_load_private_pem will
 allocate memory and intialise commentp, if it gets
 a non-null value.
 
 As authfile.c is part of libssl someone who knows about
 this stuff should verify this fix. Because of this I
 present an alternative workaround.
 
 *** ssh-keygen.c.orig   Thu Dec 20 01:16:52 2001
 --- ssh-keygen.c        Thu Dec 20 01:20:49 2001
 ***************
 *** 456,462 ****
   void
   do_change_passphrase(struct passwd *pw)
   {
 !       char *comment;
         char *old_passphrase, *passphrase1, *passphrase2;
         struct stat st;
         Key *private;
 --- 456,462 ----
   void
   do_change_passphrase(struct passwd *pw)
   {
 !       char *comment = NULL;
         char *old_passphrase, *passphrase1, *passphrase2;
         struct stat st;
         Key *private;
 
 This only affects ssh-keygen. The offending printf survives
 the null pointer, as does the xfree() later in the function.
 
 Call tree:
 ssh-keygen.c:	457:void do_change_passphrase(struct passwd *pw)
 		477:private = key_load_private(identity_file, old_passphrase ,
 &comment);
 authfile.c:	541:Key *key_load_private(const char *filename, const char
 *passphrase, char **commentp)
 		559:return key_load_private_pem(fd, KEY_UNSPEC, passphrase, NULL); 
 <--- error
 		435:Key *key_load_private_pem(int fd, int type, const char
 *passphrase, char **commentp)
 		478:        if (prv != NULL && commentp)
 		                *commentp = xstrdup(name);
 
 I wasn't sure whether to quote the whole thing here. Perhaps
 someone could advise me on "style".
 
 -- 
 ian j hart

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200112200210.fBK2A2633931>