|
@@ -2014,11 +2014,11 @@ static int copy_from_read_buf(struct tty_struct *tty,
|
|
n = min(head - ldata->read_tail, N_TTY_BUF_SIZE - tail);
|
|
n = min(head - ldata->read_tail, N_TTY_BUF_SIZE - tail);
|
|
n = min(*nr, n);
|
|
n = min(*nr, n);
|
|
if (n) {
|
|
if (n) {
|
|
- retval = copy_to_user(*b, read_buf_addr(ldata, tail), n);
|
|
|
|
|
|
+ const unsigned char *from = read_buf_addr(ldata, tail);
|
|
|
|
+ retval = copy_to_user(*b, from, n);
|
|
n -= retval;
|
|
n -= retval;
|
|
- is_eof = n == 1 && read_buf(ldata, tail) == EOF_CHAR(tty);
|
|
|
|
- tty_audit_add_data(tty, read_buf_addr(ldata, tail), n,
|
|
|
|
- ldata->icanon);
|
|
|
|
|
|
+ is_eof = n == 1 && *from == EOF_CHAR(tty);
|
|
|
|
+ tty_audit_add_data(tty, from, n, ldata->icanon);
|
|
smp_store_release(&ldata->read_tail, ldata->read_tail + n);
|
|
smp_store_release(&ldata->read_tail, ldata->read_tail + n);
|
|
/* Turn single EOF into zero-length read */
|
|
/* Turn single EOF into zero-length read */
|
|
if (L_EXTPROC(tty) && ldata->icanon && is_eof &&
|
|
if (L_EXTPROC(tty) && ldata->icanon && is_eof &&
|