summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2010-08-31 01:50:03 +0200
committerDenys Vlasenko2010-08-31 01:50:03 +0200
commit4e7dd3c363377aefd6ac60ab4335e773482bcca1 (patch)
tree6b1245a04f63e2be22535da0c9d76a289b677453
parentc71ec7061637ef490186144e03b8d9a61464d934 (diff)
downloadbusybox-4e7dd3c363377aefd6ac60ab4335e773482bcca1.zip
busybox-4e7dd3c363377aefd6ac60ab4335e773482bcca1.tar.gz
mkswap: clear 1st kilobyte. Closes bug 1831
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--util-linux/mkswap.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c
index 3f736fa..61a786e 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);