提交 0e23bacc 编写于 作者: E Eric Paris

audit: rework AUDIT_TTY_SET to only grab spin_lock once

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: NEric Paris <eparis@redhat.com>
上级 3f0c5fad
...@@ -991,19 +991,24 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) ...@@ -991,19 +991,24 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
struct audit_tty_status s, old; struct audit_tty_status s, old;
struct task_struct *tsk = current; struct task_struct *tsk = current;
struct audit_buffer *ab; 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); spin_lock(&tsk->sighand->siglock);
old.enabled = tsk->signal->audit_tty; old.enabled = tsk->signal->audit_tty;
old.log_passwd = tsk->signal->audit_tty_log_passwd; 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); 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_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE);
audit_log_format(ab, " op=tty_set" audit_log_format(ab, " op=tty_set"
" old-enabled=%d old-log_passwd=%d" " old-enabled=%d old-log_passwd=%d"
...@@ -1011,15 +1016,8 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) ...@@ -1011,15 +1016,8 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
" res=%d", " res=%d",
old.enabled, old.log_passwd, old.enabled, old.log_passwd,
s.enabled, s.log_passwd, s.enabled, s.log_passwd,
res); !err);
audit_log_end(ab); 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; break;
} }
default: default:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册