On Sat, Aug 9, 2014 at 3:45 PM, Mantas Mikulėnas <graw...@gmail.com> wrote:
> On Sat, Aug 9, 2014 at 10:23 PM, Matt Fleming <m...@console-pimps.org> wrote:
> [However... Whether it's five chunks, four (after making the initrd
> smaller), or just one (with your efi=nochunk), I noticed that it
> *always* hangs during the *last* read, and the allocated memory always
> ends at roughly the same address (0x137fffXXX). I wonder if it's
> selecting a memory location already in use, or something like that...]
>
> (The laptop is Asus K52JT, AMI firmware v206, no updates available.)

wonder if  efi_file_read return with wrong chunksize.

Can you try attached patch ?

Thanks

Yinghai
---
 drivers/firmware/efi/libstub/efi-stub-helper.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-2.6/drivers/firmware/efi/libstub/efi-stub-helper.c
===================================================================
--- linux-2.6.orig/drivers/firmware/efi/libstub/efi-stub-helper.c
+++ linux-2.6/drivers/firmware/efi/libstub/efi-stub-helper.c
@@ -431,7 +431,8 @@ efi_status_t handle_cmdline_files(efi_sy
 				status = efi_file_read(files[j].handle,
 						       &chunksize,
 						       (void *)addr);
-				if (status != EFI_SUCCESS) {
+				if (status != EFI_SUCCESS ||
+				    chunksize > size || !chunksize) {
 					pr_efi_err(sys_table_arg, "Failed to read file\n");
 					goto free_file_total;
 				}

Reply via email to