• Mike Snitzer's avatar
    dm zone: fix NULL pointer dereference in dm_zone_map_bio · 73d7b06e
    Mike Snitzer authored
    Commit 0fbb4d93 ("dm: add dm_submit_bio_remap interface") changed
    the alloc_io() function to delay the initialization of struct dm_io's
    orig_bio member, leaving it NULL until after the dm_io and associated
    user submitted bio is processed by __split_and_process_bio(). This
    change causes a NULL pointer dereference in dm_zone_map_bio() when the
    original user bio is inspected to detect the need for zone append
    command emulation.
    
    Fix this NULL pointer by updating dm_zone_map_bio() to not access
    ->orig_bio when the same info can be accessed from the clone of the
    ->orig_bio _before_ any ->map processing. Save off the bio_op() and
    bio_sectors() for the clone and then use the saved orig_bio_details as
    needed.
    
    Fixes: 0fbb4d93 ("dm: add dm_submit_bio_remap interface")
    Reported-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Tested-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
    73d7b06e
dm-zone.c 16.7 KB