]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - kernel/auditsc.c
Merge branch 'stable-4.10' of git://git.infradead.org/users/pcmoore/audit
[mirror_ubuntu-bionic-kernel.git] / kernel / auditsc.c
index 2cd5256dbff72dfbb4716563ff28d2f9e38a018e..cf1fa43512c111b6fff0a81403acb62f9a4620a4 100644 (file)
@@ -446,6 +446,7 @@ static int audit_filter_rules(struct task_struct *tsk,
        const struct cred *cred;
        int i, need_sid = 1;
        u32 sid;
+       unsigned int sessionid;
 
        cred = rcu_dereference_check(tsk->cred, tsk == current || task_creation);
 
@@ -508,6 +509,10 @@ static int audit_filter_rules(struct task_struct *tsk,
                case AUDIT_FSGID:
                        result = audit_gid_comparator(cred->fsgid, f->op, f->gid);
                        break;
+               case AUDIT_SESSIONID:
+                       sessionid = audit_get_sessionid(current);
+                       result = audit_comparator(sessionid, f->op, f->val);
+                       break;
                case AUDIT_PERS:
                        result = audit_comparator(tsk->personality, f->op, f->val);
                        break;
@@ -1000,7 +1005,7 @@ static void audit_log_execve_info(struct audit_context *context,
        long len_rem;
        long len_full;
        long len_buf;
-       long len_abuf;
+       long len_abuf = 0;
        long len_tmp;
        bool require_data;
        bool encode;
@@ -2025,8 +2030,11 @@ int audit_set_loginuid(kuid_t loginuid)
                goto out;
 
        /* are we setting or clearing? */
-       if (uid_valid(loginuid))
+       if (uid_valid(loginuid)) {
                sessionid = (unsigned int)atomic_inc_return(&session_id);
+               if (unlikely(sessionid == (unsigned int)-1))
+                       sessionid = (unsigned int)atomic_inc_return(&session_id);
+       }
 
        task->sessionid = sessionid;
        task->loginuid = loginuid;