[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