From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1cneXH-0005Gn-AN for mharc-grub-devel@gnu.org; Tue, 14 Mar 2017 00:58:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54232) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cneXE-0005Gh-Vy for grub-devel@gnu.org; Tue, 14 Mar 2017 00:58:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cneXB-0005Xf-UP for grub-devel@gnu.org; Tue, 14 Mar 2017 00:58:13 -0400 Received: from smtp.nue.novell.com ([195.135.221.5]:37572) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cneXB-0005XN-LL for grub-devel@gnu.org; Tue, 14 Mar 2017 00:58:09 -0400 Received: from emea4-mta.ukb.novell.com ([10.120.13.87]) by smtp.nue.novell.com with ESMTP (TLS encrypted); Tue, 14 Mar 2017 05:58:07 +0100 Received: from linux-9gqx.suse.de (nwb-a10-snat.microfocus.com [10.120.13.201]) by emea4-mta.ukb.novell.com with ESMTP (TLS encrypted); Tue, 14 Mar 2017 04:57:57 +0000 Date: Tue, 14 Mar 2017 12:57:50 +0800 From: Michael Chang To: The development of GNU GRUB Cc: jamin.collins@gmail.com Subject: Re: [PATCH] disk/efi: skip iPXE dummy block devices Message-ID: <20170314045750.GC27844@linux-9gqx.suse.de> Mail-Followup-To: The development of GNU GRUB , jamin.collins@gmail.com References: <1489376702-5580-1-git-send-email-arvidjaar@gmail.com> <20170314030307.GA27844@linux-9gqx.suse.de> <257751b4-373c-a151-8685-b33b3eb2215a@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <257751b4-373c-a151-8685-b33b3eb2215a@gmail.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 195.135.221.5 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Mar 2017 04:58:14 -0000 On Tue, Mar 14, 2017 at 06:19:04AM +0300, Andrei Borzenkov wrote: > 14.03.2017 06:03, Michael Chang пишет: > > On Mon, Mar 13, 2017 at 06:45:02AM +0300, Andrei Borzenkov wrote: > >> iPXE adds Simple File System Protocol to loaded image handle, as side > >> effect it also adds Block IO protocol (according to comments, to work > >> around some bugs in EDK2). GRUB assumes that every device with Block IO > >> is disk and skips network initialization entirely. But iPXE Block IO > >> implementation is just a stub which always fails for every operation > >> so cannot be used. Attempt to detect and skip such devices. > >> > >> We are using media ID which iPXE sets to "iPXE" and block IO size in > >> hope that no real device would announce 1B block ... > >> > >> Closes: 50518 > >> > >> @Vladimir, @Daniel - this is probably 2.02 material. We cannot use > >> any device that advertises block size less than 512B anyway, so it > >> should not cause regression for disk boot. > >> > >> It is my fault, I have seen it earlier but was busy with another problem > >> so just worked around it to continue testing. > >> > >> --- > >> grub-core/disk/efi/efidisk.c | 9 +++++++++ > >> 1 file changed, 9 insertions(+) > >> > >> diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c > >> index 3b79f7b..47a4e99 100644 > >> --- a/grub-core/disk/efi/efidisk.c > >> +++ b/grub-core/disk/efi/efidisk.c > >> @@ -80,6 +80,15 @@ make_devices (void) > >> /* This should not happen... Why? */ > >> continue; > >> > >> + /* iPXE adds stub Block IO protocol to loaded image device handle. It is > >> + completely non-functional and simply returns an error for every method. > >> + So attempt to detect and skip it. Magic number is literal "iPXE" and > >> + check block size as well */ > >> + /* FIXME: shoud we close it? We do not do it elsewhere */ > >> + if (bio->media && bio->media->media_id == 0x69505845U && > > > > It seems that BE to LE conversion is required here as it tests for 'EXPi' on LE > > systems. > > > > iPXE sets it to this literal number: Well. The comment said magic number is literal "iPXE" so that's what I am confused. Thanks, Michael > > #define EFI_MEDIA_ID_MAGIC 0x69505845 > > /** Dummy block I/O media */ > static EFI_BLOCK_IO_MEDIA efi_block_io_media = { > .MediaId = EFI_MEDIA_ID_MAGIC, > .MediaPresent = TRUE, > .ReadOnly = TRUE, > .BlockSize = 1, > }; > > > > Thanks, > > Michael > > > >> + bio->media->block_size == 1) > >> + continue; > >> + > >> d = grub_malloc (sizeof (*d)); > >> if (! d) > >> { > >> -- > >> tg: (bcf3c55..) bug/50518 (depends on: master) > >> > >> _______________________________________________ > >> Grub-devel mailing list > >> Grub-devel@gnu.org > >> https://lists.gnu.org/mailman/listinfo/grub-devel > > > > _______________________________________________ > > Grub-devel mailing list > > Grub-devel@gnu.org > > https://lists.gnu.org/mailman/listinfo/grub-devel > > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel