mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
x86, efi: Only close open files in error path
The loop at the 'close_handles' label in handle_ramdisks() should be using 'i', which represents the number of initrd files that were successfully opened, not 'nr_initrds' which is the number of initrd= arguments passed on the command line. Currently, if we execute the loop to close all file handles and we failed to open any initrds we'll try to call the close function on a garbage pointer, causing the machine to hang. Cc: Matthew Garrett <mjg@redhat.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com> Link: http://lkml.kernel.org/r/1331907517-3985-2-git-send-email-matt@console-pimps.org Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
fb21affa49
commit
30dc0d0fe5
1 changed files with 1 additions and 1 deletions
|
@ -674,7 +674,7 @@ static efi_status_t handle_ramdisks(efi_loaded_image_t *image,
|
||||||
low_free(initrd_total, initrd_addr);
|
low_free(initrd_total, initrd_addr);
|
||||||
|
|
||||||
close_handles:
|
close_handles:
|
||||||
for (k = j; k < nr_initrds; k++)
|
for (k = j; k < i; k++)
|
||||||
efi_call_phys1(fh->close, initrds[k].handle);
|
efi_call_phys1(fh->close, initrds[k].handle);
|
||||||
free_initrds:
|
free_initrds:
|
||||||
efi_call_phys1(sys_table->boottime->free_pool, initrds);
|
efi_call_phys1(sys_table->boottime->free_pool, initrds);
|
||||||
|
|
Loading…
Reference in a new issue