From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1Mz7Q3-0001uR-Hu for mharc-grub-devel@gnu.org; Sat, 17 Oct 2009 07:25:55 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Mz7Q1-0001u5-Rr for grub-devel@gnu.org; Sat, 17 Oct 2009 07:25:53 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Mz7Px-0001pC-20 for grub-devel@gnu.org; Sat, 17 Oct 2009 07:25:53 -0400 Received: from [199.232.76.173] (port=40095 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mz7Pw-0001p6-Th for grub-devel@gnu.org; Sat, 17 Oct 2009 07:25:48 -0400 Received: from xvm-190-8.ghst.net ([217.70.190.8]:47033 helo=aybabtu.com) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Mz7Pw-0005U7-Gy for grub-devel@gnu.org; Sat, 17 Oct 2009 07:25:48 -0400 Received: from [192.168.10.10] (helo=thorin) by aybabtu.com with esmtp (Exim 4.69) (envelope-from ) id 1Mz7Pu-0007ST-SF for grub-devel@gnu.org; Sat, 17 Oct 2009 13:25:47 +0200 Received: from rmh by thorin with local (Exim 4.69) (envelope-from ) id 1Mz7Pt-0000wS-S5 for grub-devel@gnu.org; Sat, 17 Oct 2009 13:25:45 +0200 Date: Sat, 17 Oct 2009 13:25:45 +0200 From: Robert Millan To: The development of GRUB 2 Message-ID: <20091017112545.GA3556@thorin> References: <4AD8514E.2040304@gmail.com> <4AD87D15.7060408@gmail.com> <20091016160156.GA4986@nubol.oskuro.net> <20091016183805.GE7037@thorin> <4AD8D305.5000806@gmail.com> <20091016205258.GA8496@thorin> <4AD8E0CF.9080509@gmail.com> <20091016215343.GA9378@thorin> <4AD8F11D.1030007@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="qMm9M+Fa2AknHoGS" Content-Disposition: inline In-Reply-To: <4AD8F11D.1030007@gmail.com> Organization: free as in freedom X-Message-Flag: Worried about Outlook viruses? Switch to Thunderbird! www.mozilla.com/thunderbird X-Debbugs-No-Ack: true User-Agent: Mutt/1.5.18 (2008-05-17) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Subject: Re: [PATCH] Refuse to install on XFS destroying its superblock X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Oct 2009 11:25:54 -0000 --qMm9M+Fa2AknHoGS Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sat, Oct 17, 2009 at 12:18:05AM +0200, Vladimir 'phcoder' Serbinenko wrote: > 2009-10-16 Vladimir Serbinenko > > + * util/i386/pc/grub-setup.c (setup): Refuse to overwrite XFS superblock. > + (options): New option --destroy-xfs. > + (main): Handle --destroy-xfs. I gave this some more thought, and I think this could be less ad-hoc. We're treating XFS as if it were a "weird", unique thing just because it isn't biased towards DOS-style boot like most filesystems are. Instead, I've done something more generic, using our standard filesystem probing engine which should be more reliable than a single memcmp. I propose the attached patch. -- Robert Millan The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and how) you may access your data; but nobody's threatening your freedom: we still allow you to remove your data and not access it at all." --qMm9M+Fa2AknHoGS Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="fs_check.diff" === modified file 'ChangeLog' --- ChangeLog 2009-10-16 20:21:12 +0000 +++ ChangeLog 2009-10-17 11:19:35 +0000 @@ -1,3 +1,13 @@ +2009-10-17 Robert Millan + + * include/grub/fs.h (struct grub_fs): Add `begins_at_first_sector' + member. + * fs/xfs.c (grub_xfs_fs): Initialize `begins_at_first_sector' to 1. + * util/i386/pc/grub-setup.c (setup): Add safety check that probes for + filesystems which begin at first sector. + (options): New option --skip-fs-probe. + (main): Handle --skip-fs-probe and pass it to setup(). + 2009-10-16 Vladimir Serbinenko Let user specify OpenBSD root device. === modified file 'fs/xfs.c' --- fs/xfs.c 2009-08-26 14:17:34 +0000 +++ fs/xfs.c 2009-10-17 11:19:35 +0000 @@ -805,6 +805,9 @@ .close = grub_xfs_close, .label = grub_xfs_label, .uuid = grub_xfs_uuid, +#ifdef GRUB_UTIL + .begins_at_first_sector = 1, +#endif .next = 0 }; === modified file 'include/grub/fs.h' --- include/grub/fs.h 2009-06-10 21:04:23 +0000 +++ include/grub/fs.h 2009-10-17 11:19:35 +0000 @@ -68,6 +68,12 @@ /* Get writing time of filesystem. */ grub_err_t (*mtime) (grub_device_t device, grub_int32_t *timebuf); +#ifdef GRUB_UTIL + /* Whether this filesystem begins at first sector or reserves it for + DOS-style boot. */ + int begins_at_first_sector; +#endif + /* The next filesystem. */ struct grub_fs *next; }; === modified file 'util/i386/pc/grub-setup.c' --- util/i386/pc/grub-setup.c 2009-08-25 08:28:13 +0000 +++ util/i386/pc/grub-setup.c 2009-10-17 11:19:35 +0000 @@ -86,7 +86,7 @@ static void setup (const char *dir, const char *boot_file, const char *core_file, - const char *root, const char *dest, int must_embed, int force) + const char *root, const char *dest, int must_embed, int force, int fs_probe) { char *boot_path, *core_path, *core_path_dev; char *boot_img, *core_img; @@ -251,6 +251,16 @@ if (grub_disk_read (dest_dev->disk, 0, 0, GRUB_DISK_SECTOR_SIZE, tmp_img)) grub_util_error ("%s", grub_errmsg); + if (fs_probe) + { + grub_fs_t fs; + fs = grub_fs_probe (dest_dev); + if (fs && fs->begins_at_first_sector) + grub_util_error ("%s appears to contain a %s filesystem, which would be " + "overwritten by grub-setup (--skip-fs-probe disables this " + "check, use at your own risk).", dest_dev->disk->name, fs->name); + } + /* Copy the possible DOS BPB. */ memcpy (boot_img + GRUB_BOOT_MACHINE_BPB_START, tmp_img + GRUB_BOOT_MACHINE_BPB_START, @@ -556,6 +566,7 @@ {"device-map", required_argument, 0, 'm'}, {"root-device", required_argument, 0, 'r'}, {"force", no_argument, 0, 'f'}, + {"skip-fs-probe", no_argument, 0, 's'}, {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, {"verbose", no_argument, 0, 'v'}, @@ -580,6 +591,7 @@ -m, --device-map=FILE use FILE as the device map [default=%s]\n\ -r, --root-device=DEV use DEV as the root device [default=guessed]\n\ -f, --force install even if problems are detected\n\ + -s, --skip-fs-probe do not probe for filesystems in DEVICE\n\ -h, --help display this message and exit\n\ -V, --version print version information and exit\n\ -v, --verbose print verbose messages\n\ @@ -613,7 +625,7 @@ char *dev_map = 0; char *root_dev = 0; char *dest_dev; - int must_embed = 0, force = 0; + int must_embed = 0, force = 0, fs_probe = 1; progname = "grub-setup"; @@ -666,6 +678,10 @@ force = 1; break; + case 's': + fs_probe = 0; + break; + case 'h': usage (0); break; @@ -767,7 +783,7 @@ setup (dir ? : DEFAULT_DIRECTORY, boot_file ? : DEFAULT_BOOT_FILE, core_file ? : DEFAULT_CORE_FILE, - root_dev, grub_util_get_grub_dev (devicelist[i]), 1, force); + root_dev, grub_util_get_grub_dev (devicelist[i]), 1, force, fs_probe); } } else @@ -776,7 +792,7 @@ setup (dir ? : DEFAULT_DIRECTORY, boot_file ? : DEFAULT_BOOT_FILE, core_file ? : DEFAULT_CORE_FILE, - root_dev, dest_dev, must_embed, force); + root_dev, dest_dev, must_embed, force, fs_probe); /* Free resources. */ grub_fini_all (); --qMm9M+Fa2AknHoGS--