diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2012-02-06 04:20:45 -0500 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2012-02-06 04:20:45 -0500 |
commit | 822bfa51ce44f2c63c300fdb76dc99c4d5a5ca9f (patch) | |
tree | c9eaa4357b5ebca49c47bd5a25beabaa992442aa /drivers | |
parent | 9fa73472ddbcd3da87d35a7f4566eaaf345f798e (diff) |
cdrom: use copy_to_user() without the underscores
"nframes" comes from the user and "nframes * CD_FRAMESIZE_RAW" can wrap
on 32 bit systems. That would have been ok if we used the same wrapped
value for the copy, but we use a shifted value. We should just use the
checked version of copy_to_user() because it's not going to make a
difference to the speed.
Cc: stable@vger.kernel.com
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/cdrom/cdrom.c | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index 55eaf474d32c..8fefe59f52a7 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c | |||
@@ -2119,11 +2119,6 @@ static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf, | |||
2119 | if (!nr) | 2119 | if (!nr) |
2120 | return -ENOMEM; | 2120 | return -ENOMEM; |
2121 | 2121 | ||
2122 | if (!access_ok(VERIFY_WRITE, ubuf, nframes * CD_FRAMESIZE_RAW)) { | ||
2123 | ret = -EFAULT; | ||
2124 | goto out; | ||
2125 | } | ||
2126 | |||
2127 | cgc.data_direction = CGC_DATA_READ; | 2122 | cgc.data_direction = CGC_DATA_READ; |
2128 | while (nframes > 0) { | 2123 | while (nframes > 0) { |
2129 | if (nr > nframes) | 2124 | if (nr > nframes) |
@@ -2132,7 +2127,7 @@ static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf, | |||
2132 | ret = cdrom_read_block(cdi, &cgc, lba, nr, 1, CD_FRAMESIZE_RAW); | 2127 | ret = cdrom_read_block(cdi, &cgc, lba, nr, 1, CD_FRAMESIZE_RAW); |
2133 | if (ret) | 2128 | if (ret) |
2134 | break; | 2129 | break; |
2135 | if (__copy_to_user(ubuf, cgc.buffer, CD_FRAMESIZE_RAW * nr)) { | 2130 | if (copy_to_user(ubuf, cgc.buffer, CD_FRAMESIZE_RAW * nr)) { |
2136 | ret = -EFAULT; | 2131 | ret = -EFAULT; |
2137 | break; | 2132 | break; |
2138 | } | 2133 | } |
@@ -2140,7 +2135,6 @@ static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf, | |||
2140 | nframes -= nr; | 2135 | nframes -= nr; |
2141 | lba += nr; | 2136 | lba += nr; |
2142 | } | 2137 | } |
2143 | out: | ||
2144 | kfree(cgc.buffer); | 2138 | kfree(cgc.buffer); |
2145 | return ret; | 2139 | return ret; |
2146 | } | 2140 | } |