lkml.org 
[lkml]   [2003]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectPATCH: redo the n_tty fix

Two problems with the original change

1. We should return bytes actually processed on an error according to
SuS/POSIX. Technically the EFAULT path is outside the spec but its best
we follow

2. We need to fix most of this anyway because the final section of the
change was wrong. If retval was set we retried and got an efault again
in some cases

I think this way of doing it is right but it could do with further
review

diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.65-bk3/drivers/char/n_tty.c linux-2.5.65-ac3/drivers/char/n_tty.c
--- linux-2.5.65-bk3/drivers/char/n_tty.c 2003-03-22 19:35:11.000000000 +0000
+++ linux-2.5.65-ac3/drivers/char/n_tty.c 2003-03-22 20:27:06.000000000 +0000
@@ -1029,8 +1029,10 @@
break;
cs = tty->link->ctrl_status;
tty->link->ctrl_status = 0;
- if (put_user(cs, b++)) {
+ if (put_user(cs, b++))
+ {
retval = -EFAULT;
+ b--;
break;
}
nr--;
@@ -1071,8 +1073,9 @@

/* Deal with packet mode. */
if (tty->packet && b == buf) {
- if (put_user(TIOCPKT_DATA, b++)) {
+ if (put_user(TIOCPKT_DATA, b++)) {
retval = -EFAULT;
+ b--;
break;
}
nr--;
@@ -1101,8 +1104,9 @@
spin_unlock_irqrestore(&tty->read_lock, flags);

if (!eol || (c != __DISABLED_CHAR)) {
- if (put_user(c, b++)) {
+ if (put_user(c, b++)) {
retval = -EFAULT;
+ b--;
break;
}
nr--;
@@ -1110,7 +1114,7 @@
if (eol)
break;
}
- if (retval)
+ if (retval)
break;
} else {
int uncopied;
@@ -1146,7 +1150,7 @@

current->state = TASK_RUNNING;
size = b - buf;
- if (!retval && size) {
+ if (size) {
retval = size;
if (nr)
clear_bit(TTY_PUSH, &tty->flags);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 13:34    [W:0.055 / U:19.704 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site