util-linux/backport-libblkid-check-fsync-return-code.patch
z30031144 7256e99e59 Sync community patches
(cherry picked from commit 0c076c6b8e45ffb530b27a96d1e1810a97c5e9ee)
2022-11-08 14:33:06 +08:00

60 lines
1.8 KiB
Diff

From 133a0d70f637b4f4e4337811e452153b04f2bdcf Mon Sep 17 00:00:00 2001
From: Karel Zak <kzak@redhat.com>
Date: Tue, 19 Apr 2022 09:44:07 +0200
Subject: [PATCH] libblkid: check fsync() return code
Since 39f5af25982d8b0244000e92a9d0e0e6557d0e17 libblkid uses
O_NONBLOCK. Now it's more obvious that check fsync() (and close())
return value after write() is always a good idea ...
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=2074486
Signed-off-by: Karel Zak <kzak@redhat.com>
---
libblkid/src/probe.c | 3 ++-
misc-utils/wipefs.c | 8 ++++++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/libblkid/src/probe.c b/libblkid/src/probe.c
index 80db524..3e8a7a0 100644
--- a/libblkid/src/probe.c
+++ b/libblkid/src/probe.c
@@ -1299,7 +1299,8 @@ int blkid_do_wipe(blkid_probe pr, int dryrun)
/* wipen on device */
if (write_all(fd, buf, len))
return -1;
- fsync(fd);
+ if (fsync(fd) != 0)
+ return -1;
pr->flags &= ~BLKID_FL_MODIF_BUFF; /* be paranoid */
return blkid_probe_step_back(pr);
diff --git a/misc-utils/wipefs.c b/misc-utils/wipefs.c
index 78dc63e..f08a9ba 100644
--- a/misc-utils/wipefs.c
+++ b/misc-utils/wipefs.c
@@ -615,7 +615,9 @@ static int do_wipe(struct wipe_control *ctl)
if (need_force)
warnx(_("Use the --force option to force erase."));
- fsync(blkid_probe_get_fd(pr));
+ if (fsync(blkid_probe_get_fd(pr)) != 0)
+ err(EXIT_FAILURE, _("%s: cannot flush modified buffers"),
+ ctl->devname);
#ifdef BLKRRPART
if (reread && (mode & O_EXCL)) {
@@ -635,7 +637,9 @@ static int do_wipe(struct wipe_control *ctl)
}
#endif
- close(blkid_probe_get_fd(pr));
+ if (close(blkid_probe_get_fd(pr)) != 0)
+ err(EXIT_FAILURE, _("%s: close device failed"), ctl->devname);
+
blkid_free_probe(pr);
free(backup);
return 0;
--
2.27.0