OpenSSH 3.2.2p1 sshd: fatal: xfree: NULL pointer given as argument

Markus Friedl markus at openbsd.org
Tue May 21 20:35:02 EST 2002


could you please print put b.buf after buffer_init and before buffer_free ?

On Mon, May 20, 2002 at 01:27:01PM -0500, Phil Howard wrote:
> So kexgex.c at line 93 looks like the culprit.  The code around there
> looks like (with my change in place):
> =============================================================================
> static u_char *
> kexgex_hash(
>     char *client_version_string,
>     char *server_version_string,
>     char *ckexinit, int ckexinitlen,
>     char *skexinit, int skexinitlen,
>     u_char *serverhostkeyblob, int sbloblen,
>     int min, int wantbits, int max, BIGNUM *prime, BIGNUM *gen,
>     BIGNUM *client_dh_pub,
>     BIGNUM *server_dh_pub,
>     BIGNUM *shared_secret)
> {
>         Buffer b;
>         static u_char digest[EVP_MAX_MD_SIZE];
>         const EVP_MD *evp_md = EVP_sha1();
>         EVP_MD_CTX md;
> 
>         buffer_init(&b);

allocates
	b.buf

>         buffer_put_cstring(&b, client_version_string);
>         buffer_put_cstring(&b, server_version_string);
> 
>         /* kexinit messages: fake header: len+SSH2_MSG_KEXINIT */
>         buffer_put_int(&b, ckexinitlen+1);
>         buffer_put_char(&b, SSH2_MSG_KEXINIT);
>         buffer_append(&b, ckexinit, ckexinitlen);
>         buffer_put_int(&b, skexinitlen+1);
>         buffer_put_char(&b, SSH2_MSG_KEXINIT);
>         buffer_append(&b, skexinit, skexinitlen);
> 
>         buffer_put_string(&b, serverhostkeyblob, sbloblen);
>         if (min == -1 || max == -1)
>                 buffer_put_int(&b, wantbits);
>         else {
>                 buffer_put_int(&b, min);
>                 buffer_put_int(&b, wantbits);
>                 buffer_put_int(&b, max);
>         }
>         buffer_put_bignum2(&b, prime);
>         buffer_put_bignum2(&b, gen);
>         buffer_put_bignum2(&b, client_dh_pub);
>         buffer_put_bignum2(&b, server_dh_pub);
>         buffer_put_bignum2(&b, shared_secret);
> 
> #ifdef DEBUG_KEXDH
>         buffer_dump(&b);
> #endif
>         EVP_DigestInit(&md, evp_md);
>         EVP_DigestUpdate(&md, buffer_ptr(&b), buffer_len(&b));
>         EVP_DigestFinal(&md, digest, NULL);
> 
> {debug3("kexgex.c#93 buffer_free");buffer_free(&b);}

free's
	b.buf



More information about the openssh-unix-dev mailing list