-
Notifications
You must be signed in to change notification settings - Fork 617
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
compel: Add test to check parasite stack setup
Some ABIs allow functions to store data in caller frame, which means that we have to allocate an initial stack frame before executing code on the parasite stack. This test saves the contents of writable memory that follows the stack after the victim has been infected but before we start using the parasite stack. It later checks that the saved data matches the current contents of the two memory areas. This is done while the victim is halted so we expect a match unless executing parasite code caused memory corruption. The test doesn't detect cases where we corrupted memory by writing the same value. Signed-off-by: Younes Manton <ymanton@ca.ibm.com>
- Loading branch information
Showing
8 changed files
with
518 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
parasite.h | ||
parasite.po | ||
spy | ||
victim |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
CC := gcc | ||
CFLAGS ?= -O2 -g -Wall -Werror | ||
|
||
COMPEL := ../../../compel/compel-host | ||
|
||
all: victim spy | ||
|
||
run: | ||
./spy | ||
.PHONY: run | ||
|
||
clean: | ||
rm -f victim | ||
rm -f spy | ||
rm -f parasite.h | ||
rm -f parasite.po | ||
rm -f parasite.o | ||
|
||
victim: victim.c | ||
$(CC) $(CFLAGS) -o $@ $^ | ||
|
||
spy: spy.c parasite.h | ||
$(CC) $(CFLAGS) $(shell $(COMPEL) includes) -o $@ $< $(shell $(COMPEL) --static libs) | ||
|
||
parasite.h: parasite.po | ||
$(COMPEL) hgen -o $@ -f $< | ||
|
||
parasite.po: parasite.o | ||
ld $(shell $(COMPEL) ldflags) -o $@ $^ $(shell $(COMPEL) plugins) | ||
|
||
parasite.o: parasite.c | ||
$(CC) $(CFLAGS) -c $(shell $(COMPEL) cflags) -o $@ $^ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#include <errno.h> | ||
|
||
#include <compel/plugins/std.h> | ||
#include <infect-rpc.h> | ||
|
||
/* | ||
* Stubs for std compel plugin. | ||
*/ | ||
int parasite_trap_cmd(int cmd, void *args) | ||
{ | ||
return 0; | ||
} | ||
void parasite_cleanup(void) | ||
{ | ||
} | ||
|
||
#define PARASITE_CMD_INC PARASITE_USER_CMDS | ||
#define PARASITE_CMD_DEC PARASITE_USER_CMDS + 1 | ||
|
||
int parasite_daemon_cmd(int cmd, void *args) | ||
{ | ||
int v; | ||
|
||
switch (cmd) { | ||
case PARASITE_CMD_INC: | ||
v = (*(int *)args) + 1; | ||
break; | ||
case PARASITE_CMD_DEC: | ||
v = (*(int *)args) - 1; | ||
break; | ||
default: | ||
v = -1; | ||
break; | ||
} | ||
|
||
sys_write(1, &v, sizeof(int)); | ||
return 0; | ||
} |
Oops, something went wrong.