예제 #1
0
/*
 *	Routine:	macx_backing_store_recovery
 *	Function:
 *		Syscall interface to set a tasks privilege
 *		level so that it is not subject to 
 *		macx_backing_store_suspend
 */
int
macx_backing_store_recovery(
	struct macx_backing_store_recovery_args *args)
{
	int		pid = args->pid;
	int		error;
	struct proc	*p =  current_proc();
	boolean_t	funnel_state;

	funnel_state = thread_funnel_set(kernel_flock, TRUE);
	if ((error = suser(kauth_cred_get(), 0)))
		goto backing_store_recovery_return;

	/* for now restrict backing_store_recovery */
	/* usage to only present task */
	if(pid != proc_selfpid()) {
		error = EINVAL;
		goto backing_store_recovery_return;
	}

	task_backing_store_privileged(p->task);

backing_store_recovery_return:
	(void) thread_funnel_set(kernel_flock, FALSE);
	return(error);
}
예제 #2
0
/*
 *	Routine:	macx_backing_store_recovery
 *	Function:
 *		Syscall interface to set a tasks privilege
 *		level so that it is not subject to
 *		macx_backing_store_suspend
 */
int
macx_backing_store_recovery(
    int		pid)
{
    int		error;
    struct proc	*p =  current_proc();
    boolean_t	funnel_state;

    funnel_state = thread_funnel_set(kernel_flock, TRUE);
    if ((error = suser(p->p_ucred, &p->p_acflag)))
        goto backing_store_recovery_return;

    /* for now restrict backing_store_recovery */
    /* usage to only present task */
    if(pid != p->p_pid) {
        error = EINVAL;
        goto backing_store_recovery_return;
    }

    task_backing_store_privileged(p->task);

backing_store_recovery_return:
    (void) thread_funnel_set(kernel_flock, FALSE);
    return(error);
}