Skip to content

Commit

Permalink
tty: wipe buffer if not echoing data
Browse files Browse the repository at this point in the history
commit b97b3d9 upstream.

If we are not echoing the data to userspace or the console is in icanon
mode, then perhaps it is a "secret" so we should wipe it once we are
done with it.

This mirrors the logic that the audit code has.

Reported-by: aszlig <aszlig@nix.build>
Tested-by: Milan Broz <gmazyland@gmail.com>
Tested-by: Daniel Zatovic <daniel.zatovic@gmail.com>
Tested-by: aszlig <aszlig@nix.build>
Cc: Willy Tarreau <w@1wt.eu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
gregkh committed Dec 1, 2018
1 parent d196147 commit 2b7e918
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions drivers/tty/n_tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,15 +165,29 @@ static inline int tty_put_user(struct tty_struct *tty, unsigned char x,
return put_user(x, ptr);
}

/* If we are not echoing the data, perhaps this is a secret so erase it */
static inline void zero_buffer(struct tty_struct *tty, u8 *buffer, int size)
{
bool icanon = !!L_ICANON(tty);
bool no_echo = !L_ECHO(tty);

if (icanon && no_echo)
memset(buffer, 0x00, size);
}

static inline int tty_copy_to_user(struct tty_struct *tty,
void __user *to,
const void *from,
void *from,
unsigned long n)
{
struct n_tty_data *ldata = tty->disc_data;
int retval;

tty_audit_add_data(tty, from, n, ldata->icanon);
return copy_to_user(to, from, n);
retval = copy_to_user(to, from, n);
if (!retval)
zero_buffer(tty, from, n);
return retval;
}

/**
Expand Down Expand Up @@ -2005,6 +2019,7 @@ static int copy_from_read_buf(struct tty_struct *tty,
is_eof = n == 1 && read_buf(ldata, tail) == EOF_CHAR(tty);
tty_audit_add_data(tty, read_buf_addr(ldata, tail), n,
ldata->icanon);
zero_buffer(tty, read_buf_addr(ldata, tail), n);
smp_store_release(&ldata->read_tail, ldata->read_tail + n);
/* Turn single EOF into zero-length read */
if (L_EXTPROC(tty) && ldata->icanon && is_eof &&
Expand Down

0 comments on commit 2b7e918

Please sign in to comment.