Skip to content

Commit

Permalink
audit: rework AUDIT_TTY_SET to only grab spin_lock once
Browse files Browse the repository at this point in the history
We can simplify the AUDIT_TTY_SET code to only grab the spin_lock one
time.  We need to determine if the new values are valid and if so, set
the new values at the same time we grab the old onces.  While we are
here get rid of 'res' and just use err.

Signed-off-by: Eric Paris <eparis@redhat.com>
  • Loading branch information
Eric Paris committed Jan 14, 2014
1 parent 3f0c5fa commit 0e23bac
Showing 1 changed file with 13 additions and 15 deletions.
28 changes: 13 additions & 15 deletions kernel/audit.c
Original file line number Diff line number Diff line change
Expand Up @@ -991,35 +991,33 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
struct audit_tty_status s, old;
struct task_struct *tsk = current;
struct audit_buffer *ab;
int res = 0;

memset(&s, 0, sizeof(s));
/* guard against past and future API changes */
memcpy(&s, data, min_t(size_t, sizeof(s), nlmsg_len(nlh)));
/* check if new data is valid */
if ((s.enabled != 0 && s.enabled != 1) ||
(s.log_passwd != 0 && s.log_passwd != 1))
err = -EINVAL;

spin_lock(&tsk->sighand->siglock);
old.enabled = tsk->signal->audit_tty;
old.log_passwd = tsk->signal->audit_tty_log_passwd;
if (!err) {
tsk->signal->audit_tty = s.enabled;
tsk->signal->audit_tty_log_passwd = s.log_passwd;
}
spin_unlock(&tsk->sighand->siglock);

memset(&s, 0, sizeof(s));
/* guard against past and future API changes */
memcpy(&s, data, min_t(size_t, sizeof(s), nlmsg_len(nlh)));
if ((s.enabled == 0 || s.enabled == 1) &&
(s.log_passwd == 0 || s.log_passwd == 1))
res = 1;
audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE);
audit_log_format(ab, " op=tty_set"
" old-enabled=%d old-log_passwd=%d"
" new-enabled=%d new-log_passwd=%d"
" res=%d",
old.enabled, old.log_passwd,
s.enabled, s.log_passwd,
res);
!err);
audit_log_end(ab);
if (res) {
spin_lock(&tsk->sighand->siglock);
tsk->signal->audit_tty = s.enabled;
tsk->signal->audit_tty_log_passwd = s.log_passwd;
spin_unlock(&tsk->sighand->siglock);
} else
return -EINVAL;
break;
}
default:
Expand Down

0 comments on commit 0e23bac

Please sign in to comment.