Skip to content

Commit

Permalink
TTY: audit, stop accessing tty->icount
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jiri Slaby authored and Greg Kroah-Hartman committed Oct 22, 2012
1 parent 3383427 commit 6c633f2
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 11 deletions.
5 changes: 3 additions & 2 deletions drivers/tty/n_tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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;
Expand Down
15 changes: 8 additions & 7 deletions drivers/tty/tty_audit.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -299,19 +300,19 @@ 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;

mutex_lock(&buf->mutex);
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;
Expand Down
4 changes: 2 additions & 2 deletions include/linux/tty.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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)
Expand Down

0 comments on commit 6c633f2

Please sign in to comment.