commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[2651] 2009-10-25 Robert Millan <address@hidden>


From: Robert Millan
Subject: [2651] 2009-10-25 Robert Millan <address@hidden>
Date: Sun, 25 Oct 2009 15:23:49 +0000

Revision: 2651
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2651
Author:   robertmh
Date:     2009-10-25 15:23:48 +0000 (Sun, 25 Oct 2009)
Log Message:
-----------
2009-10-25  Robert Millan  <address@hidden>

        * include/grub/fs.h [GRUB_UTIL] (struct grub_fs): Add
        `reserved_first_sector' member.
        * fs/ext2.c [GRUB_UTIL] (grub_ext2_fs): Initialize
        `reserved_first_sector' to 1.
        * fs/fat.c [GRUB_UTIL] (grub_fat_fs): Likewise.
        * fs/ntfs.c [GRUB_UTIL] (grub_ntfs_fs): Likewise.
        * fs/hfsplus.c [GRUB_UTIL] (grub_hfsplus_fs): Likewise.
        * 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().

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/fs/ext2.c
    trunk/grub2/fs/fat.c
    trunk/grub2/fs/hfsplus.c
    trunk/grub2/fs/ntfs.c
    trunk/grub2/include/grub/fs.h
    trunk/grub2/util/i386/pc/grub-setup.c

Property Changed:
----------------
    trunk/grub2/


Property changes on: trunk/grub2
___________________________________________________________________
Modified: bzr:revision-info
   - timestamp: 2009-10-25 16:14:08.677999973 +0100
committer: Robert Millan <address@hidden>
properties: 
        branch-nick: fix

   + timestamp: 2009-10-25 16:23:32.388999939 +0100
committer: Robert Millan <address@hidden>
properties: 
        branch-nick: trunk

Modified: bzr:revision-id:v3-single1-dHJ1bmsvZ3J1YjI.
   - 1769 address@hidden
1770 address@hidden
1771 address@hidden
1772 address@hidden
1773 address@hidden
1774 address@hidden
1775 address@hidden

   + 1769 address@hidden
1770 address@hidden
1771 address@hidden
1772 address@hidden
1773 address@hidden
1774 address@hidden
1775 address@hidden
1776 address@hidden


Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2009-10-25 15:14:25 UTC (rev 2650)
+++ trunk/grub2/ChangeLog       2009-10-25 15:23:48 UTC (rev 2651)
@@ -1,5 +1,19 @@
 2009-10-25  Robert Millan  <address@hidden>
 
+       * include/grub/fs.h [GRUB_UTIL] (struct grub_fs): Add
+       `reserved_first_sector' member.
+       * fs/ext2.c [GRUB_UTIL] (grub_ext2_fs): Initialize
+       `reserved_first_sector' to 1.
+       * fs/fat.c [GRUB_UTIL] (grub_fat_fs): Likewise.
+       * fs/ntfs.c [GRUB_UTIL] (grub_ntfs_fs): Likewise.
+       * fs/hfsplus.c [GRUB_UTIL] (grub_hfsplus_fs): Likewise.
+       * 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-25  Robert Millan  <address@hidden>
+
        * include/grub/misc.h: Fix wrong evaluation of APPLE_CC.
        (memset): Fix function prototype.
 

Modified: trunk/grub2/fs/ext2.c
===================================================================
--- trunk/grub2/fs/ext2.c       2009-10-25 15:14:25 UTC (rev 2650)
+++ trunk/grub2/fs/ext2.c       2009-10-25 15:23:48 UTC (rev 2651)
@@ -927,6 +927,9 @@
     .label = grub_ext2_label,
     .uuid = grub_ext2_uuid,
     .mtime = grub_ext2_mtime,
+#ifdef GRUB_UTIL
+    .reserved_first_sector = 1,
+#endif
     .next = 0
   };
 

Modified: trunk/grub2/fs/fat.c
===================================================================
--- trunk/grub2/fs/fat.c        2009-10-25 15:14:25 UTC (rev 2650)
+++ trunk/grub2/fs/fat.c        2009-10-25 15:23:48 UTC (rev 2651)
@@ -855,6 +855,9 @@
     .close = grub_fat_close,
     .label = grub_fat_label,
     .uuid = grub_fat_uuid,
+#ifdef GRUB_UTIL
+    .reserved_first_sector = 1,
+#endif
     .next = 0
   };
 

Modified: trunk/grub2/fs/hfsplus.c
===================================================================
--- trunk/grub2/fs/hfsplus.c    2009-10-25 15:14:25 UTC (rev 2650)
+++ trunk/grub2/fs/hfsplus.c    2009-10-25 15:23:48 UTC (rev 2651)
@@ -1021,6 +1021,9 @@
     .label = grub_hfsplus_label,
     .mtime = grub_hfsplus_mtime,
     .uuid = grub_hfsplus_uuid,
+#ifdef GRUB_UTIL
+    .reserved_first_sector = 1,
+#endif
     .next = 0
   };
 

Modified: trunk/grub2/fs/ntfs.c
===================================================================
--- trunk/grub2/fs/ntfs.c       2009-10-25 15:14:25 UTC (rev 2650)
+++ trunk/grub2/fs/ntfs.c       2009-10-25 15:23:48 UTC (rev 2651)
@@ -1081,15 +1081,19 @@
   return grub_errno;
 }
 
-static struct grub_fs grub_ntfs_fs = {
-  .name = "ntfs",
-  .dir = grub_ntfs_dir,
-  .open = grub_ntfs_open,
-  .read = grub_ntfs_read,
-  .close = grub_ntfs_close,
-  .label = grub_ntfs_label,
-  .uuid = grub_ntfs_uuid,
-  .next = 0
+static struct grub_fs grub_ntfs_fs =
+  {
+    .name = "ntfs",
+    .dir = grub_ntfs_dir,
+    .open = grub_ntfs_open,
+    .read = grub_ntfs_read,
+    .close = grub_ntfs_close,
+    .label = grub_ntfs_label,
+    .uuid = grub_ntfs_uuid,
+#ifdef GRUB_UTIL
+    .reserved_first_sector = 1,
+#endif
+    .next = 0
 };
 
 GRUB_MOD_INIT (ntfs)

Modified: trunk/grub2/include/grub/fs.h
===================================================================
--- trunk/grub2/include/grub/fs.h       2009-10-25 15:14:25 UTC (rev 2650)
+++ trunk/grub2/include/grub/fs.h       2009-10-25 15:23:48 UTC (rev 2651)
@@ -68,6 +68,11 @@
   /* Get writing time of filesystem. */
   grub_err_t (*mtime) (grub_device_t device, grub_int32_t *timebuf);
 
+#ifdef GRUB_UTIL
+  /* Whether this filesystem reserves first sector for DOS-style boot.  */
+  int reserved_first_sector;
+#endif
+
   /* The next filesystem.  */
   struct grub_fs *next;
 };

Modified: trunk/grub2/util/i386/pc/grub-setup.c
===================================================================
--- trunk/grub2/util/i386/pc/grub-setup.c       2009-10-25 15:14:25 UTC (rev 
2650)
+++ trunk/grub2/util/i386/pc/grub-setup.c       2009-10-25 15:23:48 UTC (rev 
2651)
@@ -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,21 @@
   if (grub_disk_read (dest_dev->disk, 0, 0, GRUB_DISK_SECTOR_SIZE, tmp_img))
     grub_util_error ("%s", grub_errmsg);
 
+  if (dest_dev->disk->partition && fs_probe)
+    {
+      grub_fs_t fs;
+      fs = grub_fs_probe (dest_dev);
+      if (! fs)
+       grub_util_error ("Unable to identify a filesystem in %s; safety check 
can't be performed.");
+
+      if (! fs->reserved_first_sector)
+       grub_util_error ("%s appears to contain a %s filesystem which isn't 
known to "
+                        "reserve space for DOS-style boot.  Installing GRUB 
there could "
+                        "result in FILESYSTEM DESTRUCTION if valuable data is 
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 +571,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 +596,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 +630,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 +683,10 @@
            force = 1;
            break;
 
+         case 's':
+           fs_probe = 0;
+           break;
+
          case 'h':
            usage (0);
            break;
@@ -767,7 +788,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 +797,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 ();





reply via email to

[Prev in Thread] Current Thread [Next in Thread]