Re: [regression] fix 32-bit breakage in block device read(2) (was Re: 32-bit bug in iovec iterator changes)

From: Bruno Wolff III
Date: Thu Jun 26 2014 - 11:35:32 EST


On Mon, Jun 23, 2014 at 08:44:40 +0100,
Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote:

blkdev_read_iter() wants to cap the iov_iter by the amount of
data remaining to the end of device. That's what iov_iter_truncate()
is for (trim iter->count if it's above the given limit). So far,
so good, but the argument of iov_iter_truncate() is size_t, so on
32bit boxen (in case of a large device) we end up with that upper
limit truncated down to 32 bits *before* comparing it with iter->count.

This seems to fix a problem I had (https://bugzilla.kernel.org/show_bug.cgi?id=78711) with a partition device (/dev/sda3) being zero size on 3.16 kernels. However I am having some other issues with 3.16 on i686 and the amount of testing was the raid array using /dev/sda3 appeared to start (which it hadn't previously), but the system hung before finishing the boot process.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/