Skip to content

Commit

Permalink
rbd: return an error when an invalid header is read
Browse files Browse the repository at this point in the history
This protects against opening future rbd images that have incompatible format changes.

Signed-off-by: Josh Durgin <[email protected]>
  • Loading branch information
jdurgin authored and liewegas committed Dec 7, 2011
1 parent 2151937 commit 81e759f
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,10 @@ static int rbd_header_from_disk(struct rbd_image_header *header,
u32 snap_count = le32_to_cpu(ondisk->snap_count);
int ret = -ENOMEM;

if (memcmp(ondisk, RBD_HEADER_TEXT, sizeof(RBD_HEADER_TEXT))) {
return -ENXIO;
}

init_rwsem(&header->snap_rwsem);
header->snap_names_len = le64_to_cpu(ondisk->snap_names_len);
header->snapc = kmalloc(sizeof(struct ceph_snap_context) +
Expand Down Expand Up @@ -1610,8 +1614,13 @@ static int rbd_read_header(struct rbd_device *rbd_dev,
goto out_dh;

rc = rbd_header_from_disk(header, dh, snap_count, GFP_KERNEL);
if (rc < 0)
if (rc < 0) {
if (rc == -ENXIO) {
pr_warning("unrecognized header format"
" for image %s", rbd_dev->obj);
}
goto out_dh;
}

if (snap_count != header->total_snaps) {
snap_count = header->total_snaps;
Expand Down

0 comments on commit 81e759f

Please sign in to comment.