public inbox for [email protected]  
help / color / mirror / Atom feed
From: Noah Misch <[email protected]>
To: Zhihong Yu <[email protected]>
Cc: PostgreSQL-development <[email protected]>
Subject: Re: null iv parameter passed to combo_init()
Date: Sat, 8 Jan 2022 17:52:02 -0800
Message-ID: <[email protected]> (raw)
In-Reply-To: <CALNJ-vSBb2Ees=KB0frYBh7foK-QNZMbK7Vz66bUJa09D+CHAw@mail.gmail.com>
References: <CALNJ-vSBb2Ees=KB0frYBh7foK-QNZMbK7Vz66bUJa09D+CHAw@mail.gmail.com>

On Fri, Jan 07, 2022 at 04:32:01PM -0800, Zhihong Yu wrote:
> In contrib/pgcrypto/pgcrypto.c :
> 
>     err = px_combo_init(c, (uint8 *) VARDATA_ANY(key), klen, NULL, 0);
> 
> Note: NULL is passed as iv.
> 
> When combo_init() is called,
> 
>         if (ivlen > ivs)
>             memcpy(ivbuf, iv, ivs);
>         else
>             memcpy(ivbuf, iv, ivlen);
> 
> It seems we need to consider the case of null being passed as iv for
> memcpy() because of this:
> 
> /usr/include/string.h:44:28: note: nonnull attribute specified here

I agree it's time to fix cases like this, given
https://postgr.es/m/flat/[email protected].  However,
it should be one patch fixing all (or at least many) of them.

> --- a/contrib/pgcrypto/px.c
> +++ b/contrib/pgcrypto/px.c
> @@ -198,10 +198,13 @@ combo_init(PX_Combo *cx, const uint8 *key, unsigned klen,
>  	if (ivs > 0)
>  	{
>  		ivbuf = palloc0(ivs);
> -		if (ivlen > ivs)
> -			memcpy(ivbuf, iv, ivs);
> -		else
> -			memcpy(ivbuf, iv, ivlen);
> +		if (iv != NULL)
> +		{
> +			if (ivlen > ivs)
> +				memcpy(ivbuf, iv, ivs);
> +			else
> +				memcpy(ivbuf, iv, ivlen);
> +		}
>  	}

If someone were to pass NULL iv with nonzero ivlen, that will silently
malfunction.  I'd avoid that risk by writing this way:

--- a/contrib/pgcrypto/px.c
+++ b/contrib/pgcrypto/px.c
@@ -202,3 +202,3 @@ combo_init(PX_Combo *cx, const uint8 *key, unsigned klen,
 			memcpy(ivbuf, iv, ivs);
-		else
+		else if (ivlen > 0)
 			memcpy(ivbuf, iv, ivlen);

That also gives the compiler an additional optimization strategy.






view thread (4+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: null iv parameter passed to combo_init()
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox