[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rpm-cvs
Subject:    [CVS] RPM: rpm-5_4: rpm/ CHANGES devtool.conf rpm/rpmdb/ signature.c r...
From:       "Jeff Johnson" <jbj () rpm5 ! org>
Date:       2011-10-01 14:30:35
Message-ID: 20111001143035.7C5279471C () rpm5 ! org
[Download RAW message or body]

  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   01-Oct-2011 16:30:35
  Branch: rpm-5_4                          Handle: 2011100114303301

  Modified files:           (Branch: rpm-5_4)
    rpm                     CHANGES devtool.conf
    rpm/rpmdb               signature.c
    rpm/rpmio               rpmbc.c rpmgc.c rpmnss.c rpmssl.c

  Log:
    - rsa: avoid memory leak on quick-check error returns.

  Summary:
    Revision    Changes     Path
    1.3501.2.179+1  -0      rpm/CHANGES
    2.365.2.16  +1  -1      rpm/devtool.conf
    1.68.2.2    +3  -0      rpm/rpmdb/signature.c
    2.35.2.1    +6  -2      rpm/rpmio/rpmbc.c
    2.34.2.1    +8  -2      rpm/rpmio/rpmgc.c
    1.40.2.1    +9  -2      rpm/rpmio/rpmnss.c
    2.42.2.1    +2  -2      rpm/rpmio/rpmssl.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3501.2.178 -r1.3501.2.179 CHANGES
  --- rpm/CHANGES	30 Sep 2011 20:19:37 -0000	1.3501.2.178
  +++ rpm/CHANGES	1 Oct 2011 14:30:33 -0000	1.3501.2.179
  @@ -1,4 +1,5 @@
   5.4.2 -> 5.4.3:
  +    - jbj: rsa: avoid memory leak on quick-check error returns.
       - jbj: gpsee: snapshot RPM+JS resurrection work-in-progress for release.
       - jbj: leg: stub-in a fictional architecture to restructure the
   	ARM namespace based on "attributes".
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/devtool.conf
  ============================================================================
  $ cvs diff -u -r2.365.2.15 -r2.365.2.16 devtool.conf
  --- rpm/devtool.conf	30 Sep 2011 20:19:37 -0000	2.365.2.15
  +++ rpm/devtool.conf	1 Oct 2011 14:30:33 -0000	2.365.2.16
  @@ -446,7 +446,7 @@
           --without-bash \
           --without-rc \
           --without-js \
  -        --with-gpsee \
  +        --without-gpsee \
           --with-python \
           --with-pythonembed=/usr/lib:/usr/include/python2.6 \
           --with-perl \
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/signature.c
  ============================================================================
  $ cvs diff -u -r1.68.2.1 -r1.68.2.2 signature.c
  --- rpm/rpmdb/signature.c	1 Jan 2011 14:39:55 -0000	1.68.2.1
  +++ rpm/rpmdb/signature.c	1 Oct 2011 14:30:34 -0000	1.68.2.2
  @@ -746,6 +746,9 @@
       rpmRC res = RPMRC_OK;
       int xx;
   
  +if (_rpmhkp_debug)
  +fprintf(stderr, "--> %s(%p,%p,%p) sig %p sigp %p\n", __FUNCTION__, dig, t, rsactx, sig, sigp);
  +
   assert(dig != NULL);
   assert(rsactx != NULL);
   assert(sigp != NULL);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmbc.c
  ============================================================================
  $ cvs diff -u -r2.35 -r2.35.2.1 rpmbc.c
  --- rpm/rpmio/rpmbc.c	11 Oct 2010 18:39:37 -0000	2.35
  +++ rpm/rpmio/rpmbc.c	1 Oct 2011 14:30:34 -0000	2.35.2.1
  @@ -122,8 +122,7 @@
   dig->hash_algoN = _pgpHashAlgo2Name(sigp->hash_algo);
   
   assert(sigp->hash_algo == rpmDigestAlgo(ctx));
  -    if (prefix == NULL)
  -	goto exit;
  +assert(prefix != NULL);
   
       /*
        * The no. of bytes for hash + PKCS1 padding is needed.
  @@ -144,6 +143,7 @@
   bc->digest = _free(bc->digest);
   bc->digestlen = 0;
       xx = rpmDigestFinal(ctx, (void **)&bc->digest, &bc->digestlen, 1);
  +    ctx = NULL;		/* XXX avoid double free */
       hexstr = tt = xmalloc(2 * nb + 1);
       memset(tt, (int) 'f', (2 * nb));
       tt[0] = '0'; tt[1] = '0';
  @@ -170,6 +170,10 @@
       }
   
   exit:
  +    if (ctx) {		/* XXX Free the context on error returns. */
  +	xx = rpmDigestFinal(ctx, NULL, NULL, 0);
  +	ctx = NULL;
  +    }
   SPEW(0, !rc, dig);
       return rc;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmgc.c
  ============================================================================
  $ cvs diff -u -r2.34 -r2.34.2.1 rpmgc.c
  --- rpm/rpmio/rpmgc.c	21 Jun 2010 01:00:03 -0000	2.34
  +++ rpm/rpmio/rpmgc.c	1 Oct 2011 14:30:34 -0000	2.34.2.1
  @@ -89,7 +89,7 @@
       rpmgc gc = dig->impl;
       gcry_error_t err;
       const char * hash_algo_name = NULL;
  -    int rc;
  +    int rc = 1;		/* assume error */
       int xx;
   pgpDigParams pubp = pgpGetPubkey(dig);
   dig->pubkey_algoN = rpmgcPubkeyAlgo2Name(pubp->pubkey_algo);
  @@ -134,9 +134,10 @@
   	break;
       }
       if (hash_algo_name == NULL)
  -	return 1;
  +	goto exit;
   
       xx = rpmDigestFinal(ctx, (void **)&gc->digest, &gc->digestlen, 0);
  +    ctx = NULL;		/* XXX avoid double free */
   
       /* Set RSA hash. */
       err = rpmgcErr(gc, "RSA c",
  @@ -150,6 +151,11 @@
   	rc = memcmp(s, t, sizeof(sigp->signhash16));
       }
   
  +exit:
  +    if (ctx) {		/* XXX Free the context on error returns. */
  +	xx = rpmDigestFinal(ctx, NULL, NULL, 0);
  +	ctx = NULL;
  +    }
   SPEW(0, !rc, dig);
       return rc;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmnss.c
  ============================================================================
  $ cvs diff -u -r1.40 -r1.40.2.1 rpmnss.c
  --- rpm/rpmio/rpmnss.c	2 Dec 2010 14:35:29 -0000	1.40
  +++ rpm/rpmio/rpmnss.c	1 Oct 2011 14:30:34 -0000	1.40.2.1
  @@ -332,7 +332,7 @@
   	/*@modifies dig @*/
   {
       rpmnss nss = dig->impl;
  -    int rc;
  +    int rc = 1;		/* assume error */
       int xx;
   pgpDigParams pubp = pgpGetPubkey(dig);
   dig->pubkey_algoN = _pgpPubkeyAlgo2Name(pubp->pubkey_algo);
  @@ -374,14 +374,21 @@
   	break;
       }
       if (nss->sigalg == SEC_OID_UNKNOWN)
  -	return 1;
  +	goto exit;
   
   nss->digest = _free(nss->digest);
   nss->digestlen = 0;
       xx = rpmDigestFinal(ctx, (void **)&nss->digest, &nss->digestlen, 0);
  +    ctx = NULL;		/* XXX avoid double free */
   
       /* Compare leading 16 bits of digest for quick check. */
       rc = memcmp(nss->digest, sigp->signhash16, sizeof(sigp->signhash16));
  +
  +exit:
  +    if (ctx) {		/* XXX Free the context on error returns. */
  +	xx = rpmDigestFinal(ctx, NULL, NULL, 0);
  +	ctx = NULL;
  +    }
   SPEW(0, !rc, dig);
       return rc;
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmssl.c
  ============================================================================
  $ cvs diff -u -r2.42 -r2.42.2.1 rpmssl.c
  --- rpm/rpmio/rpmssl.c	2 Dec 2010 14:35:29 -0000	2.42
  +++ rpm/rpmio/rpmssl.c	1 Oct 2011 14:30:34 -0000	2.42.2.1
  @@ -102,8 +102,7 @@
   dig->hash_algoN = rpmsslHashAlgo2Name(sigp->hash_algo);
   
   assert(sigp->hash_algo == rpmDigestAlgo(ctx));
  -    if (prefix == NULL)
  -	return 1;
  +assert(prefix != NULL);
   
   /* XXX FIXME: do PKCS1 padding in binary not hex */
   /* XXX FIXME: should this lazy free be done elsewhere? */
  @@ -137,6 +136,7 @@
       signhash16[1] = (rpmuint8_t) (nibble(s[2]) << 4) | nibble(s[3]);
   /*@=type@*/
       rc = memcmp(signhash16, sigp->signhash16, sizeof(sigp->signhash16));
  +
   SPEW(0, !rc, dig);
       return rc;
   }
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic