]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
dm raid: ensure superblock's size matches device's logical block size
authorHeinz Mauelshagen <heinzm@redhat.com>
Fri, 17 Oct 2014 11:38:50 +0000 (13:38 +0200)
committerJiri Slaby <jslaby@suse.cz>
Wed, 19 Nov 2014 17:38:22 +0000 (18:38 +0100)
commite90b799e47a5d3923e58d8cc11bdff39117580c3
tree59fd8bf33221c240f358f7cc666b8f89c8394b38
parentd0960e2100d219b38ac94bddcca37c04281f31e9
dm raid: ensure superblock's size matches device's logical block size

commit 40d43c4b4cac4c2647bf07110d7b07d35f399a84 upstream.

The dm-raid superblock (struct dm_raid_superblock) is padded to 512
bytes and that size is being used to read it in from the metadata
device into one preallocated page.

Reading or writing this on a 512-byte sector device works fine but on
a 4096-byte sector device this fails.

Set the dm-raid superblock's size to the logical block size of the
metadata device, because IO at that size is guaranteed too work.  Also
add a size check to avoid silent partial metadata loss in case the
superblock should ever grow past the logical block size or PAGE_SIZE.

[includes pointer math fix from Dan Carpenter]
Reported-by: "Liuhua Wang" <lwang@suse.com>
Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
drivers/md/dm-raid.c