Exemple #1
0
void unguard_mach_port()
{
	mach_port_t port;
	mach_port_options_t options;
	mach_port_context_t gval = CONTEXT_VALUE1;
	int kret;
	
	printf("Testing unguard with correct guard: \n");

	options.flags = (MPO_CONTEXT_AS_GUARD);

	kret = mach_port_construct(mach_task_self(), &options, gval, &port);
	if (kret != KERN_SUCCESS)
		exit(1);

	kret = mach_port_unguard(mach_task_self(), port, gval);
	if (kret == KERN_SUCCESS)
		printf("[PASSED]\n");
	else
		goto failed;
	
	printf("Testing unguard with incorrect guard (Expecting Exception)... \n");
	kret = mach_port_construct(mach_task_self(), &options, gval, &port);
	if (kret != KERN_SUCCESS)
		exit(1);
	kret = mach_port_unguard(mach_task_self(), port, CONTEXT_VALUE2);
	if (kret == KERN_SUCCESS)
		goto failed;
	
	return;

failed:
	printf("[FAILED]\n");
	exit(1);
	
}
Exemple #2
0
int
_kernelrpc_mach_port_unguard_trap(struct _kernelrpc_mach_port_unguard_args *args)
{
	task_t task = port_name_to_task(args->target);
	int rv = MACH_SEND_INVALID_DEST;

	if (task != current_task())
		goto done;

	rv = mach_port_unguard(task->itk_space, args->name, args->guard);
	
done:
	if (task)
		task_deallocate(task);
	return (rv);
}
Exemple #3
0
void unguard_nonguarded_mach_port()
{
	mach_port_t port;
	mach_port_options_t options;
	mach_port_context_t gval = CONTEXT_VALUE1;
	int kret;
	
	printf("Testing mach_port_unguard() for non-guarded port (Expecting exception)...\n");

	options.flags = 0;

	kret = mach_port_construct(mach_task_self(), &options, 0, &port);
	if (kret != KERN_SUCCESS)
		exit(1);
	kret = mach_port_unguard(mach_task_self(), port, gval);
	if (kret == KERN_SUCCESS) {
		printf("[FAILED]\n");
		exit(1);
	}

	return;
}