mkswap: clear 1st kilobyte. Closes bug 1831
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 30 Aug 2010 23:50:03 +0000 (01:50 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 30 Aug 2010 23:50:03 +0000 (01:50 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
util-linux/mkswap.c

index 3f736faba9650c358cce068364808a3f6837a557..61a786e92dd866df9d69de77257ed813ffcfbe05 100644 (file)
@@ -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);