kpartx: only recognize dasd part table on DASD
authorMartin Wilck <mwilck@suse.com>
Sat, 2 Sep 2017 22:38:37 +0000 (00:38 +0200)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Wed, 20 Sep 2017 14:19:44 +0000 (16:19 +0200)
The code for reading DASD partition tables is so generic
that it will pretend to find a partition even on a totally
zeroed disk. Prevent that by recognizing dasd partition tables
only on DASD disks. Such a check was already present for DM
mappings on DASD, but (strangely) not for DASD itself.

Without this, kpartx will (try to) create a partition mapping
on a loop device with no partition table.

Found this during testing because test-kpartx unexpectedly
succeeded without my "fix part deletion without partition table" fix
when run on a loop device. That was caused by this bug pretending an
existing partition table although there was none.

Signed-off-by: Martin Wilck <mwilck@suse.com>
kpartx/dasd.c

index f50c1bd..e418d5a 100644 (file)
@@ -133,6 +133,9 @@ read_dasd_pt(int fd, struct slice all, struct slice *sp, int ns)
                        /* Couldn't open the device */
                        return -1;
                }
+       } else if ((unsigned int)major(sbuf.st_rdev) != 94) {
+                       /* Not a DASD */
+                       return -1;
        } else {
                fd_dasd = fd;
        }