• Milan Broz's avatar
    dm table: reject devices without request fns · f4808ca9
    Milan Broz authored
    This patch adds a check that a block device has a request function
    defined before it is used.  Otherwise, misconfiguration can cause an oops.
    
    Because we are allowing devices with zero size e.g. an offline multipath
    device as in commit 2cd54d9b
    ("dm: allow offline devices") there needs to be an additional check
    to ensure devices are initialised.  Some block devices, like a loop
    device without a backing file, exist but have no request function.
    
    Reproducer is trivial: dm-mirror on unbound loop device
    (no backing file on loop devices)
    
    dmsetup create x --table "0 8 mirror core 2 8 sync 2 /dev/loop0 0 /dev/loop1 0"
    
    and mirror resync will immediatelly cause OOps.
    
    BUG: unable to handle kernel NULL pointer dereference at   (null)
     ? generic_make_request+0x2bd/0x590
     ? kmem_cache_alloc+0xad/0x190
     submit_bio+0x53/0xe0
     ? bio_add_page+0x3b/0x50
     dispatch_io+0x1ca/0x210 [dm_mod]
     ? read_callback+0x0/0xd0 [dm_mirror]
     dm_io+0xbb/0x290 [dm_mod]
     do_mirror+0x1e0/0x748 [dm_mirror]
    Signed-off-by: default avatarMilan Broz <mbroz@redhat.com>
    Reported-by: default avatarZdenek Kabelac <zkabelac@redhat.com>
    Acked-by: default avatarMike Snitzer <snitzer@redhat.com>
    Cc: stable@kernel.org
    Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
    f4808ca9
dm-table.c 31.7 KB