netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH][CAN]: Fix copy_from_user() results interpretation.
@ 2008-04-25 12:42 Pavel Emelyanov
  2008-04-25 14:22 ` Oliver Hartkopp
  0 siblings, 1 reply; 15+ messages in thread
From: Pavel Emelyanov @ 2008-04-25 12:42 UTC (permalink / raw)
  To: David Miller, urs.thuermann, oliver.hartkopp
  Cc: socketcan-core, Linux Netdev List

Sorry for the noise, I had to check this right after facing this problem
with the copy_to_user()...

Both copy_to_ and _from_user return the number of bytes, that failed to
reach their destination, not the 0/-EXXX values.

Other net/ code handles this correctly.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>

---

diff --git a/net/can/raw.c b/net/can/raw.c
index ead50c7..2be8c6e 100644
--- a/net/can/raw.c
+++ b/net/can/raw.c
@@ -438,12 +438,12 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,
 			err = copy_from_user(filter, optval, optlen);
 			if (err) {
 				kfree(filter);
-				return err;
+				return -EFAULT;
 			}
 		} else if (count == 1) {
 			err = copy_from_user(&sfilter, optval, optlen);
 			if (err)
-				return err;
+				return -EFAULT;
 		}
 
 		lock_sock(sk);
@@ -495,7 +495,7 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,
 
 		err = copy_from_user(&err_mask, optval, optlen);
 		if (err)
-			return err;
+			return -EFAULT;
 
 		err_mask &= CAN_ERR_MASK;
 
@@ -531,7 +531,8 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,
 		if (optlen != sizeof(ro->loopback))
 			return -EINVAL;
 
-		err = copy_from_user(&ro->loopback, optval, optlen);
+		err = copy_from_user(&ro->loopback, optval, optlen) ?
+			-EFAULT : 0;
 
 		break;
 
@@ -539,7 +540,8 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,
 		if (optlen != sizeof(ro->recv_own_msgs))
 			return -EINVAL;
 
-		err = copy_from_user(&ro->recv_own_msgs, optval, optlen);
+		err = copy_from_user(&ro->recv_own_msgs, optval, optlen) ?
+			-EFAULT : 0;
 
 		break;
 

^ permalink raw reply related	[flat|nested] 15+ messages in thread
[parent not found: <mailman.2289.1209191345.4974.socketcan-core@lists.berlios.de>]

end of thread, other threads:[~2008-04-27  5:57 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-25 12:42 [PATCH][CAN]: Fix copy_from_user() results interpretation Pavel Emelyanov
2008-04-25 14:22 ` Oliver Hartkopp
2008-04-26  6:19   ` Wolfgang Grandegger
2008-04-26  6:23     ` David Miller
2008-04-26  6:35       ` Wolfgang Grandegger
2008-04-26  6:40     ` Sam Ravnborg
2008-04-26  7:03       ` David Miller
2008-04-26 13:04         ` Wolfgang Grandegger
2008-04-26  8:26       ` Oliver Hartkopp
2008-04-26  9:10         ` David Miller
2008-04-26  9:59           ` Sam Ravnborg
2008-04-26 10:01             ` David Miller
2008-04-26 10:05               ` Sam Ravnborg
2008-04-27  5:57             ` David Miller
     [not found] <mailman.2289.1209191345.4974.socketcan-core@lists.berlios.de>
2008-04-26  6:33 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).