All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv3 0/5] efi: detect erroneous firmware IRQ manipulation
@ 2016-04-25 13:46 ` Mark Rutland
  0 siblings, 0 replies; 42+ messages in thread
From: Mark Rutland @ 2016-04-25 13:46 UTC (permalink / raw)
  To: linux-efi
  Cc: ard.biesheuvel, catalin.marinas, hpa, leif.lindholm,
	linux-arm-kernel, linux, linux-kernel, mark.rutland, matt, mingo,
	tglx, will.deacon

Note: this is largely a rework of the final patch from v2 [2], which now has a
per-arch component (and hence additional patches). The rest of v2 has already
been picked up, and hence dropped from this posting.

Some firmware erroneously unmask IRQs (and potentially other architecture
specific exceptions) during runtime services functions, in violation of both
common sense and the UEFI specification. This can result in a number of issues
if said exceptions are taken when they are expected to be masked, and
additionally can confuse IRQ tracing if the original mask state is not
restored prior to returning from firmware.

In practice it's difficult to check that firmware never unmasks exceptions, but
we can at least check that the IRQ flags are at least consistent upon entry to
and return from a runtime services function call. This series implements said
check in the shared EFI runtime wrappers code, after an initial round of
refactoring (patches 1-5 of [2]).

I have left ia64 as-is, without this check, as ia64 doesn't currently use the
generic runtime wrappers, has many special cases for the runtime calls which
don't fit well with the generic code, and I don't expect a new, buggy ia64
firmware to appear soon.

The first time corruption of the IRQ flags is detected, we dump a stack trace,
and set TAINT_FIRMWARE_WORKAROUND. Additionally, and in all subsequent cases,
we log (with ratelimiting) the specific corruption of the flags, and restore
the expected flags to avoid redundant warnings elsewhere.

Since v1 [1]:
* Fix thinko: s/local_irq_save/local_save_flags/
* Remove ifdefs after conversion
* Remove reundant semicolon from x86 patch
* Move efi_call_virt_check_flags before first use
* Add Acked-bys and Reviewed-bys

Since v2 [2]:
* Drop the refactoring patches (1-5), which Matt has queued
* Add per-arch ARCH_EFI_IRQ_FLAGS_MASK, as discussed for v2 [3,4]

As with v2, this has been build-tested for each target, but other than arm64 I
don't have a good platform for testing. Hopefully this causes fewer explosions
than v2.

Thanks,
Mark.

[1] https://lkml.org/lkml/2016/4/21/260
[2] https://lkml.org/lkml/2016/4/22/542
[3] https://lkml.org/lkml/2016/4/25/230
[4] https://lkml.org/lkml/2016/4/25/243

Mark Rutland (5):
  efi/runtime-wrappers: detect FW irq flag corruption
  arm64/efi: enable runtime call flag checking
  arm/efi: enable runtime call flag checking
  x86/efi: enable runtime call flag checking
  efi/runtime-wrappers: remove ARCH_EFI_IRQ_FLAGS_MASK ifdef

 arch/arm/include/asm/efi.h              |  5 +++++
 arch/arm64/include/asm/efi.h            |  3 +++
 arch/x86/include/asm/efi.h              |  4 +++-
 drivers/firmware/efi/runtime-wrappers.c | 25 +++++++++++++++++++++++++
 4 files changed, 36 insertions(+), 1 deletion(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2016-04-25 16:03 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-25 13:46 [PATCHv3 0/5] efi: detect erroneous firmware IRQ manipulation Mark Rutland
2016-04-25 13:46 ` Mark Rutland
2016-04-25 13:46 ` Mark Rutland
2016-04-25 13:46 ` [PATCHv3 1/5] efi/runtime-wrappers: detect FW irq flag corruption Mark Rutland
2016-04-25 13:46   ` Mark Rutland
2016-04-25 14:12   ` Robin Murphy
2016-04-25 14:12     ` Robin Murphy
2016-04-25 14:12     ` Robin Murphy
2016-04-25 14:15     ` Matt Fleming
2016-04-25 14:15       ` Matt Fleming
2016-04-25 14:18       ` Ard Biesheuvel
2016-04-25 14:18         ` Ard Biesheuvel
2016-04-25 14:18         ` Ard Biesheuvel
2016-04-25 14:24         ` Matt Fleming
2016-04-25 14:24           ` Matt Fleming
2016-04-25 14:24           ` Matt Fleming
2016-04-25 14:27           ` Mark Rutland
2016-04-25 14:27             ` Mark Rutland
2016-04-25 14:27             ` Mark Rutland
2016-04-25 15:59             ` Matt Fleming
2016-04-25 15:59               ` Matt Fleming
2016-04-25 15:59               ` Matt Fleming
2016-04-25 16:03               ` Mark Rutland
2016-04-25 16:03                 ` Mark Rutland
2016-04-25 16:03                 ` Mark Rutland
2016-04-25 14:33           ` Robin Murphy
2016-04-25 14:33             ` Robin Murphy
2016-04-25 14:33             ` Robin Murphy
2016-04-25 13:46 ` [PATCHv3 2/5] arm64/efi: enable runtime call flag checking Mark Rutland
2016-04-25 13:46   ` Mark Rutland
2016-04-25 13:46   ` Mark Rutland
2016-04-25 13:54   ` Will Deacon
2016-04-25 13:54     ` Will Deacon
2016-04-25 13:46 ` [PATCHv3 3/5] arm/efi: " Mark Rutland
2016-04-25 13:46   ` Mark Rutland
2016-04-25 13:46 ` [PATCHv3 4/5] x86/efi: " Mark Rutland
2016-04-25 13:46   ` Mark Rutland
2016-04-25 13:46 ` [PATCHv3 5/5] efi/runtime-wrappers: remove ARCH_EFI_IRQ_FLAGS_MASK ifdef Mark Rutland
2016-04-25 13:46   ` Mark Rutland
2016-04-25 16:03 ` [PATCHv3 0/5] efi: detect erroneous firmware IRQ manipulation Matt Fleming
2016-04-25 16:03   ` Matt Fleming
2016-04-25 16:03   ` Matt Fleming

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.