Example #1
0
File: maps00.c Project: OSLL/pmover
int main(int argc, char ** argv)
{
	struct map maps[NUM_MAPS] = {}, maps_compare[NUM_MAPS] = {};
	int i, j, k;
	test_init(argc, argv);

	k = 0;
	for (i = 0; i < NUM_MPROTS; i++)
		for (j = 0; j < NUM_MFLAGS; j++)
			init_map(maps + k++, i, j);

	for (i = 0; i < NUM_MAPS; i++)
		if (make_map(maps + i))
			goto err;

	test_daemon();
	test_waitsig();

	for (i = 0; i < NUM_MAPS; i++)
		if ((maps[i].prot_real=check_map(maps + i))<0)
			goto err;
	k=0;
	for (i = 0; i < NUM_MPROTS; i++)
		for (j = 0; j < NUM_MFLAGS; j++)
			init_map(maps_compare + k++, i, j);
	for (i = 0; i < NUM_MAPS; i++)
		if (make_map(maps_compare+ i))
			goto err;
	for (i = 0; i < NUM_MAPS; i++)
		if ((maps_compare[i].prot_real=check_map(maps_compare + i))<0)
			goto err;
	for (i = 0; i< NUM_MAPS; i++)
		if (!check_prot(maps[i].prot_real, maps_compare[i].prot_real)){
			fail("protection on %i (flag=%d prot=%d) maps has changed (prot=%d(expected %d))",
				i, maps[i].flag, maps[i].prot, maps[i].prot_real, maps_compare[i].prot_real);
			goto err;
		}

	pass();

	for (i = 0; i < NUM_MAPS; i++) {
		destroy_map(maps + i);
		destroy_map(maps_compare + i);
	}
	return 0;

err:
	return 1;
}
Example #2
0
int main(int argc, char ** argv)
{
	char *ptr, *ptr_aligned;
	int pagesize;
	int i;

	test_init(argc, argv);

	pagesize = sysconf(_SC_PAGESIZE);
	if (pagesize < 0) {
		pr_perror("can't get PAGE_SIZE");
		exit(1);
	}

	ptr = mmap(NULL, pagesize * (NUM_MPROTS + 1), PROT_NONE, MAP_PRIVATE | MAP_ANON, 0, 0);
	if (ptr == MAP_FAILED) {
		pr_perror("calloc failed");
		return -1;
	}

	ptr_aligned = (char *)(((unsigned long) ptr + pagesize - 1) &
			       ~(pagesize - 1));

	for (i = 0; i < NUM_MPROTS; i++)
		if (mprotect(ptr_aligned + pagesize * i,
			     pagesize / 2, prots[i]) < 0) {
			pr_perror("mprotect failed");
			exit(1);
		}

	test_daemon();
	test_waitsig();

	for (i = 0; i < NUM_MPROTS; i++)
		if (check_prot(ptr_aligned + pagesize * i, prots[i]))
			goto out;

	pass();
out:
	return 0;
}