Commit b01cd5ac authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Alasdair G Kergon

dm: cope with access beyond end of device in dm_merge_bvec

If for any reason dm_merge_bvec() is given an offset beyond the end of the
device, avoid an oops and always allow one page to be added to an empty bio.
We'll reject the I/O later after the bio is submitted.
Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 5037108a
...@@ -843,6 +843,8 @@ static int dm_merge_bvec(struct request_queue *q, ...@@ -843,6 +843,8 @@ static int dm_merge_bvec(struct request_queue *q,
goto out; goto out;
ti = dm_table_find_target(map, bvm->bi_sector); ti = dm_table_find_target(map, bvm->bi_sector);
if (!dm_target_is_valid(ti))
goto out_table;
/* /*
* Find maximum amount of I/O that won't need splitting * Find maximum amount of I/O that won't need splitting
...@@ -861,6 +863,7 @@ static int dm_merge_bvec(struct request_queue *q, ...@@ -861,6 +863,7 @@ static int dm_merge_bvec(struct request_queue *q,
if (max_size && ti->type->merge) if (max_size && ti->type->merge)
max_size = ti->type->merge(ti, bvm, biovec, max_size); max_size = ti->type->merge(ti, bvm, biovec, max_size);
out_table:
dm_table_put(map); dm_table_put(map);
out: out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment