TTY: audit, stop accessing tty->icount
authorJiri Slaby <jslaby@suse.cz>
Thu, 18 Oct 2012 20:26:37 +0000 (22:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 22 Oct 2012 23:50:54 +0000 (16:50 -0700)
This is a private member of n_tty. Stop accessing it. Instead, take is
as an argument.

This is needed to allow clean switch of the private members to a
separate private structure of n_tty.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/n_tty.c
drivers/tty/tty_audit.c
include/linux/tty.h

index ceae074..3ebab0c 100644 (file)
@@ -76,7 +76,7 @@
 static inline int tty_put_user(struct tty_struct *tty, unsigned char x,
                               unsigned char __user *ptr)
 {
-       tty_audit_add_data(tty, &x, 1);
+       tty_audit_add_data(tty, &x, 1, tty->icanon);
        return put_user(x, ptr);
 }
 
@@ -1644,7 +1644,8 @@ static int copy_from_read_buf(struct tty_struct *tty,
                n -= retval;
                is_eof = n == 1 &&
                        tty->read_buf[tty->read_tail] == EOF_CHAR(tty);
-               tty_audit_add_data(tty, &tty->read_buf[tty->read_tail], n);
+               tty_audit_add_data(tty, &tty->read_buf[tty->read_tail], n,
+                               tty->icanon);
                spin_lock_irqsave(&tty->read_lock, flags);
                tty->read_tail = (tty->read_tail + n) & (N_TTY_BUF_SIZE-1);
                tty->read_cnt -= n;
index b0b39b8..6953dc8 100644 (file)
@@ -23,7 +23,7 @@ struct tty_audit_buf {
 };
 
 static struct tty_audit_buf *tty_audit_buf_alloc(int major, int minor,
-                                                int icanon)
+                                                unsigned icanon)
 {
        struct tty_audit_buf *buf;
 
@@ -239,7 +239,8 @@ int tty_audit_push_task(struct task_struct *tsk, kuid_t loginuid, u32 sessionid)
  *     if TTY auditing is disabled or out of memory.  Otherwise, return a new
  *     reference to the buffer.
  */
-static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty)
+static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty,
+               unsigned icanon)
 {
        struct tty_audit_buf *buf, *buf2;
 
@@ -257,7 +258,7 @@ static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty)
 
        buf2 = tty_audit_buf_alloc(tty->driver->major,
                                   tty->driver->minor_start + tty->index,
-                                  tty->icanon);
+                                  icanon);
        if (buf2 == NULL) {
                audit_log_lost("out of memory in TTY auditing");
                return NULL;
@@ -287,7 +288,7 @@ static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty)
  *     Audit @data of @size from @tty, if necessary.
  */
 void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
-                       size_t size)
+                       size_t size, unsigned icanon)
 {
        struct tty_audit_buf *buf;
        int major, minor;
@@ -299,7 +300,7 @@ void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
            && tty->driver->subtype == PTY_TYPE_MASTER)
                return;
 
-       buf = tty_audit_buf_get(tty);
+       buf = tty_audit_buf_get(tty, icanon);
        if (!buf)
                return;
 
@@ -307,11 +308,11 @@ void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
        major = tty->driver->major;
        minor = tty->driver->minor_start + tty->index;
        if (buf->major != major || buf->minor != minor
-           || buf->icanon != tty->icanon) {
+           || buf->icanon != icanon) {
                tty_audit_buf_push_current(buf);
                buf->major = major;
                buf->minor = minor;
-               buf->icanon = tty->icanon;
+               buf->icanon = icanon;
        }
        do {
                size_t run;
index f0b4eb4..f02712d 100644 (file)
@@ -535,7 +535,7 @@ extern void n_tty_inherit_ops(struct tty_ldisc_ops *ops);
 /* tty_audit.c */
 #ifdef CONFIG_AUDIT
 extern void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
-                              size_t size);
+                              size_t size, unsigned icanon);
 extern void tty_audit_exit(void);
 extern void tty_audit_fork(struct signal_struct *sig);
 extern void tty_audit_tiocsti(struct tty_struct *tty, char ch);
@@ -544,7 +544,7 @@ extern int tty_audit_push_task(struct task_struct *tsk,
                               kuid_t loginuid, u32 sessionid);
 #else
 static inline void tty_audit_add_data(struct tty_struct *tty,
-                                     unsigned char *data, size_t size)
+               unsigned char *data, size_t size, unsigned icanon)
 {
 }
 static inline void tty_audit_tiocsti(struct tty_struct *tty, char ch)