From 80c320fac1c0fe0154ab07c3b5242a13d3c50adb Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sat, 31 Oct 2015 18:10:00 +0000 Subject: [PATCH] mkswap: fix block device open race Signed-off-by: Sami Kerola --- disk-utils/mkswap.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/disk-utils/mkswap.c b/disk-utils/mkswap.c index c7166f731..c559e60e4 100644 --- a/disk-utils/mkswap.c +++ b/disk-utils/mkswap.c @@ -240,23 +240,14 @@ static void open_device(struct mkswap_control *ctl) if (stat(ctl->devname, &ctl->devstat) < 0) err(EXIT_FAILURE, _("stat of %s failed"), ctl->devname); - - if (S_ISBLK(ctl->devstat.st_mode)) - ctl->fd = open(ctl->devname, O_RDWR | O_EXCL); - else { - if (ctl->check) { - ctl->check = 0; - warnx(_("warning: checking bad blocks from swap file is not supported: %s"), - ctl->devname); - } - ctl->fd = open(ctl->devname, O_RDWR); - } + ctl->fd = open_blkdev_or_file(&ctl->devstat, ctl->devname, O_RDWR); if (ctl->fd < 0) err(EXIT_FAILURE, _("cannot open %s"), ctl->devname); - - if (S_ISBLK(ctl->devstat.st_mode)) - if (blkdev_is_misaligned(ctl->fd)) - warnx(_("warning: %s is misaligned"), ctl->devname); + if (ctl->check && S_ISREG(ctl->devstat.st_mode)) { + ctl->check = 0; + warnx(_("warning: checking bad blocks from swap file is not supported: %s"), + ctl->devname); + } } static void wipe_device(struct mkswap_control *ctl)