aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/audit.c38
1 files changed, 13 insertions, 25 deletions
diff --git a/kernel/audit.c b/kernel/audit.c
index 58f704b432e4..2a8728fdefc4 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -866,41 +866,29 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
866 break; 866 break;
867 case AUDIT_TTY_GET: { 867 case AUDIT_TTY_GET: {
868 struct audit_tty_status s; 868 struct audit_tty_status s;
869 struct task_struct *tsk; 869 struct task_struct *tsk = current;
870 unsigned long flags; 870
871 871 spin_lock_irq(&tsk->sighand->siglock);
872 rcu_read_lock(); 872 s.enabled = tsk->signal->audit_tty != 0;
873 tsk = find_task_by_vpid(pid); 873 spin_unlock_irq(&tsk->sighand->siglock);
874 if (tsk && lock_task_sighand(tsk, &flags)) { 874
875 s.enabled = tsk->signal->audit_tty != 0; 875 audit_send_reply(NETLINK_CB(skb).pid, seq,
876 unlock_task_sighand(tsk, &flags); 876 AUDIT_TTY_GET, 0, 0, &s, sizeof(s));
877 } else
878 err = -ESRCH;
879 rcu_read_unlock();
880
881 if (!err)
882 audit_send_reply(NETLINK_CB(skb).pid, seq,
883 AUDIT_TTY_GET, 0, 0, &s, sizeof(s));
884 break; 877 break;
885 } 878 }
886 case AUDIT_TTY_SET: { 879 case AUDIT_TTY_SET: {
887 struct audit_tty_status *s; 880 struct audit_tty_status *s;
888 struct task_struct *tsk; 881 struct task_struct *tsk = current;
889 unsigned long flags;
890 882
891 if (nlh->nlmsg_len < sizeof(struct audit_tty_status)) 883 if (nlh->nlmsg_len < sizeof(struct audit_tty_status))
892 return -EINVAL; 884 return -EINVAL;
893 s = data; 885 s = data;
894 if (s->enabled != 0 && s->enabled != 1) 886 if (s->enabled != 0 && s->enabled != 1)
895 return -EINVAL; 887 return -EINVAL;
896 rcu_read_lock(); 888
897 tsk = find_task_by_vpid(pid); 889 spin_lock_irq(&tsk->sighand->siglock);
898 if (tsk && lock_task_sighand(tsk, &flags)) { 890 tsk->signal->audit_tty = s->enabled != 0;
899 tsk->signal->audit_tty = s->enabled != 0; 891 spin_unlock_irq(&tsk->sighand->siglock);
900 unlock_task_sighand(tsk, &flags);
901 } else
902 err = -ESRCH;
903 rcu_read_unlock();
904 break; 892 break;
905 } 893 }
906 default: 894 default: