[PATCH 4/6] Fix undefined behavior wrt memcpy

Jussi Kivilinna jussi.kivilinna at iki.fi
Thu Jul 16 16:37:57 CEST 2015


Hello,

Patch looks good and should definitely be merged. I will push it to repo when I get to my computer in a week or two.

-Jussi

16.7.2015 7.26 NIIBE Yutaka <gniibe at fsij.org> kirjoitti:
>
> Hello, Jussi, 
>
> Last week, following patch was submitted to gcrypt-devel.  Since it's 
> the code you wrote, I write to you. 
>
> I think that memcpy can be called with 0 length, but pointers should 
> be valid one (not NULL), even though most implementations works well. 
> So, it is worth to consider the patch for the correctness of the code. 
>
> On 07/10/2015 12:11 AM, Peter Wu wrote: 
> > * cipher/cipher-gcm.c: Do not copy zero bytes from an empty buffer. Let 
> >   the function continue to add padding as needed though. 
> > * cipher/mac-poly1305.c: If the caller requested to finish the hash 
> >   function without a copy of the result, return immediately. 
> > -- 
> > Caught by UndefinedBehaviorSanitizer. 
> > 
> > Signed-off-by: Peter Wu <peter at lekensteyn.nl> 
> > --- 
> >  cipher/cipher-gcm.c   | 2 +- 
> >  cipher/mac-poly1305.c | 3 +++ 
> >  2 files changed, 4 insertions(+), 1 deletion(-) 
> > 
> > diff --git a/cipher/cipher-gcm.c b/cipher/cipher-gcm.c 
> > index 6b13fc5..3711a1d 100644 
> > --- a/cipher/cipher-gcm.c 
> > +++ b/cipher/cipher-gcm.c 
> > @@ -474,7 +474,7 @@ do_ghash_buf(gcry_cipher_hd_t c, byte *hash, const byte *buf, 
>> >    do 
> >      { 
> > -      if (buflen + unused < blocksize || unused > 0) 
> > +      if (buflen > 0 && (buflen + unused < blocksize || unused > 0)) 
> >          { 
> >            n = blocksize - unused; 
> >            n = n < buflen ? n : buflen; 
> > diff --git a/cipher/mac-poly1305.c b/cipher/mac-poly1305.c 
> > index 76b369a..b80f87d 100644 
> > --- a/cipher/mac-poly1305.c 
> > +++ b/cipher/mac-poly1305.c 
> > @@ -260,6 +260,9 @@ poly1305mac_read (gcry_mac_hd_t h, unsigned char *outbuf, size_t *outlen) 
> >        mac_ctx->marks.tag = 1; 
> >      } 
>> > +  if (*outlen == 0) 
> > +    return 0; 
> > + 
> >    if (*outlen <= POLY1305_TAGLEN) 
> >      buf_cpy (outbuf, mac_ctx->tag, *outlen); 
> >    else 
> > 
>
>
> _______________________________________________ 
> Gcrypt-devel mailing list 
> Gcrypt-devel at gnupg.org 
> http://lists.gnupg.org/mailman/listinfo/gcrypt-devel 
>


More information about the Gcrypt-devel mailing list