summaryrefslogtreecommitdiffstats
path: root/disk-utils/mkswap.c
diff options
context:
space:
mode:
authorSami Kerola2015-10-31 19:10:00 +0100
committerSami Kerola2015-11-22 21:56:38 +0100
commit80c320fac1c0fe0154ab07c3b5242a13d3c50adb (patch)
treef15c888b40d4962c6a22ab536a358c3fccdd818e /disk-utils/mkswap.c
parentmkfs.minix: fix block device open race (diff)
downloadkernel-qcow2-util-linux-80c320fac1c0fe0154ab07c3b5242a13d3c50adb.tar.gz
kernel-qcow2-util-linux-80c320fac1c0fe0154ab07c3b5242a13d3c50adb.tar.xz
kernel-qcow2-util-linux-80c320fac1c0fe0154ab07c3b5242a13d3c50adb.zip
mkswap: fix block device open race
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'disk-utils/mkswap.c')
-rw-r--r--disk-utils/mkswap.c21
1 files 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)