• Ard Biesheuvel's avatar
    efi/libstub: Rewrite file I/O routine · 9302c1bb
    Ard Biesheuvel authored
    The file I/O routine that is used to load initrd or dtb files from
    the EFI system partition suffers from a few issues:
    - it converts the u8[] command line back to a UTF-16 string, which is
      pointless since we only handle initrd or dtb arguments provided via
      the loaded image protocol anyway, which is where we got the UTF-16[]
      command line from in the first place when booting via the PE entry
      point,
    - in the far majority of cases, only a single initrd= option is present,
      but it optimizes for multiple options, by going over the command line
      twice, allocating heap buffers for dynamically sized arrays, etc.
    - the coding style is hard to follow, with few comments, and all logic
      including string parsing etc all combined in a single routine.
    
    Let's fix this by rewriting most of it, based on the idea that in the
    case of multiple initrds, we can just allocate a new, bigger buffer
    and copy over the data before freeing the old one.
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    9302c1bb
file.c 6.23 KB