grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] grub-setup Modify the conditionality of the copy of the part


From: Colin Watson
Subject: Re: [PATCH] grub-setup Modify the conditionality of the copy of the partition table
Date: Fri, 25 Mar 2011 23:31:23 +0000
User-agent: Mutt/1.5.20 (2009-06-14)

On Fri, Mar 25, 2011 at 11:55:32PM +0100, Vladimir 'φ-coder/phcoder' Serbinenko 
wrote:
> On 25.03.2011 23:13, Mario Limonciello wrote:
> > +        * util/grub-setup.c: Conditionalize the partition map copy on 
> > floppy
> > +          support, not on whether the target contains partitions.
> > +
> > +          Otherwise, the BIOS on Dell Latitude E series laptops will 
> > freeze 
> > +          during POST if an invalid partition table is contained in the PBR
> > +          of the active partition when GRUB is installed to a partition.
> 
> It's wrong to assume that no floppies contain partition tables. Also
> --allow-floppy is usually used for USB sticks which sometimes appear as
> floppies on some BIOSes and they pretty much contain the partition
> table. Bottom line is: if you see a partition table: preserve it.

Reading from floppies requires the floppy_probe function in boot.S,
doesn't it, which collides with the partition table?  But it makes sense
to keep dest_partmap in the condition for safety anyway (and it saves a
call to grub_util_biosdisk_is_floppy), so we'd end up with:

    if (dest_partmap ||
        (!allow_floppy && !grub_util_biosdisk_is_floppy (dest_dev->disk)))
      memcpy (boot_img + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC,
              tmp_img + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC,
              GRUB_BOOT_MACHINE_PART_END - GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC);

?

> But it's ok to preserve this contents if floppy support is disabled
> even if no partition table is discovered.

In the case Mario discovered, there was indeed no partition table (all
zeroes).  Writing the floppy-probing code into that area caused it to
fail.

> A small logic lecture:
> 
> Floppy support is: allow_floppy || grub_util_biosdisk_is_floppy 
> (dest_dev->disk)
> Negation of it is either !(allow_floppy || grub_util_biosdisk_is_floppy 
> (dest_dev->disk)) or !allow_floppy && !grub_util_biosdisk_is_floppy 
> (dest_dev->disk), not what you wrote.

Agreed.  The latter form is found elsewhere in grub-setup.

> Please don't move around unrelated parts.

The parts Mario moved around weren't unrelated.  Since the case at hand
is that of installing to a partition boot record, this if block will
run:

    if (! dest_partmap)
      {
        grub_util_warn (_("Attempting to install GRUB to a partitionless disk 
or to a partition.  This is a BAD idea."));
        goto unable_to_embed;
      }

In order to preserve the partition table (or lack thereof) in this case,
it was necessary to move the memcpy up above that test.

Cheers,

-- 
Colin Watson                                       address@hidden



reply via email to

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