• Ard Biesheuvel's avatar
    arm64: hide __efistub_ aliases from kallsyms · 75feee3d
    Ard Biesheuvel authored
    Commit e8f3010f ("arm64/efi: isolate EFI stub from the kernel
    proper") isolated the EFI stub code from the kernel proper by prefixing
    all of its symbols with __efistub_, and selectively allowing access to
    core kernel symbols from the stub by emitting __efistub_ aliases for
    functions and variables that the stub can access legally.
    
    As an unintended side effect, these aliases are emitted into the
    kallsyms symbol table, which means they may turn up in backtraces,
    e.g.,
    
      ...
      PC is at __efistub_memset+0x108/0x200
      LR is at fixup_init+0x3c/0x48
      ...
      [<ffffff8008328608>] __efistub_memset+0x108/0x200
      [<ffffff8008094dcc>] free_initmem+0x2c/0x40
      [<ffffff8008645198>] kernel_init+0x20/0xe0
      [<ffffff8008085cd0>] ret_from_fork+0x10/0x40
    
    The backtrace in question has nothing to do with the EFI stub, but
    simply returns one of the several aliases of memset() that have been
    recorded in the kallsyms table. This is undesirable, since it may
    suggest to people who are not aware of this that the issue they are
    seeing is somehow EFI related.
    
    So hide the __efistub_ aliases from kallsyms, by emitting them as
    absolute linker symbols explicitly. The distinction between those
    and section relative symbols is completely irrelevant to these
    definitions, and to the final link we are performing when these
    definitions are being taken into account (the distinction is only
    relevant to symbols defined inside a section definition when performing
    a partial link), and so the resulting values are identical to the
    original ones. Since absolute symbols are ignored by kallsyms, this
    will result in these values to be omitted from its symbol table.
    
    After this patch, the backtrace generated from the same address looks
    like this:
      ...
      PC is at __memset+0x108/0x200
      LR is at fixup_init+0x3c/0x48
      ...
      [<ffffff8008328608>] __memset+0x108/0x200
      [<ffffff8008094dcc>] free_initmem+0x2c/0x40
      [<ffffff8008645198>] kernel_init+0x20/0xe0
      [<ffffff8008085cd0>] ret_from_fork+0x10/0x40
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    75feee3d
image.h 3.84 KB