From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1bVKLI-0003Zy-HD for mharc-grub-devel@gnu.org; Thu, 04 Aug 2016 11:13:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bVKLF-0003YA-J1 for grub-devel@gnu.org; Thu, 04 Aug 2016 11:13:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bVKLE-0006VG-Pk for grub-devel@gnu.org; Thu, 04 Aug 2016 11:13:49 -0400 Received: from mail-wm0-x230.google.com ([2a00:1450:400c:c09::230]:36806) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bVKLE-0006V6-IE for grub-devel@gnu.org; Thu, 04 Aug 2016 11:13:48 -0400 Received: by mail-wm0-x230.google.com with SMTP id q128so488078470wma.1 for ; Thu, 04 Aug 2016 08:13:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeblueprint-co-uk.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=skAk/h1/z6kkngHc+CAmbBj8EIL+omxCHNKOq4Fy284=; b=Q764DF2CSH84q3nRfcKCCVoMtsd7xfPrUKi0f12SD4f53akKnP2A8lkvpxkOUbGT4m 8NbF1t3x4Z33F+q4htyzu245SbMjbsk0eAkbwItFlM8RTxd4F78mxHYgB4xjCqAGwiVA BbrOTCpRtSgbuH6NzvqNgBKUTPmXKe0C0BmWn4R4Yv/tvlC+3D72Mt8CC7Gw1hUwaYO2 heW2+7tdm7Gsw1KjIuP/jKo6ySGK4FlUnqZpUIx2qPj52P1q/bpPxiueXYWBBENg2gvf xXwcX3nH3ZPzgeLzDVNuDx6CdQmpyNB6MD3W2OEhiSthJ8958mWUIdwOKw14wcdtvkZR eTHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=skAk/h1/z6kkngHc+CAmbBj8EIL+omxCHNKOq4Fy284=; b=OB1qu3SJ/xJzupFJz2dEPV1rXIm0nzyGC4+uF/OrTdJEN4/xJVh0LooAZILri3BZie GHhrEDoFoQTDuXn6an8T7Wx/avLpFyNEdP45V9QGOa+kXpB3xR+qXf4vVFYNbrdQqBLl s495oH1n+fIhEVlX0ZYx81Mf2eiT4NeM4Jhg9xUf8kkr/oviRPrsdpUTTaJ4Paqgdt+R Cp8XaNA63JWL3ab3S+9+nYAlg3U9G9bp4BqRTUnVfqxacafqR2VR5pDKiq9EBS8bTjJc z1sjcyVxt4iVHsqkzDJ1pUjG7yuWF0rhTW1HnOfXujOSK4/a7Dl22515vqFOgoPVNkVq tpUQ== X-Gm-Message-State: AEkoouuuDMmxY27FvHb9muVazm46uW3Ov0de/Ol+dwJKcGk73FpSdBhhyo3dIw5w7UBgFA== X-Received: by 10.28.22.70 with SMTP id 67mr32047790wmw.52.1470323627616; Thu, 04 Aug 2016 08:13:47 -0700 (PDT) Received: from localhost ([2a02:c7f:9225:4100:de53:60ff:fe39:5599]) by smtp.gmail.com with ESMTPSA id kq2sm13293288wjc.41.2016.08.04.08.13.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 04 Aug 2016 08:13:46 -0700 (PDT) Date: Thu, 4 Aug 2016 16:13:45 +0100 From: Matt Fleming To: Lukas Wunner Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org, Andreas Noever , Pierre Moreau , reverser@put.as, grub-devel@gnu.org, x86@kernel.org, linux-acpi@vger.kernel.org Subject: Re: [PATCH 1/6] efi: Retrieve Apple device properties Message-ID: <20160804151345.GM3636@codeblueprint.co.uk> References: <833d193b8a18b0afe168c515e9e56a857ece4bd1.1469616641.git.lukas@wunner.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <833d193b8a18b0afe168c515e9e56a857ece4bd1.1469616641.git.lukas@wunner.de> User-Agent: Mutt/1.5.24+41 (02bc14ed1569) (2015-08-30) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::230 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: Thu, 04 Aug 2016 15:13:50 -0000 On Thu, 28 Jul, at 02:25:41AM, Lukas Wunner wrote: > > diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c > index ff574da..7262ee4 100644 > --- a/arch/x86/boot/compressed/eboot.c > +++ b/arch/x86/boot/compressed/eboot.c > @@ -571,6 +571,55 @@ free_handle: > efi_call_early(free_pool, pci_handle); > } > > +static void retrieve_apple_device_properties(struct boot_params *params) > +{ > + efi_guid_t guid = APPLE_PROPERTIES_PROTOCOL_GUID; > + struct setup_data *data, *new; > + efi_status_t status; > + void *properties; > + u32 size = 0; > + > + status = efi_early->call( > + (unsigned long)sys_table->boottime->locate_protocol, > + &guid, NULL, &properties); > + if (status != EFI_SUCCESS) > + return; > + > + do { > + status = efi_call_early(allocate_pool, EFI_LOADER_DATA, > + size + sizeof(struct setup_data), &new); > + if (status != EFI_SUCCESS) { > + efi_printk(sys_table, > + "Failed to alloc mem for properties\n"); > + return; > + } > + status = efi_early->call(efi_early->is64 ? > + ((apple_properties_protocol_64 *)properties)->get_all : > + ((apple_properties_protocol_32 *)properties)->get_all, > + properties, new->data, &size); > + if (status == EFI_BUFFER_TOO_SMALL) > + efi_call_early(free_pool, new); > + } while (status == EFI_BUFFER_TOO_SMALL); Is this looping really required? Do we not know ahead of time what we expect the size to be? Writing this as a potentially infinite loop (if broken firmware always returns EFI_BUFFER_TOO_SMALL) is a bad idea.