mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-24 11:41:07 +00:00
nptl: Use uintptr_t for address diagnostic in nptl/tst-pthread-getattr
Recent GCC versions warn about the attempt to return the address of a local variable: tst-pthread-getattr.c: In function ‘allocate_and_test’: tst-pthread-getattr.c:54:10: error: function returns address of local variable [-Werror=return-local-addr] 54 | return mem; | ^~~ In file included from ../include/alloca.h:3, from tst-pthread-getattr.c:26: ../stdlib/alloca.h:35:23: note: declared here 35 | # define alloca(size) __builtin_alloca (size) | ^~~~~~~~~~~~~~~~~~~~~~~ tst-pthread-getattr.c:51:9: note: in expansion of macro ‘alloca’ 51 | mem = alloca ((size_t) (mem - target)); | ^~~~~~ The address itself is used in a check in the caller, so using uintptr_t instead is reasonable.
This commit is contained in:
parent
b8b3d5a14e
commit
8a814e20d4
@ -1,3 +1,9 @@
|
|||||||
|
2019-07-30 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
* nptl/tst-pthread-getattr.c (allocate_and_test): Change return
|
||||||
|
type to uintptr_t. Update comment.
|
||||||
|
(check_stack_top): Adjust.
|
||||||
|
|
||||||
2019-07-29 Florian Weimer <fweimer@redhat.com>
|
2019-07-29 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
Linux: Move declaration of getdents64 to <dirent.h>.
|
Linux: Move declaration of getdents64 to <dirent.h>.
|
||||||
|
@ -41,9 +41,11 @@
|
|||||||
|
|
||||||
static size_t pagesize;
|
static size_t pagesize;
|
||||||
|
|
||||||
/* Check if the page in which TARGET lies is accessible. This will segfault
|
/* Test that the page in which TARGET lies is accessible. This will
|
||||||
if it fails. */
|
segfault if the write fails. This function has only half a page
|
||||||
static volatile char *
|
of thread stack left and so should not do anything and immediately
|
||||||
|
return the address to which the stack reached. */
|
||||||
|
static volatile uintptr_t
|
||||||
allocate_and_test (char *target)
|
allocate_and_test (char *target)
|
||||||
{
|
{
|
||||||
volatile char *mem = (char *) &mem;
|
volatile char *mem = (char *) &mem;
|
||||||
@ -51,7 +53,7 @@ allocate_and_test (char *target)
|
|||||||
mem = alloca ((size_t) (mem - target));
|
mem = alloca ((size_t) (mem - target));
|
||||||
|
|
||||||
*mem = 42;
|
*mem = 42;
|
||||||
return mem;
|
return (uintptr_t) mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -84,7 +86,6 @@ check_stack_top (void)
|
|||||||
{
|
{
|
||||||
struct rlimit stack_limit;
|
struct rlimit stack_limit;
|
||||||
void *stackaddr;
|
void *stackaddr;
|
||||||
volatile void *mem;
|
|
||||||
size_t stacksize = 0;
|
size_t stacksize = 0;
|
||||||
int ret;
|
int ret;
|
||||||
uintptr_t pagemask = ~(pagesize - 1);
|
uintptr_t pagemask = ~(pagesize - 1);
|
||||||
@ -130,14 +131,14 @@ check_stack_top (void)
|
|||||||
stack and test access there. It is however sufficient to simply check if
|
stack and test access there. It is however sufficient to simply check if
|
||||||
the top page is accessible, so we target our access halfway up the top
|
the top page is accessible, so we target our access halfway up the top
|
||||||
page. Thanks Chris Metcalf for this idea. */
|
page. Thanks Chris Metcalf for this idea. */
|
||||||
mem = allocate_and_test (stackaddr + pagesize / 2);
|
uintptr_t mem = allocate_and_test (stackaddr + pagesize / 2);
|
||||||
|
|
||||||
/* Before we celebrate, make sure we actually did test the same page. */
|
/* Before we celebrate, make sure we actually did test the same page. */
|
||||||
if (((uintptr_t) stackaddr & pagemask) != ((uintptr_t) mem & pagemask))
|
if (((uintptr_t) stackaddr & pagemask) != (mem & pagemask))
|
||||||
{
|
{
|
||||||
printf ("We successfully wrote into the wrong page.\n"
|
printf ("We successfully wrote into the wrong page.\n"
|
||||||
"Expected %#" PRIxPTR ", but got %#" PRIxPTR "\n",
|
"Expected %#" PRIxPTR ", but got %#" PRIxPTR "\n",
|
||||||
(uintptr_t) stackaddr & pagemask, (uintptr_t) mem & pagemask);
|
(uintptr_t) stackaddr & pagemask, mem & pagemask);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user