如何检查一个进程是否有权限使用驱动程序提供的服务能力?
/*以下的参数cap用来指定对当前进程进行检查的权能数值*/
static bool ns_capable_common(struct user_namespace *ns,
int cap,
unsigned int opts)
{
int capable;
/*内核再include/linux/capability.h中定义了多个权能数值,其中的
cap_valid函数用来检查cap所表示的权能值是否在内核事先定义的权限范围之内*/
if (unlikely(!cap_valid(cap))) {
pr_crit("capable() called with invalid cap=%u\n", cap);
BUG();
}
/*真正的权能检查,其中的宏current_cred用来获得当前进程的一个权能证书,展开就是
current->cred*/
capable = security_capable(current_cred(), ns, cap, opts);
if (capable == 0) {
/*如果进程具有指定的权能,那么函数将在当前进程的flag上设置PF_SUPERPRIV标志
着一个超级用户的身份,同时返回1*/
current->flags |= PF_SUPERPRIV;
return true;
}
return false;
}
真正的权能检查在security_cap