Skip to content
Snippets Groups Projects
thpoff.c 910 B
Newer Older
Pierre Ozoux's avatar
Pierre Ozoux committed
// PUBLIC DOMAIN CODE
//
// A tiny program that disable transparent huge pages on arbitrary processes
// thpoff echo 1 : will run echo 1 with SET_THP_DISABLE true on the process
#include <stdio.h>
#include <sys/prctl.h>
#include <unistd.h>
#include <errno.h>

int main( int argc, char **argv) {
    if (argc < 2) {
	fprintf(stderr, "ERROR: expecting at least 1 argument!\n");
	return -1;
    }
    prctl(PR_SET_THP_DISABLE, 1, 0, 0, 0);

    char* newargv[argc];
    int i;

    newargv[argc-1] = NULL;
    for (i=1; i<argc; i++) {
	newargv[i-1] = argv[i];
    }

    execvp(argv[1], newargv);

    if (errno == ENOENT) {
	fprintf(stderr, "ERROR: file not found\n");
	return -1;
    } else if (errno == EACCES) {
	fprintf(stderr, "ERROR: can not run file\n");
	return -1;
    } else if (errno > 0) {
	fprintf(stderr, "ERROR: %i errno while attempting to run file\n", errno);
	return -1;
    }

    return 0;
}