• Matt Fleming's avatar
    efivars: only check for duplicates on the registered list · f464246d
    Matt Fleming authored
    variable_is_present() accesses '__efivars' directly, but when called via
    gsmi_init() Michel reports observing the following crash,
    
      BUG: unable to handle kernel NULL pointer dereference at (null)
      IP: variable_is_present+0x55/0x170
      Call Trace:
        register_efivars+0x106/0x370
        gsmi_init+0x2ad/0x3da
        do_one_initcall+0x3f/0x170
    
    The reason for the crash is that '__efivars' hasn't been initialised nor
    has it been registered with register_efivars() by the time the google
    EFI SMI driver runs.  The gsmi code uses its own struct efivars, and
    therefore, a different variable list.  Fix the above crash by passing
    the registered struct efivars to variable_is_present(), so that we
    traverse the correct list.
    Reported-by: default avatarMichel Lespinasse <walken@google.com>
    Tested-by: default avatarMichel Lespinasse <walken@google.com>
    Cc: Mike Waychison <mikew@google.com>
    Cc: Matthew Garrett <matthew.garrett@nebula.com>
    Cc: Seiji Aguchi <seiji.aguchi@hds.com>
    Signed-off-by: default avatarMatt Fleming <matt.fleming@intel.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f464246d
efivars.c 52.4 KB