mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 22:51:37 +00:00
audit: use spin_lock_irqsave/restore in audit tty code
Some of the callers of the audit tty function use spin_lock_irqsave/restore. We were using the forced always enable version, which seems really bad. Since I don't know every one of these code paths well enough, it makes sense to just switch everything to the safe version. Maybe it's a little overzealous, but it's a lot better than an unlucky deadlock when we return to a caller with irq enabled and they expect it to be disabled. Signed-off-by: Eric Paris <eparis@redhat.com>
This commit is contained in:
parent
4d3fb709b2
commit
bde02ca858
2 changed files with 25 additions and 17 deletions
|
@ -804,10 +804,11 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|||
case AUDIT_TTY_GET: {
|
||||
struct audit_tty_status s;
|
||||
struct task_struct *tsk = current;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irq(&tsk->sighand->siglock);
|
||||
spin_lock_irqsave(&tsk->sighand->siglock, flags);
|
||||
s.enabled = tsk->signal->audit_tty != 0;
|
||||
spin_unlock_irq(&tsk->sighand->siglock);
|
||||
spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
|
||||
|
||||
audit_send_reply(NETLINK_CB(skb).portid, seq,
|
||||
AUDIT_TTY_GET, 0, 0, &s, sizeof(s));
|
||||
|
@ -816,6 +817,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|||
case AUDIT_TTY_SET: {
|
||||
struct audit_tty_status *s;
|
||||
struct task_struct *tsk = current;
|
||||
unsigned long flags;
|
||||
|
||||
if (nlh->nlmsg_len < sizeof(struct audit_tty_status))
|
||||
return -EINVAL;
|
||||
|
@ -823,9 +825,9 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|||
if (s->enabled != 0 && s->enabled != 1)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irq(&tsk->sighand->siglock);
|
||||
spin_lock_irqsave(&tsk->sighand->siglock, flags);
|
||||
tsk->signal->audit_tty = s->enabled != 0;
|
||||
spin_unlock_irq(&tsk->sighand->siglock);
|
||||
spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue