CRED: Separate task security context from task_struct
[firefly-linux-kernel-4.4.55.git] / net / core / scm.c
index 4681d8f9b45b3f756cb511362df7ed09ae74abc5..c28ca32a7d93a599175ea72131103120692ee127 100644 (file)
 
 static __inline__ int scm_check_creds(struct ucred *creds)
 {
+       struct cred *cred = current->cred;
+
        if ((creds->pid == task_tgid_vnr(current) || capable(CAP_SYS_ADMIN)) &&
-           ((creds->uid == current_uid()   || creds->uid == current_euid() ||
-             creds->uid == current_suid()) || capable(CAP_SETUID)) &&
-           ((creds->gid == current_gid()   || creds->gid == current_egid() ||
-             creds->gid == current_sgid()) || capable(CAP_SETGID))) {
+           ((creds->uid == cred->uid   || creds->uid == cred->euid ||
+             creds->uid == cred->suid) || capable(CAP_SETUID)) &&
+           ((creds->gid == cred->gid   || creds->gid == cred->egid ||
+             creds->gid == cred->sgid) || capable(CAP_SETGID))) {
               return 0;
        }
        return -EPERM;