From 4e7dd3c363377aefd6ac60ab4335e773482bcca1 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 31 Aug 2010 01:50:03 +0200 Subject: mkswap: clear 1st kilobyte. Closes bug 1831 Signed-off-by: Denys Vlasenko --- util-linux/mkswap.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'util-linux/mkswap.c') diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c index 3f736faba..61a786e92 100644 --- a/util-linux/mkswap.c +++ b/util-linux/mkswap.c @@ -102,7 +102,15 @@ int mkswap_main(int argc UNUSED_PARAM, char **argv) printf("Setting up swapspace version 1, size = %"OFF_FMT"u bytes\n", len); mkswap_selinux_setcontext(fd, argv[0]); - /* Make a header. hdr is zero-filled so far... */ + /* hdr is zero-filled so far. Clear the first kbyte, or else + * mkswap-ing former FAT partition does NOT erase its signature. + * + * util-linux-ng 2.17.2 claims to erase it only if it does not see + * a partition table and is not run on whole disk. -f forces it. + */ + xwrite(fd, hdr, 1024); + + /* Fill the header. */ hdr->version = 1; hdr->last_page = (uoff_t)len / pagesize; @@ -123,7 +131,6 @@ int mkswap_main(int argc UNUSED_PARAM, char **argv) /* Write the header. Sync to disk because some kernel versions check * signature on disk (not in cache) during swapon. */ - xlseek(fd, 1024, SEEK_SET); xwrite(fd, hdr, NWORDS * 4); xlseek(fd, pagesize - 10, SEEK_SET); xwrite(fd, SWAPSPACE2, 10); -- cgit v1.2.3