Linux 5.4.184
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.184 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/admin-guide/hw-vuln/spectre.rst | 48 +++-- Documentation/admin-guide/kernel-parameters.txt | 8 Makefile | 2 arch/arm/include/asm/assembler.h | 10 + arch/arm/include/asm/spectre.h | 32 +++ arch/arm/kernel/Makefile | 2 arch/arm/kernel/entry-armv.S | 79 ++++++++ arch/arm/kernel/entry-common.S | 24 ++ arch/arm/kernel/spectre.c | 71 +++++++ arch/arm/kernel/traps.c | 65 ++++++- arch/arm/kernel/vmlinux.lds.h | 43 +++- arch/arm/mm/Kconfig | 11 + arch/arm/mm/proc-v7-bugs.c | 200 +++++++++++++++++++--- arch/x86/include/asm/cpufeatures.h | 2 arch/x86/include/asm/nospec-branch.h | 16 + arch/x86/kernel/cpu/bugs.c | 216 +++++++++++++++++------- drivers/acpi/ec.c | 10 - drivers/acpi/sleep.c | 14 + drivers/block/xen-blkfront.c | 63 ++++--- drivers/firmware/psci/psci.c | 15 + drivers/net/xen-netfront.c | 54 +++--- drivers/scsi/xen-scsifront.c | 3 drivers/xen/gntalloc.c | 25 -- drivers/xen/grant-table.c | 71 ++++--- drivers/xen/pvcalls-front.c | 8 drivers/xen/xenbus/xenbus_client.c | 24 +- include/linux/arm-smccc.h | 74 ++++++++ include/linux/bpf.h | 12 + include/xen/grant_table.h | 19 +- kernel/sysctl.c | 8 net/9p/trans_xen.c | 14 - tools/arch/x86/include/asm/cpufeatures.h | 2 32 files changed, 969 insertions(+), 276 deletions(-)
Borislav Petkov (1):
x86/speculation: Merge one test in spectre_v2_user_select_mitigation()
Emmanuel Gil Peyrot (1):
ARM: fix build error when BPF_SYSCALL is disabled
Greg Kroah-Hartman (2):
Revert "ACPI: PM: s2idle: Cancel wakeup before dispatching EC GPE" Linux 5.4.184
Josh Poimboeuf (3):
x86/speculation: Include unprivileged eBPF status in Spectre v2 mitigation reporting x86/speculation: Warn about Spectre v2 LFENCE mitigation x86/speculation: Warn about eIBRS + LFENCE + Unprivileged eBPF + SMT
Juergen Gross (11):
xen/xenbus: don't let xenbus_grant_ring() remove grants in error case xen/grant-table: add gnttab_try_end_foreign_access() xen/blkfront: don't use gnttab_query_foreign_access() for mapped status xen/netfront: don't use gnttab_query_foreign_access() for mapped status xen/scsifront: don't use gnttab_query_foreign_access() for mapped status xen/gntalloc: don't use gnttab_query_foreign_access()
xen: remove gnttab_query_foreign_access()
xen/9p: use alloc/free_pages_exact()
xen/pvcalls: use alloc/free_pages_exact()
xen/gnttab: fix gnttab_end_foreign_access() without page specified xen/netfront: react properly to failing gnttab_end_foreign_access_ref()
Kim Phillips (2):
x86/speculation: Use generic retpoline by default on AMD x86/speculation: Update link to AMD speculation whitepaper
Mark Rutland (1):
arm/arm64: smccc/psci: add arm_smccc_1_1_get_conduit()
Nathan Chancellor (1):
ARM: Do not use NOCROSSREFS directive with ld.lld
Peter Zijlstra (3):
x86,bugs: Unconditionally allow spectre_v2=retpoline,amd x86/speculation: Add eIBRS + Retpoline options Documentation/hw-vuln: Update spectre doc
Peter Zijlstra (Intel) (1):
x86/speculation: Rename RETPOLINE_AMD to RETPOLINE_LFENCE
Russell King (Oracle) (7):
ARM: report Spectre v2 status through sysfs
ARM: early traps initialisation
ARM: use LOADADDR() to get load address of sections
ARM: Spectre-BHB workaround
ARM: include unprivileged BPF status in Spectre V2 reporting
ARM: fix co-processor register typo
ARM: fix build warning in proc-v7-bugs.c
Steven Price (1):
arm/arm64: Provide a wrapper for SMCCC 1.1 calls
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/hw-vuln/spectre.rst +32 -16
@@ -60,8 +60,8 @@ privileged data touched during the speculative execution. Spectre variant 1 attacks take advantage of speculative execution of conditional branches, while Spectre variant 2 attacks use speculative execution of indirect branches to leak privileged memory. -See :ref:`[1] <spec_ref1>` :ref:`[5] <spec_ref5>` :ref:`[7] <spec_ref7>` -:ref:`[10] <spec_ref10>` :ref:`[11] <spec_ref11>`. +See :ref:`[1] <spec_ref1>` :ref:`[5] <spec_ref5>` :ref:`[6] <spec_ref6>` +:ref:`[7] <spec_ref7>` :ref:`[10] <spec_ref10>` :ref:`[11] <spec_ref11>`. Spectre variant 1 (Bounds Check Bypass) ---------------------------------------
@@ -131,6 +131,19 @@ steer its indirect branch speculations to gadget code, and measure the speculative execution's side effects left in level 1 cache to infer the victim's data. +Yet another variant 2 attack vector is for the attacker to poison the +Branch History Buffer (BHB) to speculatively steer an indirect branch +to a specific Branch Target Buffer (BTB) entry, even if the entry isn't +associated with the source address of the indirect branch. Specifically, +the BHB might be shared across privilege levels even in the presence of +Enhanced IBRS. + +Currently the only known real-world BHB attack vector is via +unprivileged eBPF. Therefore, it's highly recommended to not enable +unprivileged eBPF, especially when eIBRS is used (without retpolines). +For a full mitigation against BHB attacks, it's recommended to use +retpolines (or eIBRS combined with retpolines). + Attack scenarios ----------------
@@ -364,13 +377,15 @@ The possible values in this file are: - Kernel status: - ==================================== ================================= - 'Not affected' The processor is not vulnerable - 'Vulnerable' Vulnerable, no mitigation - 'Mitigation: Full generic retpoline' Software-focused mitigation - 'Mitigation: Full AMD retpoline' AMD-specific software mitigation - 'Mitigation: Enhanced IBRS' Hardware-focused mitigation - ==================================== ================================= + ======================================== ================================= + 'Not affected' The processor is not vulnerable + 'Mitigation: None' Vulnerable, no mitigation + 'Mitigation: Retpolines' Use Retpoline thunks + 'Mitigation: LFENCE' Use LFENCE instructions + 'Mitigation: Enhanced IBRS' Hardware-focused mitigation + 'Mitigation: Enhanced IBRS + Retpolines' Hardware-focused + Retpolines + 'Mitigation: Enhanced IBRS + LFENCE' Hardware-focused + LFENCE + ======================================== ================================= - Firmware status: Show if Indirect Branch Restricted Speculation (IBRS) is used to protect against Spectre variant 2 attacks when calling firmware (x86 only).
@@ -584,12 +599,13 @@ kernel command line. Specific mitigations can also be selected manually: - retpoline - replace indirect branches - retpoline,generic - google's original retpoline - retpoline,amd - AMD-specific minimal thunk + retpoline auto pick between generic,lfence + retpoline,generic Retpolines + retpoline,lfence LFENCE; indirect branch + retpoline,amd alias for retpoline,lfence + eibrs enhanced IBRS + eibrs,retpoline enhanced IBRS + Retpolines + eibrs,lfence enhanced IBRS + LFENCE Not specifying this option is equivalent to spectre_v2=auto.
@@ -730,7 +746,7 @@ AMD white papers: .. _spec_ref6: -[6] `Software techniques for managing speculation on AMD processors <https://developer.amd.com/wp-content/resources/90343-B_SoftwareTechniquesforManagingSpeculation_WP_7-18Update_FNL.pdf>`_. +[6] `Software techniques for managing speculation on AMD processors <https://developer.amd.com/wp-content/resources/Managing-Speculation-on-AMD-Processors.pdf>`_. ARM white papers:
Documentation/admin-guide/kernel-parameters.txt +6 -2
@@ -4493,8 +4493,12 @@ Specific mitigations can also be selected manually: retpoline - replace indirect branches - retpoline,generic - google's original retpoline - retpoline,amd - AMD-specific minimal thunk + retpoline,generic - Retpolines + retpoline,lfence - LFENCE; indirect branch + retpoline,amd - alias for retpoline,lfence + eibrs - enhanced IBRS + eibrs,retpoline - enhanced IBRS + Retpolines + eibrs,lfence - enhanced IBRS + LFENCE Not specifying this option is equivalent to spectre_v2=auto.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 183 +SUBLEVEL = 184 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/include/asm/assembler.h +10 -0
@@ -107,6 +107,16 @@ .endm#endif +#if __LINUX_ARM_ARCH__ <7 + .macro dsb, args + mcr p15, 0, r0, c7, c10, 4 + .endm + + .macro isb, args + mcr p15, 0, r0, c7, c5, 4 + .endm +#endif + .macro asm_trace_hardirqs_off, save=1#if defined(CONFIG_TRACE_IRQFLAGS ) .if \save
arch/arm/include/asm/spectre.h new file +32 -0
@@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __ASM_SPECTRE_H +#define __ASM_SPECTRE_H + +enum { +SPECTRE_UNAFFECTED , +SPECTRE_MITIGATED , +SPECTRE_VULNERABLE , +}; + +enum { + __SPECTRE_V2_METHOD_BPIALL, + __SPECTRE_V2_METHOD_ICIALLU, + __SPECTRE_V2_METHOD_SMC, + __SPECTRE_V2_METHOD_HVC, + __SPECTRE_V2_METHOD_LOOP8, +}; + +enum { +SPECTRE_V2_METHOD_BPIALL =BIT (__SPECTRE_V2_METHOD_BPIALL), +SPECTRE_V2_METHOD_ICIALLU =BIT (__SPECTRE_V2_METHOD_ICIALLU), +SPECTRE_V2_METHOD_SMC =BIT (__SPECTRE_V2_METHOD_SMC), +SPECTRE_V2_METHOD_HVC =BIT (__SPECTRE_V2_METHOD_HVC), +SPECTRE_V2_METHOD_LOOP8 =BIT (__SPECTRE_V2_METHOD_LOOP8), +}; + +void spectre_v2_update_state (unsigned int state,unsigned int methods); + +int spectre_bhb_update_vectors (unsigned int method); + +#endif
arch/arm/kernel/Makefile +2 -0
@@ -106,4 +106,6 @@ endif obj-$(CONFIG_HAVE_ARM_SMCCC) += smccc-call.o +obj-$(CONFIG_GENERIC_CPU_VULNERABILITIES) += spectre.o + extra-y := $(head-y) vmlinux.lds
arch/arm/kernel/entry-armv.S +73 -6
111 lines not on this page · raw message
arch/arm/kernel/entry-common.S +24 -0
@@ -162,6 +162,29 @@ ENDPROC(ret_from_fork) *----------------------------------------------------------------------------- */ + .align 5 +#ifdef CONFIG_HARDEN_BRANCH_HISTORY +ENTRY(vector_bhb_loop8_swi) + sub sp, sp, #PT_REGS_SIZE + stmia sp, {r0 - r12} + mov r8, #8 +1: b 2f +2: subs r8, r8, #1 + bne 1b + dsb + isb + b 3f +ENDPROC(vector_bhb_loop8_swi) + + .align 5 +ENTRY(vector_bhb_bpiall_swi) + sub sp, sp, #PT_REGS_SIZE + stmia sp, {r0 - r12} + mcr p15, 0, r8, c7, c5, 6 @ BPIALL + isb + b 3f +ENDPROC(vector_bhb_bpiall_swi) +#endif .align 5 ENTRY(vector_swi) #ifdef CONFIG_CPU_V7M
@@ -169,6 +192,7 @@ ENTRY(vector_swi) #else sub sp, sp, #PT_REGS_SIZE stmia sp, {r0 - r12} @ Calling r0 - r12 +3: ARM( add r8, sp, #S_PC ) ARM( stmdb r8, {sp, lr}^ ) @ Calling sp, lr THUMB( mov r8, sp )
arch/arm/kernel/spectre.c new file +71 -0
71 lines not on this page · raw message
arch/arm/kernel/traps.c +59 -6
92 lines not on this page · raw message
arch/arm/kernel/vmlinux.lds.h +34 -9
59 lines not on this page · raw message
arch/arm/mm/Kconfig +11 -0
@@ -833,6 +833,7 @@ config CPU_BPREDICT_DISABLE config CPU_SPECTRE bool + select GENERIC_CPU_VULNERABILITIES config HARDEN_BRANCH_PREDICTOR bool "Harden the branch predictor against aliasing attacks" if EXPERT
@@ -853,6 +854,16 @@ config HARDEN_BRANCH_PREDICTOR If unsure, say Y. +config HARDEN_BRANCH_HISTORY + bool "Harden Spectre style attacks against branch history" if EXPERT + depends on CPU_SPECTRE + default y + help + Speculation attacks against some high-performance processors can + make use of branch history to influence future speculation. When + taking an exception, a sequence of branches overwrites the branch + history, or branch history is invalidated. + config TLS_REG_EMUL bool select NEED_KUSER_HELPERS
arch/arm/mm/proc-v7-bugs.c +173 -27
281 lines not on this page · raw message
arch/x86/include/asm/cpufeatures.h +1 -1
@@ -202,7 +202,7 @@#define X86_FEATURE_SME ( 7*32+10)/* AMD Secure Memory Encryption */ #define X86_FEATURE_PTI ( 7*32+11)/* Kernel Page Table Isolation enabled */ #define X86_FEATURE_RETPOLINE ( 7*32+12)/* "" Generic Retpoline mitigation for Spectre variant 2 */ -#define X86_FEATURE_RETPOLINE_AMD ( 7*32+13)/* "" AMD Retpoline mitigation for Spectre variant 2 */ +#define X86_FEATURE_RETPOLINE_LFENCE ( 7*32+13)/* "" Use LFENCE for Spectre variant 2 */ #define X86_FEATURE_INTEL_PPIN ( 7*32+14)/* Intel Processor Inventory Number */ #define X86_FEATURE_CDP_L2 ( 7*32+15)/* Code and Data Prioritization L2 */ #define X86_FEATURE_MSR_SPEC_CTRL ( 7*32+16)/* "" MSR SPEC_CTRL is implemented */
arch/x86/include/asm/nospec-branch.h +9 -7
@@ -115,7 +115,7 @@ANNOTATE_NOSPEC_ALTERNATIVE ALTERNATIVE_2 __stringify(ANNOTATE_RETPOLINE_SAFE; jmp *\reg), \ __stringify(RETPOLINE_JMP \reg), X86_FEATURE_RETPOLINE, \ - __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; jmp *\reg), X86_FEATURE_RETPOLINE_AMD + __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; jmp *\reg), X86_FEATURE_RETPOLINE_LFENCE#else jmp *\reg#endif
@@ -126,7 +126,7 @@ANNOTATE_NOSPEC_ALTERNATIVE ALTERNATIVE_2 __stringify(ANNOTATE_RETPOLINE_SAFE; call *\reg), \ __stringify(RETPOLINE_CALL \reg), X86_FEATURE_RETPOLINE,\ - __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; call *\reg), X86_FEATURE_RETPOLINE_AMD + __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; call *\reg), X86_FEATURE_RETPOLINE_LFENCE#else call *\reg#endif
@@ -171,7 +171,7 @@ "lfence;\n" \ ANNOTATE_RETPOLINE_SAFE \ "call *%[thunk_target]\n", \ - X86_FEATURE_RETPOLINE_AMD) + X86_FEATURE_RETPOLINE_LFENCE)# define THUNK_TARGET (addr) [thunk_target] "r" (addr)#else /* CONFIG_X86_32 */
@@ -201,7 +201,7 @@ "lfence;\n" \ ANNOTATE_RETPOLINE_SAFE \ "call *%[thunk_target]\n", \ - X86_FEATURE_RETPOLINE_AMD) + X86_FEATURE_RETPOLINE_LFENCE)# define THUNK_TARGET (addr) [thunk_target] "rm" (addr)#endif
@@ -213,9 +213,11 @@/* The Spectre V2 mitigation variants */ enum spectre_v2_mitigation {SPECTRE_V2_NONE , -SPECTRE_V2_RETPOLINE_GENERIC , -SPECTRE_V2_RETPOLINE_AMD , -SPECTRE_V2_IBRS_ENHANCED , +SPECTRE_V2_RETPOLINE , +SPECTRE_V2_LFENCE , +SPECTRE_V2_EIBRS , +SPECTRE_V2_EIBRS_RETPOLINE , +SPECTRE_V2_EIBRS_LFENCE , };/* The indirect branch speculation control variants */
arch/x86/kernel/cpu/bugs.c +156 -60
337 lines not on this page · raw message
drivers/acpi/ec.c +0 -10
@@ -2002,16 +2002,6 @@ bool acpi_ec_dispatch_gpe(void)if (acpi_any_gpe_status_set (first_ec->gpe))return true; -/* -* Cancel the SCI wakeup and process all pending events in case there -* are any wakeup ones in there. -* -* Note that if any non-EC GPEs are active at this point, the SCI will -* retrigger after the rearming in acpi_s2idle_wake(), so no events -* should be missed by canceling the wakeup here. -*/ -pm_system_cancel_wakeup (); -/* * Dispatch the EC GPE in-band, but do not report wakeup in any case * to allow the caller to process events properly after that.
drivers/acpi/sleep.c +10 -4
@@ -1003,13 +1003,19 @@ static bool acpi_s2idle_wake(void)if (acpi_check_wakeup_handlers ())return true; -/* -* Check non-EC GPE wakeups and if there are none, cancel the -* SCI-related wakeup and dispatch the EC GPE. -*/ +/* Check non-EC GPE wakeups and dispatch the EC GPE. */ if (acpi_ec_dispatch_gpe ())return true; +/* +* Cancel the SCI wakeup and process all pending events in case +* there are any wakeup ones in there. +* +* Note that if any non-EC GPEs are active at this point, the +* SCI will retrigger after the rearming below, so no events +* should be missed by canceling the wakeup here. +*/ +pm_system_cancel_wakeup ();acpi_os_wait_events_complete ();/*
drivers/block/xen-blkfront.c +37 -26
147 lines not on this page · raw message
drivers/firmware/psci/psci.c +15 -0
@@ -57,6 +57,21 @@ struct psci_operations psci_ops = { .smccc_version = SMCCC_VERSION_1_0, }; +enum arm_smccc_conduit arm_smccc_1_1_get_conduit (void ) +{ +if (psci_ops.smccc_version <SMCCC_VERSION_1_1 ) +return SMCCC_CONDUIT_NONE ; + +switch (psci_ops.conduit) { +case PSCI_CONDUIT_SMC : +return SMCCC_CONDUIT_SMC ; +case PSCI_CONDUIT_HVC : +return SMCCC_CONDUIT_HVC ; +default : +return SMCCC_CONDUIT_NONE ; + } +} +typedef unsigned long (psci_fn )(unsigned long ,unsigned long ,unsigned long ,unsigned long );static psci_fn *invoke_psci_fn;
drivers/net/xen-netfront.c +33 -21
118 lines not on this page · raw message
drivers/scsi/xen-scsifront.c +1 -2
@@ -233,12 +233,11 @@ static void scsifront_gnttab_done(struct vscsifrnt_info *info,return ;for (i =0 ; i < shadow->nr_grants; i++) { -if (unlikely (gnttab_query_foreign_access (shadow->gref[i]))) { +if (unlikely (!gnttab_try_end_foreign_access (shadow->gref[i]))) {shost_printk (KERN_ALERT , info->host,KBUILD_MODNAME "grant still in use by backend\n" );BUG (); } -gnttab_end_foreign_access (shadow->gref[i],0 ,0UL ); }kfree (shadow->sg);
drivers/xen/gntalloc.c +7 -18
@@ -169,20 +169,14 @@ static int add_grefs(struct ioctl_gntalloc_alloc_gref *op,__del_gref (gref); } -/* It's possible for the target domain to map the just-allocated grant -* references by blindly guessing their IDs; if this is done, then -* __del_gref will leave them in the queue_gref list. They need to be -* added to the global list so that we can free them when they are no -* longer referenced. -*/ -if (unlikely (!list_empty (&queue_gref))) -list_splice_tail (&queue_gref, &gref_list);mutex_unlock (&gref_mutex);return rc; }static void __del_gref (struct gntalloc_gref *gref) { +unsigned long addr; +if (gref->notify.flags &UNMAP_NOTIFY_CLEAR_BYTE ) {uint8_t *tmp =kmap (gref->page); tmp[gref->notify.pgoff] =0 ;
@@ -196,21 +190,16 @@ static void __del_gref(struct gntalloc_gref *gref) gref->notify.flags =0 ;if (gref->gref_id) { -if (gnttab_query_foreign_access (gref->gref_id)) -return ; - -if (!gnttab_end_foreign_access_ref (gref->gref_id,0 )) -return ; - -gnttab_free_grant_reference (gref->gref_id); +if (gref->page) { + addr = (unsigned long )page_to_virt (gref->page); +gnttab_end_foreign_access (gref->gref_id,0 , addr); + }else +gnttab_free_grant_reference (gref->gref_id); } gref_size--;list_del (&gref->next_gref); -if (gref->page) -__free_page (gref->page); -kfree (gref); }
drivers/xen/grant-table.c +39 -32
125 lines not on this page · raw message
drivers/xen/pvcalls-front.c +4 -4
@@ -337,8 +337,8 @@ static void free_active_ring(struct sock_mapping *map)if (!map->active.ring)return ; -free_pages ((unsigned long )map->active.data.in, - map->active.ring->ring_order); +free_pages_exact (map->active.data.in, +PAGE_SIZE << map->active.ring->ring_order);free_page ((unsigned long )map->active.ring); }
@@ -352,8 +352,8 @@ static int alloc_active_ring(struct sock_mapping *map) goto out; map->active.ring->ring_order =PVCALLS_RING_ORDER ; - bytes = (void *)__get_free_pages (GFP_KERNEL | __GFP_ZERO, -PVCALLS_RING_ORDER ); + bytes =alloc_pages_exact (PAGE_SIZE <<PVCALLS_RING_ORDER , +GFP_KERNEL | __GFP_ZERO);if (!bytes) goto out;
drivers/xen/xenbus/xenbus_client.c +11 -13
@@ -366,7 +366,14 @@ int xenbus_grant_ring(struct xenbus_device *dev, void *vaddr, unsigned int nr_pages, grant_ref_t *grefs) { int err; -int i, j; +unsigned int i; +grant_ref_t gref_head; + + err =gnttab_alloc_grant_references (nr_pages, &gref_head); +if (err) { +xenbus_dev_fatal (dev, err,"granting access to ring page" ); +return err; + }for (i =0 ; i < nr_pages; i++) {unsigned long gfn;
@@ -376,23 +383,14 @@ int xenbus_grant_ring(struct xenbus_device *dev, void *vaddr,else gfn =virt_to_gfn (vaddr); - err =gnttab_grant_foreign_access (dev->otherend_id, gfn,0 ); -if (err <0 ) { -xenbus_dev_fatal (dev, err, -"granting access to ring page" ); - goto fail; - } - grefs[i] = err; + grefs[i] =gnttab_claim_grant_reference (&gref_head); +gnttab_grant_foreign_access_ref (grefs[i], dev->otherend_id, + gfn,0 ); vaddr = vaddr +XEN_PAGE_SIZE ; }return 0 ; - -fail: -for (j =0 ; j < i; j++) -gnttab_end_foreign_access_ref (grefs[j],0 ); -return err; }EXPORT_SYMBOL_GPL (xenbus_grant_ring);
include/linux/arm-smccc.h +74 -0
85 lines not on this page · raw message
include/linux/bpf.h +12 -0
@@ -751,6 +751,12 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,int bpf_prog_test_run_flow_dissector (struct bpf_prog *prog,const union bpf_attr *kattr,union bpf_attr __user *uattr); + +static inline bool unprivileged_ebpf_enabled (void ) +{ +return !sysctl_unprivileged_bpf_disabled; +} +#else /* !CONFIG_BPF_SYSCALL */ static inline struct bpf_prog *bpf_prog_get (u32 ufd) {
@@ -881,6 +887,12 @@ static inline int bpf_prog_test_run_flow_dissector(struct bpf_prog *prog, {return -ENOTSUPP ; } + +static inline bool unprivileged_ebpf_enabled (void ) +{ +return false; +} +#endif /* CONFIG_BPF_SYSCALL */ static inline struct bpf_prog *bpf_prog_get_type(u32 ufd,
include/xen/grant_table.h +17 -2
@@ -97,17 +97,32 @@ int gnttab_end_foreign_access_ref(grant_ref_t ref, int readonly);* access has been ended, free the given page too. Access will be ended * immediately iff the grant entry is not in use, otherwise it will happen * some time later. page may be 0, in which case no freeing will occur. +* Note that the granted page might still be accessed (read or write) by the +* other side after gnttab_end_foreign_access() returns, so even if page was +* specified as 0 it is not allowed to just reuse the page for other +* purposes immediately. gnttab_end_foreign_access() will take an additional +* reference to the granted page in this case, which is dropped only after +* the grant is no longer in use. +* This requires that multi page allocations for areas subject to +* gnttab_end_foreign_access() are done via alloc_pages_exact() (and freeing +* via free_pages_exact()) in order to avoid high order pages. */ void gnttab_end_foreign_access (grant_ref_t ref,int readonly,unsigned long page); +/* +* End access through the given grant reference, iff the grant entry is +* no longer in use. In case of success ending foreign access, the +* grant reference is deallocated. +* Return 1 if the grant entry was freed, 0 if it is still in use. +*/ +int gnttab_try_end_foreign_access (grant_ref_t ref); +int gnttab_grant_foreign_transfer (domid_t domid,unsigned long pfn);unsigned long gnttab_end_foreign_transfer_ref (grant_ref_t ref);unsigned long gnttab_end_foreign_transfer (grant_ref_t ref); -int gnttab_query_foreign_access (grant_ref_t ref); -/* * operations on reserved batches of grant references */
kernel/sysctl.c +8 -0
@@ -251,6 +251,11 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,#endif #ifdef CONFIG_BPF_SYSCALL + +void __weak unpriv_ebpf_notify (int new_state) +{ +} +static int bpf_unpriv_handler (struct ctl_table *table,int write,void *buffer,size_t *lenp,loff_t *ppos) {
@@ -268,6 +273,9 @@ static int bpf_unpriv_handler(struct ctl_table *table, int write,return -EPERM ; *(int *)table->data = unpriv_enable; } + +unpriv_ebpf_notify (unpriv_enable); +return ret; }#endif
net/9p/trans_xen.c +6 -8
@@ -301,9 +301,9 @@ static void xen_9pfs_front_free(struct xen_9pfs_front_priv *priv) ref = priv->rings[i].intf->ref[j];gnttab_end_foreign_access (ref,0 ,0 ); } -free_pages ((unsigned long )priv->rings[i].data.in, -XEN_9PFS_RING_ORDER - - (PAGE_SHIFT -XEN_PAGE_SHIFT )); +free_pages_exact (priv->rings[i].data.in, +1UL << (XEN_9PFS_RING_ORDER + +XEN_PAGE_SHIFT )); }gnttab_end_foreign_access (priv->rings[i].ref,0 ,0 );free_page ((unsigned long )priv->rings[i].intf);
@@ -341,8 +341,8 @@ static int xen_9pfs_front_alloc_dataring(struct xenbus_device *dev,if (ret <0 ) goto out; ring->ref = ret; - bytes = (void *)__get_free_pages (GFP_KERNEL | __GFP_ZERO, -XEN_9PFS_RING_ORDER - (PAGE_SHIFT -XEN_PAGE_SHIFT )); + bytes =alloc_pages_exact (1UL << (XEN_9PFS_RING_ORDER +XEN_PAGE_SHIFT ), +GFP_KERNEL | __GFP_ZERO);if (!bytes) { ret = -ENOMEM ; goto out;
@@ -373,9 +373,7 @@ static int xen_9pfs_front_alloc_dataring(struct xenbus_device *dev,if (bytes) {for (i--; i >=0 ; i--)gnttab_end_foreign_access (ring->intf->ref[i],0 ,0 ); -free_pages ((unsigned long )bytes, -XEN_9PFS_RING_ORDER - - (PAGE_SHIFT -XEN_PAGE_SHIFT )); +free_pages_exact (bytes,1UL << (XEN_9PFS_RING_ORDER +XEN_PAGE_SHIFT )); }gnttab_end_foreign_access (ring->ref,0 ,0 );free_page ((unsigned long )ring->intf);
tools/arch/x86/include/asm/cpufeatures.h +1 -1
@@ -202,7 +202,7 @@#define X86_FEATURE_SME ( 7*32+10)/* AMD Secure Memory Encryption */ #define X86_FEATURE_PTI ( 7*32+11)/* Kernel Page Table Isolation enabled */ #define X86_FEATURE_RETPOLINE ( 7*32+12)/* "" Generic Retpoline mitigation for Spectre variant 2 */ -#define X86_FEATURE_RETPOLINE_AMD ( 7*32+13)/* "" AMD Retpoline mitigation for Spectre variant 2 */ +#define X86_FEATURE_RETPOLINE_LFENCE ( 7*32+13)/* "" Use LFENCEs for Spectre variant 2 */ #define X86_FEATURE_INTEL_PPIN ( 7*32+14)/* Intel Processor Inventory Number */ #define X86_FEATURE_CDP_L2 ( 7*32+15)/* Code and Data Prioritization L2 */ #define X86_FEATURE_MSR_SPEC_CTRL ( 7*32+16)/* "" MSR SPEC_CTRL is implemented */