From: "Daniel P. Berrange" <berrange@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 09/12] crypto: fix stack-buffer-overflow error
Date: Fri, 8 Dec 2017 09:49:18 +0000 [thread overview]
Message-ID: <20171208094918.GB11767@redhat.com> (raw)
In-Reply-To: <20171208005825.14587-10-marcandre.lureau@redhat.com>
On Fri, Dec 08, 2017 at 01:58:22AM +0100, Marc-André Lureau wrote:
> ASAN complains about:
>
> ==8856==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffd8a1fe168 at pc 0x561136cb4451 bp 0x7ffd8a1fe130 sp 0x7ffd8a1fd8e0
> READ of size 16 at 0x7ffd8a1fe168 thread T0
> #0 0x561136cb4450 in __asan_memcpy (/home/elmarco/src/qq/build/tests/test-crypto-ivgen+0x110450)
> #1 0x561136d2a6a7 in qcrypto_ivgen_essiv_calculate /home/elmarco/src/qq/crypto/ivgen-essiv.c:83:5
> #2 0x561136d29af8 in qcrypto_ivgen_calculate /home/elmarco/src/qq/crypto/ivgen.c:72:12
> #3 0x561136d07c8e in test_ivgen /home/elmarco/src/qq/tests/test-crypto-ivgen.c:148:5
> #4 0x7f77772c3b04 in test_case_run /home/elmarco/src/gnome/glib/builddir/../glib/gtestutils.c:2237
> #5 0x7f77772c3ec4 in g_test_run_suite_internal /home/elmarco/src/gnome/glib/builddir/../glib/gtestutils.c:2321
> #6 0x7f77772c3f6d in g_test_run_suite_internal /home/elmarco/src/gnome/glib/builddir/../glib/gtestutils.c:2333
> #7 0x7f77772c3f6d in g_test_run_suite_internal /home/elmarco/src/gnome/glib/builddir/../glib/gtestutils.c:2333
> #8 0x7f77772c3f6d in g_test_run_suite_internal /home/elmarco/src/gnome/glib/builddir/../glib/gtestutils.c:2333
> #9 0x7f77772c4184 in g_test_run_suite /home/elmarco/src/gnome/glib/builddir/../glib/gtestutils.c:2408
> #10 0x7f77772c2e0d in g_test_run /home/elmarco/src/gnome/glib/builddir/../glib/gtestutils.c:1674
> #11 0x561136d0799b in main /home/elmarco/src/qq/tests/test-crypto-ivgen.c:173:12
> #12 0x7f77756e6039 in __libc_start_main (/lib64/libc.so.6+0x21039)
> #13 0x561136c13d89 in _start (/home/elmarco/src/qq/build/tests/test-crypto-ivgen+0x6fd89)
>
> Address 0x7ffd8a1fe168 is located in stack of thread T0 at offset 40 in frame
> #0 0x561136d2a40f in qcrypto_ivgen_essiv_calculate /home/elmarco/src/qq/crypto/ivgen-essiv.c:76
>
> This frame has 1 object(s):
> [32, 40) 'sector.addr' <== Memory access at offset 40 overflows this variable
> HINT: this may be a false positive if your program uses some custom stack unwind mechanism or swapcontext
> (longjmp and C++ exceptions *are* supported)
> SUMMARY: AddressSanitizer: stack-buffer-overflow (/home/elmarco/src/qq/build/tests/test-crypto-ivgen+0x110450) in __asan_memcpy
> Shadow bytes around the buggy address:
> 0x100031437bd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x100031437be0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x100031437bf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x100031437c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x100031437c10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> =>0x100031437c20: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00[f3]f3 f3
> 0x100031437c30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x100031437c40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x100031437c50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x100031437c60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 0x100031437c70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> Shadow byte legend (one shadow byte represents 8 application bytes):
> Addressable: 00
> Partially addressable: 01 02 03 04 05 06 07
> Heap left redzone: fa
> Freed heap region: fd
> Stack left redzone: f1
> Stack mid redzone: f2
> Stack right redzone: f3
> Stack after return: f5
> Stack use after scope: f8
> Global redzone: f9
> Global init order: f6
> Poisoned by user: f7
> Container overflow: fc
> Array cookie: ac
> Intra object redzone: bb
> ASan internal: fe
> Left alloca redzone: ca
> Right alloca redzone: cb
>
> It looks like the rest of the code copes with ndata being larger than
> sizeof(sector), so limit the memcpy() range.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> crypto/ivgen-essiv.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/crypto/ivgen-essiv.c b/crypto/ivgen-essiv.c
> index cba20bde6c..ad4d926c19 100644
> --- a/crypto/ivgen-essiv.c
> +++ b/crypto/ivgen-essiv.c
> @@ -79,7 +79,7 @@ static int qcrypto_ivgen_essiv_calculate(QCryptoIVGen *ivgen,
> uint8_t *data = g_new(uint8_t, ndata);
>
> sector = cpu_to_le64(sector);
> - memcpy(data, (uint8_t *)§or, ndata);
> + memcpy(data, (uint8_t *)§or, MIN(sizeof(sector), ndata));
Ok, so typically sizeof(sector) will be 8, and ndata will be 16 for
AES. So without this fix we're reading 8 extra bytes off the stack
that were just after 'sector'. This is harmless, because these extra
8 bytes will just be the '*iv' pointer, and the very next lines
overwrite that bogus extra data. Also explains why valgrind didn't
report it - the extra stack bytes are still valid memory region.
So I don't think this would crash or be a security problem, which is
good, as avoids any backport need.
> if (sizeof(sector) < ndata) {
> memset(data + sizeof(sector), 0, ndata - sizeof(sector));
> }
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
I'll add this to my qcrypto queue, but if feel free to include it in a pull
of your own if you submit this entire series at once.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2017-12-08 9:49 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-08 0:58 [Qemu-devel] [PATCH 00/12] Various build-sys and ASAN related fixes Marc-André Lureau
2017-12-08 0:58 ` [Qemu-devel] [PATCH 01/12] build-sys: fix qemu-ga -pthread linking Marc-André Lureau
2017-12-08 0:58 ` [Qemu-devel] [PATCH 02/12] build-sys: silence make by default Marc-André Lureau
2017-12-08 19:19 ` Eric Blake
2017-12-13 11:30 ` Marc-André Lureau
2017-12-08 0:58 ` [Qemu-devel] [PATCH 03/12] build-sys: add a rule to print a variable Marc-André Lureau
2017-12-08 19:21 ` Eric Blake
2017-12-08 0:58 ` [Qemu-devel] [PATCH 04/12] build-sys: add AddressSanitizer when --enable-debug if possible Marc-André Lureau
2017-12-08 0:58 ` [Qemu-devel] [PATCH 05/12] tests: fix check-qobject leak: Marc-André Lureau
2017-12-08 17:59 ` Markus Armbruster
2017-12-08 0:58 ` [Qemu-devel] [PATCH 06/12] vl: fix direct firmware directories leak Marc-André Lureau
2017-12-08 0:58 ` [Qemu-devel] [PATCH 07/12] readline: add a free function Marc-André Lureau
2017-12-08 10:05 ` Dr. David Alan Gilbert
2017-12-08 0:58 ` [Qemu-devel] [PATCH 08/12] tests: fix migration-test leak Marc-André Lureau
2017-12-08 9:57 ` Dr. David Alan Gilbert
2017-12-08 0:58 ` [Qemu-devel] [PATCH 09/12] crypto: fix stack-buffer-overflow error Marc-André Lureau
2017-12-08 9:49 ` Daniel P. Berrange [this message]
2017-12-08 0:58 ` [Qemu-devel] [PATCH 10/12] qemu-config: fix leak in query-command-line-options Marc-André Lureau
2017-12-08 0:58 ` [Qemu-devel] [PATCH 11/12] tests: fix qmp-test leak Marc-André Lureau
2017-12-08 18:01 ` Markus Armbruster
2017-12-08 0:58 ` [Qemu-devel] [PATCH 12/12] WIP ucontext: annotate coroutine stack for ASAN Marc-André Lureau
2017-12-08 13:38 ` Stefan Hajnoczi
2017-12-11 11:18 ` Marc-André Lureau
2017-12-11 11:31 ` [Qemu-devel] [PATCH 00/12] Various build-sys and ASAN related fixes no-reply
2017-12-11 11:34 ` no-reply
2017-12-11 12:25 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171208094918.GB11767@redhat.com \
--to=berrange@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.