From: Martin Liska Date: Mon, 29 May 2017 09:09:07 +0000 (+0200) Subject: Backport r246730 X-Git-Tag: releases/gcc-5.5.0~328 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=160789830dac2425d8f0bb5cf37eda4164c38597;p=thirdparty%2Fgcc.git Backport r246730 2017-05-29 Martin Liska Backport from mainline 2017-04-06 Martin Liska PR sanitizer/80166 * gcc.dg/asan/pr80166.c: New test. 2017-05-29 Martin Liska Backport from mainline 2017-04-06 Martin Liska PR sanitizer/80166 * sanitizer_common/sanitizer_common_interceptors.inc (INTERCEPTOR): Cherry-pick upstream r299036. From-SVN: r248560 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 28d6920aae9c..a213ab59f4b1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2017-05-29 Martin Liska + + Backport from mainline + 2017-04-06 Martin Liska + + PR sanitizer/80166 + * gcc.dg/asan/pr80166.c: New test. + 2017-05-29 Martin Liska Backport from mainline diff --git a/gcc/testsuite/gcc.dg/asan/pr80166.c b/gcc/testsuite/gcc.dg/asan/pr80166.c new file mode 100644 index 000000000000..629dd23a31ca --- /dev/null +++ b/gcc/testsuite/gcc.dg/asan/pr80166.c @@ -0,0 +1,24 @@ +/* PR sanitizer/80166 */ +/* { dg-do run } */ + +#include +#include + +int +main (int argc, char **argv) +{ + gid_t groups; + int r = getgroups (0, &groups); + if (r < 0) + __builtin_abort (); + + r = getgroups (-1, &groups); + if (r != -1) + __builtin_abort (); + + r = getgroups (-1, NULL); + if (r != -1) + __builtin_abort (); + + return 0; +} diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index 00af6a47885f..cf0bb56e5fee 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,12 @@ +2017-05-29 Martin Liska + + Backport from mainline + 2017-04-06 Martin Liska + + PR sanitizer/80166 + * sanitizer_common/sanitizer_common_interceptors.inc (INTERCEPTOR): + Cherry-pick upstream r299036. + 2017-02-17 Andreas Tobler Backported from mainline diff --git a/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc b/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc index 10f321838e82..5a30498ff053 100644 --- a/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc +++ b/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc @@ -2733,7 +2733,8 @@ INTERCEPTOR(int, getgroups, int size, u32 *lst) { // its metadata. See // https://code.google.com/p/address-sanitizer/issues/detail?id=321. int res = REAL(getgroups)(size, lst); - if (res && lst) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, lst, res * sizeof(*lst)); + if (res >= 0 && lst && size > 0) + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, lst, res * sizeof(*lst)); return res; } #define INIT_GETGROUPS COMMON_INTERCEPT_FUNCTION(getgroups);