Nikos Mavrogiannopoulos <[email protected]> writes:

>  I was debugging an invalid memory access in gnutls and realized that
> the issue is in memxor3 of nettle (2.7.x branch). I have not yet a fix
> for that, but the attached patch modifies the memxor-test.c to reproduce 
> the issue. 

Hmm. If you have, e.g., a 14 byte block starting at address 0x1001, it
usually harmless to do read that data as a two aligned reads at address
0x1000 and 0x1008, and then ignore the data outside of the area.
Valgrind usually doesn't warn about that.

Now memxor on x86_64 is a bit special, since it tries to align the
*writes*, but it does full-word *unaligned* reads. In this case, reading
outside of the input area may cause serious problems, e.g, crossing a
page boundary.

So this might be a fairly serious bug in the memxor assembly code.

>  void
>  test_main(void)
>  {
> +  uint8_t dst_buf[MAX_SIZE];
> +  uint8_t *c_buf;
> +  uint8_t *d_buf;
>    const uint8_t *a = H("ecc8737f 38f2f9e8 86b9d84c 42a9c7ef"
>                      "27a50860 49c6be97 c5cc6c35 3981b367"
>                      "f8b4397b 951e3b2f 35749fe1 25884fa6"
> @@ -144,4 +148,15 @@ test_main(void)
>         for (align_b = 0; align_b < ALIGN_SIZE; align_b++)
>           test_memxor3 (a, b, c, size[i], align_dst, align_a, align_b);
>       }
> +
> +  c_buf = malloc(111);
> +  d_buf = malloc(111);
> +  memset(c_buf, 1, 111);
> +  memset(d_buf, 3, 111);
> +
> +  memxor3 (dst_buf+13, c_buf+96, d_buf, 15);
> +
> +  ASSERT(dst_buf[14] == 2);
> +  free(c_buf);
> +  free(d_buf);
>  }

What result do you get with this test? Does it fail the assert, or does
it exit successfuly when running without valgrind, but generate
warnings/errors with valgrind?

The memxor-test.c in the repo tries to run memxor and memxor3 with all
combinations of alignments and a selection of different sizes. And I get
no warnings from

  make check EMULATOR='$(VALGRIND)' TS_ALL=memxor-test

As far as I see, those tests *should* include the same size and alignments
as in your test, so I wonder what's going on here.

Regards,
/Niels

-- 
Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26.
Internet email is subject to wholesale government surveillance.
_______________________________________________
nettle-bugs mailing list
[email protected]
http://lists.lysator.liu.se/mailman/listinfo/nettle-bugs

Reply via email to