diff options
Diffstat (limited to 'drivers/ieee1394/raw1394.c')
-rw-r--r-- | drivers/ieee1394/raw1394.c | 54 |
1 files changed, 26 insertions, 28 deletions
diff --git a/drivers/ieee1394/raw1394.c b/drivers/ieee1394/raw1394.c index f7de546f2ed6..20ce539580f1 100644 --- a/drivers/ieee1394/raw1394.c +++ b/drivers/ieee1394/raw1394.c | |||
@@ -408,34 +408,34 @@ static void fcp_request(struct hpsb_host *host, int nodeid, int direction, | |||
408 | 408 | ||
409 | #ifdef CONFIG_COMPAT | 409 | #ifdef CONFIG_COMPAT |
410 | struct compat_raw1394_req { | 410 | struct compat_raw1394_req { |
411 | __u32 type; | 411 | __u32 type; |
412 | __s32 error; | 412 | __s32 error; |
413 | __u32 misc; | 413 | __u32 misc; |
414 | 414 | ||
415 | __u32 generation; | 415 | __u32 generation; |
416 | __u32 length; | 416 | __u32 length; |
417 | 417 | ||
418 | __u64 address; | 418 | __u64 address; |
419 | 419 | ||
420 | __u64 tag; | 420 | __u64 tag; |
421 | 421 | ||
422 | __u64 sendb; | 422 | __u64 sendb; |
423 | __u64 recvb; | 423 | __u64 recvb; |
424 | } __attribute__((packed)); | 424 | } __attribute__((packed)); |
425 | 425 | ||
426 | static const char __user *raw1394_compat_write(const char __user *buf) | 426 | static const char __user *raw1394_compat_write(const char __user *buf) |
427 | { | 427 | { |
428 | struct compat_raw1394_req __user *cr = (typeof(cr)) buf; | 428 | struct compat_raw1394_req __user *cr = (typeof(cr)) buf; |
429 | struct raw1394_request __user *r; | 429 | struct raw1394_request __user *r; |
430 | r = compat_alloc_user_space(sizeof(struct raw1394_request)); | 430 | r = compat_alloc_user_space(sizeof(struct raw1394_request)); |
431 | 431 | ||
432 | #define C(x) __copy_in_user(&r->x, &cr->x, sizeof(r->x)) | 432 | #define C(x) __copy_in_user(&r->x, &cr->x, sizeof(r->x)) |
433 | 433 | ||
434 | if (copy_in_user(r, cr, sizeof(struct compat_raw1394_req)) || | 434 | if (copy_in_user(r, cr, sizeof(struct compat_raw1394_req)) || |
435 | C(address) || | 435 | C(address) || |
436 | C(tag) || | 436 | C(tag) || |
437 | C(sendb) || | 437 | C(sendb) || |
438 | C(recvb)) | 438 | C(recvb)) |
439 | return ERR_PTR(-EFAULT); | 439 | return ERR_PTR(-EFAULT); |
440 | return (const char __user *)r; | 440 | return (const char __user *)r; |
441 | } | 441 | } |
@@ -443,11 +443,11 @@ static const char __user *raw1394_compat_write(const char __user *buf) | |||
443 | 443 | ||
444 | #define P(x) __put_user(r->x, &cr->x) | 444 | #define P(x) __put_user(r->x, &cr->x) |
445 | 445 | ||
446 | static int | 446 | static int |
447 | raw1394_compat_read(const char __user *buf, struct raw1394_request *r) | 447 | raw1394_compat_read(const char __user *buf, struct raw1394_request *r) |
448 | { | 448 | { |
449 | struct compat_raw1394_req __user *cr = (typeof(cr)) r; | 449 | struct compat_raw1394_req __user *cr = (typeof(cr)) r; |
450 | if (!access_ok(VERIFY_WRITE,cr,sizeof(struct compat_raw1394_req)) || | 450 | if (!access_ok(VERIFY_WRITE, cr, sizeof(struct compat_raw1394_req)) || |
451 | P(type) || | 451 | P(type) || |
452 | P(error) || | 452 | P(error) || |
453 | P(misc) || | 453 | P(misc) || |
@@ -512,18 +512,17 @@ static ssize_t raw1394_read(struct file *file, char __user * buffer, | |||
512 | } | 512 | } |
513 | 513 | ||
514 | #ifdef CONFIG_COMPAT | 514 | #ifdef CONFIG_COMPAT |
515 | if (count == sizeof(struct compat_raw1394_req) && | 515 | if (count == sizeof(struct compat_raw1394_req) && |
516 | sizeof(struct compat_raw1394_req) != | 516 | sizeof(struct compat_raw1394_req) != |
517 | sizeof(struct raw1394_request)) { | 517 | sizeof(struct raw1394_request)) { |
518 | ret = raw1394_compat_read(buffer, &req->req); | 518 | ret = raw1394_compat_read(buffer, &req->req); |
519 | 519 | } else | |
520 | } else | ||
521 | #endif | 520 | #endif |
522 | { | 521 | { |
523 | if (copy_to_user(buffer, &req->req, sizeof(req->req))) { | 522 | if (copy_to_user(buffer, &req->req, sizeof(req->req))) { |
524 | ret = -EFAULT; | 523 | ret = -EFAULT; |
525 | goto out; | 524 | goto out; |
526 | } | 525 | } |
527 | ret = (ssize_t) sizeof(struct raw1394_request); | 526 | ret = (ssize_t) sizeof(struct raw1394_request); |
528 | } | 527 | } |
529 | out: | 528 | out: |
@@ -2348,7 +2347,6 @@ static int state_connected(struct file_info *fi, struct pending_request *req) | |||
2348 | return handle_async_request(fi, req, node); | 2347 | return handle_async_request(fi, req, node); |
2349 | } | 2348 | } |
2350 | 2349 | ||
2351 | |||
2352 | static ssize_t raw1394_write(struct file *file, const char __user * buffer, | 2350 | static ssize_t raw1394_write(struct file *file, const char __user * buffer, |
2353 | size_t count, loff_t * offset_is_ignored) | 2351 | size_t count, loff_t * offset_is_ignored) |
2354 | { | 2352 | { |
@@ -2357,9 +2355,9 @@ static ssize_t raw1394_write(struct file *file, const char __user * buffer, | |||
2357 | ssize_t retval = 0; | 2355 | ssize_t retval = 0; |
2358 | 2356 | ||
2359 | #ifdef CONFIG_COMPAT | 2357 | #ifdef CONFIG_COMPAT |
2360 | if (count == sizeof(struct compat_raw1394_req) && | 2358 | if (count == sizeof(struct compat_raw1394_req) && |
2361 | sizeof(struct compat_raw1394_req) != | 2359 | sizeof(struct compat_raw1394_req) != |
2362 | sizeof(struct raw1394_request)) { | 2360 | sizeof(struct raw1394_request)) { |
2363 | buffer = raw1394_compat_write(buffer); | 2361 | buffer = raw1394_compat_write(buffer); |
2364 | if (IS_ERR(buffer)) | 2362 | if (IS_ERR(buffer)) |
2365 | return PTR_ERR(buffer); | 2363 | return PTR_ERR(buffer); |