41 lines
775 B
C
41 lines
775 B
C
|
/*
|
||
|
* Test that GDB can access PROT_NONE pages.
|
||
|
*
|
||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||
|
*/
|
||
|
#include <assert.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <sys/mman.h>
|
||
|
#include <unistd.h>
|
||
|
|
||
|
void break_here(void *q)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
int main(void)
|
||
|
{
|
||
|
long pagesize = sysconf(_SC_PAGESIZE);
|
||
|
void *p, *q;
|
||
|
int err;
|
||
|
|
||
|
p = mmap(NULL, pagesize * 2, PROT_READ | PROT_WRITE,
|
||
|
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||
|
assert(p != MAP_FAILED);
|
||
|
q = p + pagesize - 1;
|
||
|
strcpy(q, "42");
|
||
|
|
||
|
err = mprotect(p, pagesize * 2, PROT_NONE);
|
||
|
assert(err == 0);
|
||
|
|
||
|
break_here(q);
|
||
|
|
||
|
err = mprotect(p, pagesize * 2, PROT_READ);
|
||
|
assert(err == 0);
|
||
|
if (getenv("PROT_NONE_PY")) {
|
||
|
assert(strcmp(q, "24") == 0);
|
||
|
}
|
||
|
|
||
|
return EXIT_SUCCESS;
|
||
|
}
|