Skip to content
Snippets Groups Projects
Forked from Reform / reform-boundary-uboot
Source project has a limited visibility.
  • Alexander Graf's avatar
    905cb9e1
    efi_loader: Ensure efi_dp_find_obj() finds exact matches · 905cb9e1
    Alexander Graf authored
    
    When calling efi_dp_find_obj(), we usually want to find the *exact* match
    of an object for a given device path. However, I ran into a nasty corner case
    where I had the following objects with paths available:
    
    Handle 0x9feffa70
      /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/EndEntire
    Handle 0x9feffb58
      /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/HD(1,800,32000,2de808cb00000000,1,1)/EndEntire
    
    and was searching for
    
      /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/HD(1,800,32000,2de808cb00000000,1,1)/EndEntire
    
    But because our device path search looked for any substring match, it would
    return
    
      /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/EndEntire
    
    because that path is a full substring of the path we were searching for.
    
    So this patch adapts the device path search logic to always look for exact
    matches first. The way we distinguish between those cases is by looking at
    whether our caller actually deals with remainders.
    
    As a side effect, the code as is from all I can tell now never does a
    substring match anymore, because it always gets called with rem=NULL, so
    we always only do exact matches now.
    
    Reported-by: default avatarJonathan Gray <jsg@jsg.id.au>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    905cb9e1
    History
    efi_loader: Ensure efi_dp_find_obj() finds exact matches
    Alexander Graf authored
    
    When calling efi_dp_find_obj(), we usually want to find the *exact* match
    of an object for a given device path. However, I ran into a nasty corner case
    where I had the following objects with paths available:
    
    Handle 0x9feffa70
      /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/EndEntire
    Handle 0x9feffb58
      /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/HD(1,800,32000,2de808cb00000000,1,1)/EndEntire
    
    and was searching for
    
      /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/HD(1,800,32000,2de808cb00000000,1,1)/EndEntire
    
    But because our device path search looked for any substring match, it would
    return
    
      /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/EndEntire
    
    because that path is a full substring of the path we were searching for.
    
    So this patch adapts the device path search logic to always look for exact
    matches first. The way we distinguish between those cases is by looking at
    whether our caller actually deals with remainders.
    
    As a side effect, the code as is from all I can tell now never does a
    substring match anymore, because it always gets called with rem=NULL, so
    we always only do exact matches now.
    
    Reported-by: default avatarJonathan Gray <jsg@jsg.id.au>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>