summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Vandrovec <petr@vandrovec.name>2007-05-07 02:14:47 (GMT)
committerStefan Richter <stefanr@s5r6.in-berlin.de>2007-07-09 22:07:37 (GMT)
commitee9be425961c3ccf75553c83a73bf1f707e66d91 (patch)
tree0ffcc2409744d3e3710478594b1e04e406bd6eb2
parent6552731a058a4facefd921b0b45a9a5392baa5ea (diff)
downloadlinux-ee9be425961c3ccf75553c83a73bf1f707e66d91.tar.xz
ieee1394: raw1394: Fix read() for 32bit userland on 64bit kernel
read() always failed with -EFAULT. This was happening due to raw1394_compat_read copying data to wrong location - access_ok always failed as 'r' is kernel address, not user. Whole function just tried to copy data from 'r' to 'r', which is not good. Signed-off-by: Petr Vandrovec <petr@vandrovec.name> Acked-by: Dan Dennedy <dan@dennedy.org> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (split into 3 patches)
-rw-r--r--drivers/ieee1394/raw1394.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/ieee1394/raw1394.c b/drivers/ieee1394/raw1394.c
index f1d05ee..858fd9b 100644
--- a/drivers/ieee1394/raw1394.c
+++ b/drivers/ieee1394/raw1394.c
@@ -459,7 +459,7 @@ static const char __user *raw1394_compat_write(const char __user *buf)
static int
raw1394_compat_read(const char __user *buf, struct raw1394_request *r)
{
- struct compat_raw1394_req __user *cr = (typeof(cr)) r;
+ struct compat_raw1394_req __user *cr = (typeof(cr)) buf;
if (!access_ok(VERIFY_WRITE, cr, sizeof(struct compat_raw1394_req)) ||
P(type) ||
P(error) ||