From 7a2602f629fef10be7254ad8fb58c52fc373ec29 Mon Sep 17 00:00:00 2001 From: Johannes Thumshirn Date: Fri, 15 May 2020 17:41:33 +0900 Subject: [PATCH] blkzone: deny destructive ioctls on busy blockdev If a user submits a zone management ioctl from user-space, like a zone reset and a file-system (like zonefs or f2fs) is mounted on the zoned block device, the zone will get reset and the file-system's cached value of the zone's write-pointer becomes invalid. Subsequent writes to this zone from the file-system will result in unaligned writes and the drive will error out. Open the block device file in exclusive mode for submitting these ioctls. If a file-system is mounted the kernel will return -EBUSY and we can't continue issuing the ioctl. [kzak@redhat.com: - remove unnecessary error message] Reported-by: Coly Li Cc: Damien Le Moal Signed-off-by: Johannes Thumshirn Signed-off-by: Karel Zak --- sys-utils/blkzone.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys-utils/blkzone.c b/sys-utils/blkzone.c index 8d9de2e1bb..62430e6340 100644 --- a/sys-utils/blkzone.c +++ b/sys-utils/blkzone.c @@ -301,7 +301,7 @@ static int blkzone_action(struct blkzone_control *ctl) if (!zonesize) errx(EXIT_FAILURE, _("%s: unable to determine zone size"), ctl->devname); - fd = init_device(ctl, O_WRONLY); + fd = init_device(ctl, O_WRONLY | O_EXCL); if (ctl->offset & (zonesize - 1)) errx(EXIT_FAILURE, _("%s: offset %" PRIu64 " is not aligned " -- 2.39.2