summaryrefslogtreecommitdiff
path: root/arch/x86/include
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@google.com>2018-03-11 17:40:30 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2018-03-11 17:40:30 +0100
commit2b1843d7d06151a55dc7bb5c787ce2f94ad724c1 (patch)
tree9b8311ec5ed18368b1d60f83771d0df04824ae47 /arch/x86/include
parentf0f1365fa1a3382759aa9b661d6a757ebfa6f074 (diff)
parent8b5ab55d254f36e89b1b53aeac7223d2d102483e (diff)
Merge 4.4.121 into android-4.4
Changes in 4.4.121 tpm: st33zp24: fix potential buffer overruns caused by bit glitches on the bus tpm_i2c_infineon: fix potential buffer overruns caused by bit glitches on the bus tpm_i2c_nuvoton: fix potential buffer overruns caused by bit glitches on the bus ALSA: usb-audio: Add a quirck for B&W PX headphones ALSA: hda: Add a power_save blacklist cpufreq: s3c24xx: Fix broken s3c_cpufreq_init() media: m88ds3103: don't call a non-initalized function nospec: Allow index argument to have const-qualified type ARM: mvebu: Fix broken PL310_ERRATA_753970 selects KVM: mmu: Fix overlap between public and private memslots x86/syscall: Sanitize syscall table de-references under speculation fix btrfs: Don't clear SGID when inheriting ACLs ARM: dts: LogicPD Torpedo: Fix I2C1 pinmux x86/apic/vector: Handle legacy irq data correctly leds: do not overflow sysfs buffer in led_trigger_show x86/spectre: Fix an error message Revert "led: core: Fix brightness setting when setting delay_off=0" bridge: check brport attr show in brport_show fib_semantics: Don't match route with mismatching tclassid hdlc_ppp: carrier detect ok, don't turn off negotiation ipv6 sit: work around bogus gcc-8 -Wrestrict warning net: fix race on decreasing number of TX queues net: ipv4: don't allow setting net.ipv4.route.min_pmtu below 68 netlink: ensure to loop over all netns in genlmsg_multicast_allns() ppp: prevent unregistered channels from connecting to PPP units udplite: fix partial checksum initialization sctp: fix dst refcnt leak in sctp_v4_get_dst sctp: fix dst refcnt leak in sctp_v6_get_dst() s390/qeth: fix SETIP command handling s390/qeth: fix IPA command submission race sctp: verify size of a new chunk in _sctp_make_chunk() net: mpls: Pull common label check into helper mpls, nospec: Sanitize array index in mpls_label_ok() dm io: fix duplicate bio completion due to missing ref count bpf, x64: implement retpoline for tail call btrfs: preserve i_mode if __btrfs_set_acl() fails Linux 4.4.121 Change-Id: Ifc1f73c407f35cc1815e6f69bbed838c8ca60bc2 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'arch/x86/include')
-rw-r--r--arch/x86/include/asm/nospec-branch.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
index 66094a0473a8..249f1c769f21 100644
--- a/arch/x86/include/asm/nospec-branch.h
+++ b/arch/x86/include/asm/nospec-branch.h
@@ -195,4 +195,41 @@ static inline void vmexit_fill_RSB(void)
}
#endif /* __ASSEMBLY__ */
+
+/*
+ * Below is used in the eBPF JIT compiler and emits the byte sequence
+ * for the following assembly:
+ *
+ * With retpolines configured:
+ *
+ * callq do_rop
+ * spec_trap:
+ * pause
+ * lfence
+ * jmp spec_trap
+ * do_rop:
+ * mov %rax,(%rsp)
+ * retq
+ *
+ * Without retpolines configured:
+ *
+ * jmp *%rax
+ */
+#ifdef CONFIG_RETPOLINE
+# define RETPOLINE_RAX_BPF_JIT_SIZE 17
+# define RETPOLINE_RAX_BPF_JIT() \
+ EMIT1_off32(0xE8, 7); /* callq do_rop */ \
+ /* spec_trap: */ \
+ EMIT2(0xF3, 0x90); /* pause */ \
+ EMIT3(0x0F, 0xAE, 0xE8); /* lfence */ \
+ EMIT2(0xEB, 0xF9); /* jmp spec_trap */ \
+ /* do_rop: */ \
+ EMIT4(0x48, 0x89, 0x04, 0x24); /* mov %rax,(%rsp) */ \
+ EMIT1(0xC3); /* retq */
+#else
+# define RETPOLINE_RAX_BPF_JIT_SIZE 2
+# define RETPOLINE_RAX_BPF_JIT() \
+ EMIT2(0xFF, 0xE0); /* jmp *%rax */
+#endif
+
#endif /* _ASM_X86_NOSPEC_BRANCH_H_ */