Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kSxam-0004Tm-KP for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Oct 2020 07:22:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kSxal-00058U-Et for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Oct 2020 07:22:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kSxal-000585-8M for pgsql-hackers@lists.postgresql.org; Thu, 15 Oct 2020 07:22:27 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kSxaj-0001Cn-Rs for pgsql-hackers@lists.postgresql.org; Thu, 15 Oct 2020 07:22:26 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id DEC8E5C0145 for ; Thu, 15 Oct 2020 03:22:22 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Thu, 15 Oct 2020 03:22:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paquier.xyz; h= date:from:to:subject:message-id:mime-version:content-type; s= fm3; bh=fibuKVT53BCjONP707Zf+fKNj6HyrqVkNVq4hr9zewY=; b=BBrqK4a5 YucgzQMDeamQgEKo+sYuaWCRnuzO7WuvYReH8g4f/kxUg2eVfZUxx/FqW+3m6inI S9bbzEMVD2wXWePTCpbH04b/jYUqc6tZmcS47C26p0NiZ3CpU8r7pNAv+yXdwDSm aeu+d1a6+zlWbycQqzsFuYA/bLKhKp7wVKy0fRBfTBGZo/bWCYRZbZJmg58cEoPl Ytm83dIIad1LzOX+Sao3GY+AdqMYBMPtFbgr/d7Nkm2qpw+JuOBUA5m2A2hpmHwj HGyqfKp45PxPjXnHHhKSFdtmBs/8AwChKWR1r+IsqMI058mx0qIzS6aqA75Gz3u2 zxaVURc3MLGiYQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; bh=fibuKVT53BCjONP707Zf+fKNj6Hyr qVkNVq4hr9zewY=; b=ZitEHGbADlufhSuVjy8u1pzzau666zAPix36FJDJo7cDL FCUeW+/5aS3eq0ZGAp1E13t7zTGLKa9bHnyPDlns1Cax41IQ1d0PzY6ieQ3748Pz Q6CNzev4pi+pgRF04eYHXWrlYze5yCBD8ejJnLGT+Bmdso/7t8wp5pEDXbVHlCAl iAeOI09tJtMET2bSonzAhoHYr8tWGTN/MnXlecCF3D+Mht7NO+WioDouWZTSbFTR fAfKsLfqaON1EXBErr/SWDkW2A3VAgmVliVR/Kz71EXFf7+v1UnvN0T7GwoRuJt2 0Ky+K03xDznknpySqQVUAO5XQYG7r8LXr7h8EXXmg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedriedvgdduudekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne gfrhhlucfvnfffucdljedtmdenucfjughrpeffhffvuffkgggtugesghdtreertddtvden ucfhrhhomhepofhitghhrggvlhcurfgrqhhuihgvrhcuoehmihgthhgrvghlsehprghquh hivghrrdighiiiqeenucggtffrrghtthgvrhhnpedvtdffteegtdfhuefgvedvtdejgfeu gfeggfejgfdvhefgfeevieektdelkefhgfenucfkphepudduuddruddtvddrudektddrud ekheenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehm ihgthhgrvghlsehprghquhhivghrrdighiii X-ME-Proxy: Received: from paquier.xyz (ee0822lan1.rev.em-net.ne.jp [111.102.180.185]) by mail.messagingengine.com (Postfix) with ESMTPA id 60676306467E for ; Thu, 15 Oct 2020 03:22:21 -0400 (EDT) Date: Thu, 15 Oct 2020 16:22:12 +0900 From: Michael Paquier To: Postgres hackers Subject: Possible memory leak in pgcrypto with EVP_MD_CTX Message-ID: <20201015072212.GC2305@paquier.xyz> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="vmttodhTwj0NAgWp" Content-Disposition: inline List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --vmttodhTwj0NAgWp Content-Type: multipart/mixed; boundary="g7w8+K/95kPelPD2" Content-Disposition: inline --g7w8+K/95kPelPD2 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi all, It happens that pgcrypto has the following leak if a digest cannot be initialized: --- a/contrib/pgcrypto/openssl.c +++ b/contrib/pgcrypto/openssl.c @@ -202,6 +202,7 @@ px_find_digest(const char *name, PX_MD **res) } if (EVP_DigestInit_ex(ctx, md, NULL) == 0) { + EVP_MD_CTX_destroy(ctx); pfree(digest); return -1; } That's a bit annoying, because this memory is allocated directly by OpenSSL, and Postgres does not know how to free it until it gets registered in the list of open_digests that would be used by the cleanup callback, so I think that we had better back-patch this fix. Thoughts? -- Michael --g7w8+K/95kPelPD2 Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="pgcrypto-leak.patch" diff --git a/contrib/pgcrypto/openssl.c b/contrib/pgcrypto/openssl.c index 90951a8ae7..ed96e4ce53 100644 --- a/contrib/pgcrypto/openssl.c +++ b/contrib/pgcrypto/openssl.c @@ -202,6 +202,7 @@ px_find_digest(const char *name, PX_MD **res) } if (EVP_DigestInit_ex(ctx, md, NULL) == 0) { + EVP_MD_CTX_destroy(ctx); pfree(digest); return -1; } --g7w8+K/95kPelPD2-- --vmttodhTwj0NAgWp Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEG72nH6vTowiyblFKnvQgOdbyQH0FAl+H+KQACgkQnvQgOdby QH3XkA//bIHYHHhaku7FKOPC6qNCnkwNofQdEfMFGvaoL8XGGQVfkBevTVh61cfw sInHDDTQmnkxOgt9W9gUkOtaadvb26x2kusfbh5r2KseODfZTeWkRQzSuZpJJPhH eQa7lY9hSkMRNmcYJhP4XMhoXwnHmxbsmiXZzaBaiq97XtnKyrl6w5fyoc88EpLL 8g9ekr0JsMGcPm8zLOywb8I26IA/+a5q8l1cw26qtxcNJ2w2ZWN9QMbfty5PBr+m pZvQF6nCyhWB/eW0m5N9kHsOSb/OKuglKF7klChDosnV9GkYX8/kekuAemnYQyCn FYBlAHcJmGiRB61SoWQ5qeNRsXe/LD1BD1qLmakWkWdK1XEL4HYcxOtXCtVTTxwb jk+mtV8Izj/GnOZ753XTgyxoD0LKYYTEKkxsPB5bBhbCGSMVcLhyg1gOZWLbvkON ADjzlum3KRbUGAqdKPTLDvYaAcM0OvQWOpkhKsruBy2b5551NpmyYNlMNDVRTm28 R7TATWtfcunx1oyeVyDMOl2RuIM7AUej79HGj0OmX8HbEFp+lmE8xCMbvye68efl FkKbhDqRAujXFDzKKHXQ+rHo2/1G7do7fEMc8TsNtAqpGodwdBzN6hb6rzBwCuaz bW9qNsKYaRzHGqMJVVN5zIAc2cO4JB5YDKOoXep/Ta+X2kMDfXw= =Qg/p -----END PGP SIGNATURE----- --vmttodhTwj0NAgWp--