• Mikulas Patocka's avatar
    dm snapshot: fix crash with transient storage and zero chunk size · c699a0db
    Mikulas Patocka authored
    The following commands will crash the kernel:
    
    modprobe brd rd_size=1048576
    dmsetup create o --table "0 `blockdev --getsize /dev/ram0` snapshot-origin /dev/ram0"
    dmsetup create s --table "0 `blockdev --getsize /dev/ram0` snapshot /dev/ram0 /dev/ram1 N 0"
    
    The reason is that when we test for zero chunk size, we jump to the label
    bad_read_metadata without setting the "r" variable. The function
    snapshot_ctr destroys all the structures and then exits with "r == 0". The
    kernel then crashes because it falsely believes that snapshot_ctr
    succeeded.
    
    In order to fix the bug, we set the variable "r" to -EINVAL.
    Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    c699a0db
dm-snap.c 68.2 KB