diff -u linux-hwe-5.15-5.15.0/Documentation/admin-guide/kernel-parameters.txt linux-hwe-5.15-5.15.0/Documentation/admin-guide/kernel-parameters.txt --- linux-hwe-5.15-5.15.0/Documentation/admin-guide/kernel-parameters.txt +++ linux-hwe-5.15-5.15.0/Documentation/admin-guide/kernel-parameters.txt @@ -4972,6 +4972,30 @@ retain_initrd [RAM] Keep initrd memory after extraction + retbleed= [X86] Control mitigation of RETBleed (Arbitrary + Speculative Code Execution with Return Instructions) + vulnerability. + + off - no mitigation + auto - automatically select a migitation + auto,nosmt - automatically select a mitigation, + disabling SMT if necessary for + the full mitigation (only on Zen1 + and older without STIBP). + ibpb - mitigate short speculation windows on + basic block boundaries too. Safe, highest + perf impact. + unret - force enable untrained return thunks, + only effective on AMD f15h-f17h + based systems. + unret,nosmt - like unret, will disable SMT when STIBP + is not available. + + Selecting 'auto' will choose a mitigation method at run + time according to the CPU. + + Not specifying this option is equivalent to retbleed=auto. + rfkill.default_state= 0 "airplane mode". All wifi, bluetooth, wimax, gps, fm, etc. communication is blocked by default. @@ -5318,6 +5342,7 @@ eibrs - enhanced IBRS eibrs,retpoline - enhanced IBRS + Retpolines eibrs,lfence - enhanced IBRS + LFENCE + ibrs - use IBRS to protect kernel Not specifying this option is equivalent to spectre_v2=auto. diff -u linux-hwe-5.15-5.15.0/Makefile linux-hwe-5.15-5.15.0/Makefile --- linux-hwe-5.15-5.15.0/Makefile +++ linux-hwe-5.15-5.15.0/Makefile @@ -699,6 +699,12 @@ RETPOLINE_CFLAGS := -mretpoline-external-thunk RETPOLINE_VDSO_CFLAGS := -mretpoline endif + +ifdef CONFIG_RETHUNK +RETHUNK_CFLAGS := -mfunction-return=thunk-extern +RETPOLINE_CFLAGS += $(RETHUNK_CFLAGS) +endif + export RETPOLINE_CFLAGS export RETPOLINE_VDSO_CFLAGS diff -u linux-hwe-5.15-5.15.0/arch/x86/Kconfig linux-hwe-5.15-5.15.0/arch/x86/Kconfig --- linux-hwe-5.15-5.15.0/arch/x86/Kconfig +++ linux-hwe-5.15-5.15.0/arch/x86/Kconfig @@ -460,15 +460,6 @@ def_bool y depends on X86_GOLDFISH -config RETPOLINE - bool "Avoid speculative indirect branches in kernel" - default y - help - Compile kernel with the retpoline compiler options to guard against - kernel-to-user data leaks by avoiding speculative indirect - branches. Requires a compiler with -mindirect-branch=thunk-extern - support for full protection. The kernel may run slower. - config X86_CPU_RESCTRL bool "x86 CPU resource control support" depends on X86 && (CPU_SUP_INTEL || CPU_SUP_AMD) @@ -2412,6 +2403,88 @@ endmenu +config CC_HAS_SLS + def_bool $(cc-option,-mharden-sls=all) + +config CC_HAS_RETURN_THUNK + def_bool $(cc-option,-mfunction-return=thunk-extern) + +menuconfig SPECULATION_MITIGATIONS + bool "Mitigations for speculative execution vulnerabilities" + default y + help + Say Y here to enable options which enable mitigations for + speculative execution hardware vulnerabilities. + + If you say N, all mitigations will be disabled. You really + should know what you are doing to say so. + +if SPECULATION_MITIGATIONS + +config PAGE_TABLE_ISOLATION + bool "Remove the kernel mapping in user mode" + default y + depends on (X86_64 || X86_PAE) + help + This feature reduces the number of hardware side channels by + ensuring that the majority of kernel addresses are not mapped + into userspace. + + See Documentation/x86/pti.rst for more details. + +config RETPOLINE + bool "Avoid speculative indirect branches in kernel" + default y + help + Compile kernel with the retpoline compiler options to guard against + kernel-to-user data leaks by avoiding speculative indirect + branches. Requires a compiler with -mindirect-branch=thunk-extern + support for full protection. The kernel may run slower. + +config RETHUNK + bool "Enable return-thunks" + depends on RETPOLINE && CC_HAS_RETURN_THUNK + default y + help + Compile the kernel with the return-thunks compiler option to guard + against kernel-to-user data leaks by avoiding return speculation. + Requires a compiler with -mfunction-return=thunk-extern + support for full protection. The kernel may run slower. + +config CPU_UNRET_ENTRY + bool "Enable UNRET on kernel entry" + depends on CPU_SUP_AMD && RETHUNK + default y + help + Compile the kernel with support for the retbleed=unret mitigation. + +config CPU_IBPB_ENTRY + bool "Enable IBPB on kernel entry" + depends on CPU_SUP_AMD + default y + help + Compile the kernel with support for the retbleed=ibpb mitigation. + +config CPU_IBRS_ENTRY + bool "Enable IBRS on kernel entry" + depends on CPU_SUP_INTEL + default y + help + Compile the kernel with support for the spectre_v2=ibrs mitigation. + This mitigates both spectre_v2 and retbleed at great cost to + performance. + +config SLS + bool "Mitigate Straight-Line-Speculation" + depends on CC_HAS_SLS && X86_64 + default n + help + Compile the kernel with straight-line-speculation options to guard + against straight line speculation. The kernel image might be slightly + larger. + +endif + config ARCH_HAS_ADD_PAGES def_bool y depends on X86_64 && ARCH_ENABLE_MEMORY_HOTPLUG diff -u linux-hwe-5.15-5.15.0/arch/x86/entry/Makefile linux-hwe-5.15-5.15.0/arch/x86/entry/Makefile --- linux-hwe-5.15-5.15.0/arch/x86/entry/Makefile +++ linux-hwe-5.15-5.15.0/arch/x86/entry/Makefile @@ -11,7 +11,7 @@ CFLAGS_common.o += -fno-stack-protector -obj-y := entry_$(BITS).o syscall_$(BITS).o +obj-y := entry.o entry_$(BITS).o syscall_$(BITS).o obj-y += common.o obj-y += vdso/ diff -u linux-hwe-5.15-5.15.0/arch/x86/entry/entry_64.S linux-hwe-5.15-5.15.0/arch/x86/entry/entry_64.S --- linux-hwe-5.15-5.15.0/arch/x86/entry/entry_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/entry_64.S @@ -85,7 +85,7 @@ */ SYM_CODE_START(entry_SYSCALL_64) - UNWIND_HINT_EMPTY + UNWIND_HINT_ENTRY swapgs /* tss.sp2 is scratch space. */ @@ -110,6 +110,11 @@ movq %rsp, %rdi /* Sign extend the lower 32bit as syscall numbers are treated as int */ movslq %eax, %rsi + + /* clobbers %rax, make sure it is after saving the syscall nr */ + IBRS_ENTER + UNTRAIN_RET + call do_syscall_64 /* returns with IRQs disabled */ /* @@ -189,8 +194,8 @@ * perf profiles. Nothing jumps here. */ syscall_return_via_sysret: - /* rcx and r11 are already restored (see code above) */ - POP_REGS pop_rdi=0 skip_r11rcx=1 + IBRS_EXIT + POP_REGS pop_rdi=0 /* * Now all regs are restored except RSP and RDI. @@ -243,7 +248,6 @@ movq %rbx, PER_CPU_VAR(fixed_percpu_data) + stack_canary_offset #endif -#ifdef CONFIG_RETPOLINE /* * When switching from a shallower to a deeper call stack * the RSB may either underflow or use entries populated @@ -252,7 +256,6 @@ * speculative execution to prevent attack. */ FILL_RETURN_BUFFER %r12, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW -#endif /* restore callee-saved registers */ popq %r15 @@ -315,6 +318,14 @@ #endif .endm +SYM_CODE_START_LOCAL(xen_error_entry) + UNWIND_HINT_FUNC + PUSH_AND_CLEAR_REGS save_ret=1 + ENCODE_FRAME_POINTER 8 + UNTRAIN_RET + RET +SYM_CODE_END(xen_error_entry) + /** * idtentry_body - Macro to emit code calling the C function * @cfunc: C function to be called @@ -322,7 +333,18 @@ */ .macro idtentry_body cfunc has_error_code:req - call error_entry + /* + * Call error_entry() and switch to the task stack if from userspace. + * + * When in XENPV, it is already in the task stack, and it can't fault + * for native_iret() nor native_load_gs_index() since XENPV uses its + * own pvops for IRET and load_gs_index(). And it doesn't need to + * switch the CR3. So it can skip invoking error_entry(). + */ + ALTERNATIVE "call error_entry; movq %rax, %rsp", \ + "call xen_error_entry", X86_FEATURE_XENPV + + ENCODE_FRAME_POINTER UNWIND_HINT_REGS movq %rsp, %rdi /* pt_regs pointer into 1st argument*/ @@ -567,6 +589,7 @@ SYM_CODE_START_LOCAL(common_interrupt_return) SYM_INNER_LABEL(swapgs_restore_regs_and_return_to_usermode, SYM_L_GLOBAL) + IBRS_EXIT #ifdef CONFIG_DEBUG_ENTRY /* Assert that pt_regs indicates user mode. */ testb $3, CS(%rsp) @@ -738,7 +761,7 @@ 2: ALTERNATIVE "", "mfence", X86_BUG_SWAPGS_FENCE swapgs FRAME_END - ret + RET SYM_FUNC_END(asm_load_gs_index) EXPORT_SYMBOL(asm_load_gs_index) @@ -845,6 +868,9 @@ * 1 -> no SWAPGS on exit * * Y GSBASE value at entry, must be restored in paranoid_exit + * + * R14 - old CR3 + * R15 - old SPEC_CTRL */ SYM_CODE_START_LOCAL(paranoid_entry) UNWIND_HINT_FUNC @@ -889,7 +915,7 @@ * is needed here. */ SAVE_AND_SET_GSBASE scratch_reg=%rax save_reg=%rbx - ret + jmp .Lparanoid_gsbase_done .Lparanoid_entry_checkgs: /* EBX = 1 -> kernel GSBASE active, no restore required */ @@ -908,9 +934,17 @@ xorl %ebx, %ebx swapgs .Lparanoid_kernel_gsbase: - FENCE_SWAPGS_KERNEL_ENTRY - ret +.Lparanoid_gsbase_done: + + /* + * Once we have CR3 and %GS setup save and set SPEC_CTRL. Just like + * CR3 above, keep the old value in a callee saved register. + */ + IBRS_ENTER save_reg=%r15 + UNTRAIN_RET + + RET SYM_CODE_END(paranoid_entry) /* @@ -931,9 +965,19 @@ * 1 -> no SWAPGS on exit * * Y User space GSBASE, must be restored unconditionally + * + * R14 - old CR3 + * R15 - old SPEC_CTRL */ SYM_CODE_START_LOCAL(paranoid_exit) UNWIND_HINT_REGS + + /* + * Must restore IBRS state before both CR3 and %GS since we need access + * to the per-CPU x86_spec_ctrl_shadow variable. + */ + IBRS_EXIT save_reg=%r15 + /* * The order of operations is important. RESTORE_CR3 requires * kernel GSBASE. @@ -962,13 +1006,15 @@ SYM_CODE_END(paranoid_exit) /* - * Save all registers in pt_regs, and switch GS if needed. + * Switch GS and CR3 if needed. */ SYM_CODE_START_LOCAL(error_entry) UNWIND_HINT_FUNC cld + PUSH_AND_CLEAR_REGS save_ret=1 ENCODE_FRAME_POINTER 8 + testb $3, CS+8(%rsp) jz .Lerror_kernelspace @@ -980,16 +1026,15 @@ FENCE_SWAPGS_USER_ENTRY /* We have user CR3. Change to kernel CR3. */ SWITCH_TO_KERNEL_CR3 scratch_reg=%rax + IBRS_ENTER + UNTRAIN_RET + leaq 8(%rsp), %rdi /* arg0 = pt_regs pointer */ .Lerror_entry_from_usermode_after_swapgs: + /* Put us onto the real thread stack. */ - popq %r12 /* save return addr in %12 */ - movq %rsp, %rdi /* arg0 = pt_regs pointer */ call sync_regs - movq %rax, %rsp /* switch stack */ - ENCODE_FRAME_POINTER - pushq %r12 - ret + RET /* * There are two places in the kernel that can potentially fault with @@ -1020,7 +1065,9 @@ */ .Lerror_entry_done_lfence: FENCE_SWAPGS_KERNEL_ENTRY - ret + leaq 8(%rsp), %rax /* return pt_regs pointer */ + ANNOTATE_UNRET_END + RET .Lbstep_iret: /* Fix truncated RIP */ @@ -1035,14 +1082,16 @@ SWAPGS FENCE_SWAPGS_USER_ENTRY SWITCH_TO_KERNEL_CR3 scratch_reg=%rax + IBRS_ENTER + UNTRAIN_RET /* * Pretend that the exception came from user mode: set up pt_regs * as if we faulted immediately after IRET. */ - mov %rsp, %rdi + leaq 8(%rsp), %rdi /* arg0 = pt_regs pointer */ call fixup_bad_iret - mov %rax, %rsp + mov %rax, %rdi jmp .Lerror_entry_from_usermode_after_swapgs SYM_CODE_END(error_entry) @@ -1139,6 +1188,9 @@ PUSH_AND_CLEAR_REGS rdx=(%rdx) ENCODE_FRAME_POINTER + IBRS_ENTER + UNTRAIN_RET + /* * At this point we no longer need to worry about stack damage * due to nesting -- we're on the normal thread stack and we're @@ -1361,6 +1413,9 @@ movq $-1, %rsi call exc_nmi + /* Always restore stashed SPEC_CTRL value (see paranoid_entry) */ + IBRS_EXIT save_reg=%r15 + /* Always restore stashed CR3 value (see paranoid_entry) */ RESTORE_CR3 scratch_reg=%r15 save_reg=%r14 diff -u linux-hwe-5.15-5.15.0/arch/x86/entry/thunk_32.S linux-hwe-5.15-5.15.0/arch/x86/entry/thunk_32.S --- linux-hwe-5.15-5.15.0/arch/x86/entry/thunk_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/thunk_32.S @@ -24,7 +24,7 @@ popl %edx popl %ecx popl %eax - ret + RET _ASM_NOKPROBE(\name) SYM_CODE_END(\name) .endm diff -u linux-hwe-5.15-5.15.0/arch/x86/entry/thunk_64.S linux-hwe-5.15-5.15.0/arch/x86/entry/thunk_64.S --- linux-hwe-5.15-5.15.0/arch/x86/entry/thunk_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/thunk_64.S @@ -48,5 +48,5 @@ popq %rdi popq %rbp - ret + RET _ASM_NOKPROBE(__thunk_restore) SYM_CODE_END(__thunk_restore) diff -u linux-hwe-5.15-5.15.0/arch/x86/include/asm/alternative.h linux-hwe-5.15-5.15.0/arch/x86/include/asm/alternative.h --- linux-hwe-5.15-5.15.0/arch/x86/include/asm/alternative.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/alternative.h @@ -76,6 +76,7 @@ extern void alternative_instructions(void); extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); extern void apply_retpolines(s32 *start, s32 *end); +extern void apply_returns(s32 *start, s32 *end); struct module; diff -u linux-hwe-5.15-5.15.0/arch/x86/include/asm/cpufeatures.h linux-hwe-5.15-5.15.0/arch/x86/include/asm/cpufeatures.h --- linux-hwe-5.15-5.15.0/arch/x86/include/asm/cpufeatures.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/cpufeatures.h @@ -203,8 +203,8 @@ #define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9) /* AMD ProcFeedbackInterface */ /* FREE! ( 7*32+10) */ #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_LFENCE ( 7*32+13) /* "" Use LFENCE for Spectre variant 2 */ +#define X86_FEATURE_KERNEL_IBRS ( 7*32+12) /* "" Set/clear IBRS on kernel entry/exit */ +#define X86_FEATURE_RSB_VMEXIT ( 7*32+13) /* "" Fill RSB on VM-Exit */ #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 */ @@ -295,6 +295,12 @@ #define X86_FEATURE_PER_THREAD_MBA (11*32+ 7) /* "" Per-thread Memory Bandwidth Allocation */ #define X86_FEATURE_SGX1 (11*32+ 8) /* "" Basic SGX */ #define X86_FEATURE_SGX2 (11*32+ 9) /* "" SGX Enclave Dynamic Memory Management (EDMM) */ +#define X86_FEATURE_ENTRY_IBPB (11*32+10) /* "" Issue an IBPB on kernel entry */ +#define X86_FEATURE_RRSBA_CTRL (11*32+11) /* "" RET prediction control */ +#define X86_FEATURE_RETPOLINE (11*32+12) /* "" Generic Retpoline mitigation for Spectre variant 2 */ +#define X86_FEATURE_RETPOLINE_LFENCE (11*32+13) /* "" Use LFENCE for Spectre variant 2 */ +#define X86_FEATURE_RETHUNK (11*32+14) /* "" Use REturn THUNK */ +#define X86_FEATURE_UNRET (11*32+15) /* "" AMD BTB untrain return */ /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */ #define X86_FEATURE_AVX_VNNI (12*32+ 4) /* AVX VNNI instructions */ @@ -315,6 +321,7 @@ #define X86_FEATURE_VIRT_SSBD (13*32+25) /* Virtualized Speculative Store Bypass Disable */ #define X86_FEATURE_AMD_SSB_NO (13*32+26) /* "" Speculative Store Bypass is fixed in hardware. */ #define X86_FEATURE_CPPC (13*32+27) /* Collaborative Processor Performance Control */ +#define X86_FEATURE_BTC_NO (13*32+29) /* "" Not vulnerable to Branch Type Confusion */ /* Thermal and Power Management Leaf, CPUID level 0x00000006 (EAX), word 14 */ #define X86_FEATURE_DTHERM (14*32+ 0) /* Digital Thermal Sensor */ @@ -443,4 +450,5 @@ #define X86_BUG_SRBDS X86_BUG(24) /* CPU may leak RNG bits if not mitigated */ #define X86_BUG_MMIO_STALE_DATA X86_BUG(25) /* CPU is affected by Processor MMIO Stale Data vulnerabilities */ +#define X86_BUG_RETBLEED X86_BUG(26) /* CPU is affected by RETBleed */ #endif /* _ASM_X86_CPUFEATURES_H */ diff -u linux-hwe-5.15-5.15.0/arch/x86/include/asm/msr-index.h linux-hwe-5.15-5.15.0/arch/x86/include/asm/msr-index.h --- linux-hwe-5.15-5.15.0/arch/x86/include/asm/msr-index.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/msr-index.h @@ -51,6 +51,8 @@ #define SPEC_CTRL_STIBP BIT(SPEC_CTRL_STIBP_SHIFT) /* STIBP mask */ #define SPEC_CTRL_SSBD_SHIFT 2 /* Speculative Store Bypass Disable bit */ #define SPEC_CTRL_SSBD BIT(SPEC_CTRL_SSBD_SHIFT) /* Speculative Store Bypass Disable */ +#define SPEC_CTRL_RRSBA_DIS_S_SHIFT 6 /* Disable RRSBA behavior */ +#define SPEC_CTRL_RRSBA_DIS_S BIT(SPEC_CTRL_RRSBA_DIS_S_SHIFT) #define MSR_IA32_PRED_CMD 0x00000049 /* Prediction Command */ #define PRED_CMD_IBPB BIT(0) /* Indirect Branch Prediction Barrier */ @@ -91,6 +93,7 @@ #define MSR_IA32_ARCH_CAPABILITIES 0x0000010a #define ARCH_CAP_RDCL_NO BIT(0) /* Not susceptible to Meltdown */ #define ARCH_CAP_IBRS_ALL BIT(1) /* Enhanced IBRS support */ +#define ARCH_CAP_RSBA BIT(2) /* RET may use alternative branch predictors */ #define ARCH_CAP_SKIP_VMENTRY_L1DFLUSH BIT(3) /* Skip L1D flush on vmentry */ #define ARCH_CAP_SSB_NO BIT(4) /* * Not susceptible to Speculative Store Bypass @@ -138,6 +141,13 @@ * bit available to control VERW * behavior. */ +#define ARCH_CAP_RRSBA BIT(19) /* + * Indicates RET may use predictors + * other than the RSB. With eIBRS + * enabled predictions in kernel mode + * are restricted to targets in + * kernel. + */ #define MSR_IA32_FLUSH_CMD 0x0000010b #define L1D_FLUSH BIT(0) /* @@ -531,6 +541,9 @@ /* Fam 17h MSRs */ #define MSR_F17H_IRPERF 0xc00000e9 +#define MSR_ZEN2_SPECTRAL_CHICKEN 0xc00110e3 +#define MSR_ZEN2_SPECTRAL_CHICKEN_BIT BIT_ULL(1) + /* Fam 16h MSRs */ #define MSR_F16H_L2I_PERF_CTL 0xc0010230 #define MSR_F16H_L2I_PERF_CTR 0xc0010231 diff -u linux-hwe-5.15-5.15.0/arch/x86/include/asm/nospec-branch.h linux-hwe-5.15-5.15.0/arch/x86/include/asm/nospec-branch.h --- linux-hwe-5.15-5.15.0/arch/x86/include/asm/nospec-branch.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/nospec-branch.h @@ -11,6 +11,7 @@ #include #include #include +#include #define RETPOLINE_THUNK_SIZE 32 @@ -76,6 +77,23 @@ .endm /* + * (ab)use RETPOLINE_SAFE on RET to annotate away 'bare' RET instructions + * vs RETBleed validation. + */ +#define ANNOTATE_UNRET_SAFE ANNOTATE_RETPOLINE_SAFE + +/* + * Abuse ANNOTATE_RETPOLINE_SAFE on a NOP to indicate UNRET_END, should + * eventually turn into it's own annotation. + */ +.macro ANNOTATE_UNRET_END +#ifdef CONFIG_DEBUG_ENTRY + ANNOTATE_RETPOLINE_SAFE + nop +#endif +.endm + +/* * JMP_NOSPEC and CALL_NOSPEC macros can be used instead of a simple * indirect jmp/call which may be susceptible to the Spectre variant 2 * attack. @@ -105,10 +123,34 @@ * monstrosity above, manually. */ .macro FILL_RETURN_BUFFER reg:req nr:req ftr:req -#ifdef CONFIG_RETPOLINE ALTERNATIVE "jmp .Lskip_rsb_\@", "", \ftr __FILL_RETURN_BUFFER(\reg,\nr,%_ASM_SP) .Lskip_rsb_\@: +.endm + +#ifdef CONFIG_CPU_UNRET_ENTRY +#define CALL_ZEN_UNTRAIN_RET "call zen_untrain_ret" +#else +#define CALL_ZEN_UNTRAIN_RET "" +#endif + +/* + * Mitigate RETBleed for AMD/Hygon Zen uarch. Requires KERNEL CR3 because the + * return thunk isn't mapped into the userspace tables (then again, AMD + * typically has NO_MELTDOWN). + * + * While zen_untrain_ret() doesn't clobber anything but requires stack, + * entry_ibpb() will clobber AX, CX, DX. + * + * As such, this must be placed after every *SWITCH_TO_KERNEL_CR3 at a point + * where we have a stack but before any RET instruction. + */ +.macro UNTRAIN_RET +#if defined(CONFIG_CPU_UNRET_ENTRY) || defined(CONFIG_CPU_IBPB_ENTRY) + ANNOTATE_UNRET_END + ALTERNATIVE_2 "", \ + CALL_ZEN_UNTRAIN_RET, X86_FEATURE_UNRET, \ + "call entry_ibpb", X86_FEATURE_ENTRY_IBPB #endif .endm @@ -120,6 +162,10 @@ _ASM_PTR " 999b\n\t" \ ".popsection\n\t" +extern void __x86_return_thunk(void); +extern void zen_untrain_ret(void); +extern void entry_ibpb(void); + #ifdef CONFIG_RETPOLINE typedef u8 retpoline_thunk_t[RETPOLINE_THUNK_SIZE]; @@ -193,6 +239,7 @@ SPECTRE_V2_EIBRS, SPECTRE_V2_EIBRS_RETPOLINE, SPECTRE_V2_EIBRS_LFENCE, + SPECTRE_V2_IBRS, }; /* The indirect branch speculation control variants */ @@ -235,6 +282,9 @@ /* The Intel SPEC CTRL MSR base value cache */ extern u64 x86_spec_ctrl_base; +DECLARE_PER_CPU(u64, x86_spec_ctrl_current); +extern void write_spec_ctrl_current(u64 val, bool force); +extern u64 spec_ctrl_current(void); /* * With retpoline, we must use IBRS to restrict branch prediction @@ -244,18 +294,16 @@ */ #define firmware_restrict_branch_speculation_start() \ do { \ - u64 val = x86_spec_ctrl_base | SPEC_CTRL_IBRS; \ - \ preempt_disable(); \ - alternative_msr_write(MSR_IA32_SPEC_CTRL, val, \ + alternative_msr_write(MSR_IA32_SPEC_CTRL, \ + spec_ctrl_current() | SPEC_CTRL_IBRS, \ X86_FEATURE_USE_IBRS_FW); \ } while (0) #define firmware_restrict_branch_speculation_end() \ do { \ - u64 val = x86_spec_ctrl_base; \ - \ - alternative_msr_write(MSR_IA32_SPEC_CTRL, val, \ + alternative_msr_write(MSR_IA32_SPEC_CTRL, \ + spec_ctrl_current(), \ X86_FEATURE_USE_IBRS_FW); \ preempt_enable(); \ } while (0) diff -u linux-hwe-5.15-5.15.0/arch/x86/include/asm/traps.h linux-hwe-5.15-5.15.0/arch/x86/include/asm/traps.h --- linux-hwe-5.15-5.15.0/arch/x86/include/asm/traps.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/traps.h @@ -13,7 +13,7 @@ #ifdef CONFIG_X86_64 asmlinkage __visible notrace struct pt_regs *sync_regs(struct pt_regs *eregs); asmlinkage __visible notrace -struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s); +struct pt_regs *fixup_bad_iret(struct pt_regs *bad_regs); void __init trap_init(void); asmlinkage __visible noinstr struct pt_regs *vc_switch_off_ist(struct pt_regs *eregs); #endif diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/acpi/wakeup_32.S linux-hwe-5.15-5.15.0/arch/x86/kernel/acpi/wakeup_32.S --- linux-hwe-5.15-5.15.0/arch/x86/kernel/acpi/wakeup_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/acpi/wakeup_32.S @@ -62,7 +62,7 @@ popl saved_context_eflags movl $ret_point, saved_eip - ret + RET restore_registers: @@ -72,7 +72,7 @@ movl saved_context_edi, %edi pushl saved_context_eflags popfl - ret + RET SYM_CODE_START(do_suspend_lowlevel) call save_processor_state @@ -88,7 +88,7 @@ ret_point: call restore_registers call restore_processor_state - ret + RET SYM_CODE_END(do_suspend_lowlevel) .data diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/alternative.c linux-hwe-5.15-5.15.0/arch/x86/kernel/alternative.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/alternative.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/alternative.c @@ -115,6 +115,7 @@ } extern s32 __retpoline_sites[], __retpoline_sites_end[]; +extern s32 __return_sites[], __return_sites_end[]; extern struct alt_instr __alt_instructions[], __alt_instructions_end[]; extern s32 __smp_locks[], __smp_locks_end[]; void text_poke_early(void *addr, const void *opcode, size_t len); @@ -506,9 +507,76 @@ } } +#ifdef CONFIG_RETHUNK +/* + * Rewrite the compiler generated return thunk tail-calls. + * + * For example, convert: + * + * JMP __x86_return_thunk + * + * into: + * + * RET + */ +static int patch_return(void *addr, struct insn *insn, u8 *bytes) +{ + int i = 0; + + if (cpu_feature_enabled(X86_FEATURE_RETHUNK)) + return -1; + + bytes[i++] = RET_INSN_OPCODE; + + for (; i < insn->length;) + bytes[i++] = INT3_INSN_OPCODE; + + return i; +} + +void __init_or_module noinline apply_returns(s32 *start, s32 *end) +{ + s32 *s; + + for (s = start; s < end; s++) { + void *dest = NULL, *addr = (void *)s + *s; + struct insn insn; + int len, ret; + u8 bytes[16]; + u8 op; + + ret = insn_decode_kernel(&insn, addr); + if (WARN_ON_ONCE(ret < 0)) + continue; + + op = insn.opcode.bytes[0]; + if (op == JMP32_INSN_OPCODE) + dest = addr + insn.length + insn.immediate.value; + + if (__static_call_fixup(addr, op, dest) || + WARN_ON_ONCE(dest != &__x86_return_thunk)) + continue; + + DPRINTK("return thunk at: %pS (%px) len: %d to: %pS", + addr, addr, insn.length, + addr + insn.length + insn.immediate.value); + + len = patch_return(addr, &insn, bytes); + if (len == insn.length) { + DUMP_BYTES(((u8*)addr), len, "%px: orig: ", addr); + DUMP_BYTES(((u8*)bytes), len, "%px: repl: ", addr); + text_poke_early(addr, bytes, len); + } + } +} +#else +void __init_or_module noinline apply_returns(s32 *start, s32 *end) { } +#endif /* CONFIG_RETHUNK */ + #else /* !RETPOLINES || !CONFIG_STACK_VALIDATION */ void __init_or_module noinline apply_retpolines(s32 *start, s32 *end) { } +void __init_or_module noinline apply_returns(s32 *start, s32 *end) { } #endif /* CONFIG_RETPOLINE && CONFIG_STACK_VALIDATION */ @@ -714,7 +782,7 @@ " .type int3_magic, @function\n" "int3_magic:\n" " movl $1, (%" _ASM_ARG1 ")\n" -" ret\n" + ASM_RET " .size int3_magic, .-int3_magic\n" " .popsection\n" ); @@ -824,6 +892,7 @@ * those can rewrite the retpoline thunks. */ apply_retpolines(__retpoline_sites, __retpoline_sites_end); + apply_returns(__return_sites, __return_sites_end); /* * Then patch alternatives, such that those paravirt calls that are in @@ -1113,10 +1182,13 @@ } struct text_poke_loc { - s32 rel_addr; /* addr := _stext + rel_addr */ - s32 rel32; + /* addr := _stext + rel_addr */ + s32 rel_addr; + s32 disp; + u8 len; u8 opcode; const u8 text[POKE_MAX_OPCODE_SIZE]; + /* see text_poke_bp_batch() */ u8 old; }; @@ -1131,7 +1203,8 @@ static __always_inline struct bp_patching_desc *try_get_desc(struct bp_patching_desc **descp) { - struct bp_patching_desc *desc = __READ_ONCE(*descp); /* rcu_dereference */ + /* rcu_dereference */ + struct bp_patching_desc *desc = __READ_ONCE(*descp); if (!desc || !arch_atomic_inc_not_zero(&desc->refs)) return NULL; @@ -1165,7 +1238,7 @@ { struct bp_patching_desc *desc; struct text_poke_loc *tp; - int len, ret = 0; + int ret = 0; void *ip; if (user_mode(regs)) @@ -1205,8 +1278,7 @@ goto out_put; } - len = text_opcode_size(tp->opcode); - ip += len; + ip += tp->len; switch (tp->opcode) { case INT3_INSN_OPCODE: @@ -1221,12 +1293,12 @@ break; case CALL_INSN_OPCODE: - int3_emulate_call(regs, (long)ip + tp->rel32); + int3_emulate_call(regs, (long)ip + tp->disp); break; case JMP32_INSN_OPCODE: case JMP8_INSN_OPCODE: - int3_emulate_jmp(regs, (long)ip + tp->rel32); + int3_emulate_jmp(regs, (long)ip + tp->disp); break; default: @@ -1301,7 +1373,7 @@ */ for (do_sync = 0, i = 0; i < nr_entries; i++) { u8 old[POKE_MAX_OPCODE_SIZE] = { tp[i].old, }; - int len = text_opcode_size(tp[i].opcode); + int len = tp[i].len; if (len - INT3_INSN_SIZE > 0) { memcpy(old + INT3_INSN_SIZE, @@ -1378,21 +1450,37 @@ const void *opcode, size_t len, const void *emulate) { struct insn insn; - int ret; + int ret, i; memcpy((void *)tp->text, opcode, len); if (!emulate) emulate = opcode; ret = insn_decode_kernel(&insn, emulate); - BUG_ON(ret < 0); - BUG_ON(len != insn.length); tp->rel_addr = addr - (void *)_stext; + tp->len = len; tp->opcode = insn.opcode.bytes[0]; switch (tp->opcode) { + case RET_INSN_OPCODE: + case JMP32_INSN_OPCODE: + case JMP8_INSN_OPCODE: + /* + * Control flow instructions without implied execution of the + * next instruction can be padded with INT3. + */ + for (i = insn.length; i < len; i++) + BUG_ON(tp->text[i] != INT3_INSN_OPCODE); + break; + + default: + BUG_ON(len != insn.length); + }; + + + switch (tp->opcode) { case INT3_INSN_OPCODE: case RET_INSN_OPCODE: break; @@ -1400,7 +1488,7 @@ case CALL_INSN_OPCODE: case JMP32_INSN_OPCODE: case JMP8_INSN_OPCODE: - tp->rel32 = insn.immediate.value; + tp->disp = insn.immediate.value; break; default: /* assume NOP */ @@ -1408,13 +1496,13 @@ case 2: /* NOP2 -- emulate as JMP8+0 */ BUG_ON(memcmp(emulate, x86_nops[len], len)); tp->opcode = JMP8_INSN_OPCODE; - tp->rel32 = 0; + tp->disp = 0; break; case 5: /* NOP5 -- emulate as JMP32+0 */ BUG_ON(memcmp(emulate, x86_nops[len], len)); tp->opcode = JMP32_INSN_OPCODE; - tp->rel32 = 0; + tp->disp = 0; break; default: /* unknown instruction */ diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/amd.c linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/amd.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/amd.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/amd.c @@ -886,6 +886,28 @@ clear_rdrand_cpuid_bit(c); } +void init_spectral_chicken(struct cpuinfo_x86 *c) +{ +#ifdef CONFIG_CPU_UNRET_ENTRY + u64 value; + + /* + * On Zen2 we offer this chicken (bit) on the altar of Speculation. + * + * This suppresses speculation from the middle of a basic block, i.e. it + * suppresses non-branch predictions. + * + * We use STIBP as a heuristic to filter out Zen2 from the rest of F17H + */ + if (!cpu_has(c, X86_FEATURE_HYPERVISOR) && cpu_has(c, X86_FEATURE_AMD_STIBP)) { + if (!rdmsrl_safe(MSR_ZEN2_SPECTRAL_CHICKEN, &value)) { + value |= MSR_ZEN2_SPECTRAL_CHICKEN_BIT; + wrmsrl_safe(MSR_ZEN2_SPECTRAL_CHICKEN, value); + } + } +#endif +} + static void init_amd_zn(struct cpuinfo_x86 *c) { set_cpu_cap(c, X86_FEATURE_ZEN); @@ -894,12 +916,21 @@ node_reclaim_distance = 32; #endif - /* - * Fix erratum 1076: CPB feature bit not being set in CPUID. - * Always set it, except when running under a hypervisor. - */ - if (!cpu_has(c, X86_FEATURE_HYPERVISOR) && !cpu_has(c, X86_FEATURE_CPB)) - set_cpu_cap(c, X86_FEATURE_CPB); + /* Fix up CPUID bits, but only if not virtualised. */ + if (!cpu_has(c, X86_FEATURE_HYPERVISOR)) { + + /* Erratum 1076: CPB feature bit not being set in CPUID. */ + if (!cpu_has(c, X86_FEATURE_CPB)) + set_cpu_cap(c, X86_FEATURE_CPB); + + /* + * Zen3 (Fam19 model < 0x10) parts are not susceptible to + * Branch Type Confusion, but predate the allocation of the + * BTC_NO bit. + */ + if (c->x86 == 0x19 && !cpu_has(c, X86_FEATURE_BTC_NO)) + set_cpu_cap(c, X86_FEATURE_BTC_NO); + } } static void init_amd(struct cpuinfo_x86 *c) @@ -931,7 +962,8 @@ case 0x12: init_amd_ln(c); break; case 0x15: init_amd_bd(c); break; case 0x16: init_amd_jg(c); break; - case 0x17: fallthrough; + case 0x17: init_spectral_chicken(c); + fallthrough; case 0x19: init_amd_zn(c); break; } diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/bugs.c linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/bugs.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/bugs.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/bugs.c @@ -38,6 +38,8 @@ static void __init spectre_v1_select_mitigation(void); static void __init spectre_v2_select_mitigation(void); +static void __init retbleed_select_mitigation(void); +static void __init spectre_v2_user_select_mitigation(void); static void __init ssb_select_mitigation(void); static void __init l1tf_select_mitigation(void); static void __init mds_select_mitigation(void); @@ -48,16 +50,40 @@ static void __init srbds_select_mitigation(void); static void __init l1d_flush_select_mitigation(void); -/* The base value of the SPEC_CTRL MSR that always has to be preserved. */ +/* The base value of the SPEC_CTRL MSR without task-specific bits set */ u64 x86_spec_ctrl_base; EXPORT_SYMBOL_GPL(x86_spec_ctrl_base); + +/* The current value of the SPEC_CTRL MSR with task-specific bits set */ +DEFINE_PER_CPU(u64, x86_spec_ctrl_current); +EXPORT_SYMBOL_GPL(x86_spec_ctrl_current); + static DEFINE_MUTEX(spec_ctrl_mutex); /* - * The vendor and possibly platform specific bits which can be modified in - * x86_spec_ctrl_base. + * Keep track of the SPEC_CTRL MSR value for the current task, which may differ + * from x86_spec_ctrl_base due to STIBP/SSB in __speculation_ctrl_update(). */ -static u64 __ro_after_init x86_spec_ctrl_mask = SPEC_CTRL_IBRS; +void write_spec_ctrl_current(u64 val, bool force) +{ + if (this_cpu_read(x86_spec_ctrl_current) == val) + return; + + this_cpu_write(x86_spec_ctrl_current, val); + + /* + * When KERNEL_IBRS this MSR is written on return-to-user, unless + * forced the update can be delayed until that time. + */ + if (force || !cpu_feature_enabled(X86_FEATURE_KERNEL_IBRS)) + wrmsrl(MSR_IA32_SPEC_CTRL, val); +} + +u64 spec_ctrl_current(void) +{ + return this_cpu_read(x86_spec_ctrl_current); +} +EXPORT_SYMBOL_GPL(spec_ctrl_current); /* * AMD specific MSR info for Speculative Store Bypass control. @@ -114,13 +140,21 @@ if (boot_cpu_has(X86_FEATURE_MSR_SPEC_CTRL)) rdmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); - /* Allow STIBP in MSR_SPEC_CTRL if supported */ - if (boot_cpu_has(X86_FEATURE_STIBP)) - x86_spec_ctrl_mask |= SPEC_CTRL_STIBP; - /* Select the proper CPU mitigations before patching alternatives: */ spectre_v1_select_mitigation(); spectre_v2_select_mitigation(); + /* + * retbleed_select_mitigation() relies on the state set by + * spectre_v2_select_mitigation(); specifically it wants to know about + * spectre_v2=ibrs. + */ + retbleed_select_mitigation(); + /* + * spectre_v2_user_select_mitigation() relies on the state set by + * retbleed_select_mitigation(); specifically the STIBP selection is + * forced for UNRET. + */ + spectre_v2_user_select_mitigation(); ssb_select_mitigation(); l1tf_select_mitigation(); md_clear_select_mitigation(); @@ -161,31 +195,17 @@ #endif } +/* + * NOTE: This function is *only* called for SVM. VMX spec_ctrl handling is + * done in vmenter.S. + */ void x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bool setguest) { - u64 msrval, guestval, hostval = x86_spec_ctrl_base; + u64 msrval, guestval = guest_spec_ctrl, hostval = spec_ctrl_current(); struct thread_info *ti = current_thread_info(); - /* Is MSR_SPEC_CTRL implemented ? */ if (static_cpu_has(X86_FEATURE_MSR_SPEC_CTRL)) { - /* - * Restrict guest_spec_ctrl to supported values. Clear the - * modifiable bits in the host base value and or the - * modifiable bits from the guest value. - */ - guestval = hostval & ~x86_spec_ctrl_mask; - guestval |= guest_spec_ctrl & x86_spec_ctrl_mask; - - /* SSBD controlled in MSR_SPEC_CTRL */ - if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) || - static_cpu_has(X86_FEATURE_AMD_SSBD)) - hostval |= ssbd_tif_to_spec_ctrl(ti->flags); - - /* Conditional STIBP enabled? */ - if (static_branch_unlikely(&switch_to_cond_stibp)) - hostval |= stibp_tif_to_spec_ctrl(ti->flags); - if (hostval != guestval) { msrval = setguest ? guestval : hostval; wrmsrl(MSR_IA32_SPEC_CTRL, msrval); @@ -745,12 +765,180 @@ } early_param("nospectre_v1", nospectre_v1_cmdline); -#undef pr_fmt -#define pr_fmt(fmt) "Spectre V2 : " fmt - static enum spectre_v2_mitigation spectre_v2_enabled __ro_after_init = SPECTRE_V2_NONE; +#undef pr_fmt +#define pr_fmt(fmt) "RETBleed: " fmt + +enum retbleed_mitigation { + RETBLEED_MITIGATION_NONE, + RETBLEED_MITIGATION_UNRET, + RETBLEED_MITIGATION_IBPB, + RETBLEED_MITIGATION_IBRS, + RETBLEED_MITIGATION_EIBRS, +}; + +enum retbleed_mitigation_cmd { + RETBLEED_CMD_OFF, + RETBLEED_CMD_AUTO, + RETBLEED_CMD_UNRET, + RETBLEED_CMD_IBPB, +}; + +static const char * const retbleed_strings[] = { + [RETBLEED_MITIGATION_NONE] = "Vulnerable", + [RETBLEED_MITIGATION_UNRET] = "Mitigation: untrained return thunk", + [RETBLEED_MITIGATION_IBPB] = "Mitigation: IBPB", + [RETBLEED_MITIGATION_IBRS] = "Mitigation: IBRS", + [RETBLEED_MITIGATION_EIBRS] = "Mitigation: Enhanced IBRS", +}; + +static enum retbleed_mitigation retbleed_mitigation __ro_after_init = + RETBLEED_MITIGATION_NONE; +static enum retbleed_mitigation_cmd retbleed_cmd __ro_after_init = + RETBLEED_CMD_AUTO; + +static int __ro_after_init retbleed_nosmt = false; + +static int __init retbleed_parse_cmdline(char *str) +{ + if (!str) + return -EINVAL; + + while (str) { + char *next = strchr(str, ','); + if (next) { + *next = 0; + next++; + } + + if (!strcmp(str, "off")) { + retbleed_cmd = RETBLEED_CMD_OFF; + } else if (!strcmp(str, "auto")) { + retbleed_cmd = RETBLEED_CMD_AUTO; + } else if (!strcmp(str, "unret")) { + retbleed_cmd = RETBLEED_CMD_UNRET; + } else if (!strcmp(str, "ibpb")) { + retbleed_cmd = RETBLEED_CMD_IBPB; + } else if (!strcmp(str, "nosmt")) { + retbleed_nosmt = true; + } else { + pr_err("Ignoring unknown retbleed option (%s).", str); + } + + str = next; + } + + return 0; +} +early_param("retbleed", retbleed_parse_cmdline); + +#define RETBLEED_UNTRAIN_MSG "WARNING: BTB untrained return thunk mitigation is only effective on AMD/Hygon!\n" +#define RETBLEED_INTEL_MSG "WARNING: Spectre v2 mitigation leaves CPU vulnerable to RETBleed attacks, data leaks possible!\n" + +static void __init retbleed_select_mitigation(void) +{ + bool mitigate_smt = false; + + if (!boot_cpu_has_bug(X86_BUG_RETBLEED) || cpu_mitigations_off()) + return; + + switch (retbleed_cmd) { + case RETBLEED_CMD_OFF: + return; + + case RETBLEED_CMD_UNRET: + if (IS_ENABLED(CONFIG_CPU_UNRET_ENTRY)) { + retbleed_mitigation = RETBLEED_MITIGATION_UNRET; + } else { + pr_err("WARNING: kernel not compiled with CPU_UNRET_ENTRY.\n"); + goto do_cmd_auto; + } + break; + + case RETBLEED_CMD_IBPB: + if (!boot_cpu_has(X86_FEATURE_IBPB)) { + pr_err("WARNING: CPU does not support IBPB.\n"); + goto do_cmd_auto; + } else if (IS_ENABLED(CONFIG_CPU_IBPB_ENTRY)) { + retbleed_mitigation = RETBLEED_MITIGATION_IBPB; + } else { + pr_err("WARNING: kernel not compiled with CPU_IBPB_ENTRY.\n"); + goto do_cmd_auto; + } + break; + +do_cmd_auto: + case RETBLEED_CMD_AUTO: + default: + if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD || + boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) { + if (IS_ENABLED(CONFIG_CPU_UNRET_ENTRY)) + retbleed_mitigation = RETBLEED_MITIGATION_UNRET; + else if (IS_ENABLED(CONFIG_CPU_IBPB_ENTRY) && boot_cpu_has(X86_FEATURE_IBPB)) + retbleed_mitigation = RETBLEED_MITIGATION_IBPB; + } + + /* + * The Intel mitigation (IBRS or eIBRS) was already selected in + * spectre_v2_select_mitigation(). 'retbleed_mitigation' will + * be set accordingly below. + */ + + break; + } + + switch (retbleed_mitigation) { + case RETBLEED_MITIGATION_UNRET: + setup_force_cpu_cap(X86_FEATURE_RETHUNK); + setup_force_cpu_cap(X86_FEATURE_UNRET); + + if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD && + boot_cpu_data.x86_vendor != X86_VENDOR_HYGON) + pr_err(RETBLEED_UNTRAIN_MSG); + + mitigate_smt = true; + break; + + case RETBLEED_MITIGATION_IBPB: + setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB); + mitigate_smt = true; + break; + + default: + break; + } + + if (mitigate_smt && !boot_cpu_has(X86_FEATURE_STIBP) && + (retbleed_nosmt || cpu_mitigations_auto_nosmt())) + cpu_smt_disable(false); + + /* + * Let IBRS trump all on Intel without affecting the effects of the + * retbleed= cmdline option. + */ + if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) { + switch (spectre_v2_enabled) { + case SPECTRE_V2_IBRS: + retbleed_mitigation = RETBLEED_MITIGATION_IBRS; + break; + case SPECTRE_V2_EIBRS: + case SPECTRE_V2_EIBRS_RETPOLINE: + case SPECTRE_V2_EIBRS_LFENCE: + retbleed_mitigation = RETBLEED_MITIGATION_EIBRS; + break; + default: + pr_err(RETBLEED_INTEL_MSG); + } + } + + pr_info("%s\n", retbleed_strings[retbleed_mitigation]); +} + +#undef pr_fmt +#define pr_fmt(fmt) "Spectre V2 : " fmt + static enum spectre_v2_user_mitigation spectre_v2_user_stibp __ro_after_init = SPECTRE_V2_USER_NONE; static enum spectre_v2_user_mitigation spectre_v2_user_ibpb __ro_after_init = @@ -821,6 +1009,7 @@ SPECTRE_V2_CMD_EIBRS, SPECTRE_V2_CMD_EIBRS_RETPOLINE, SPECTRE_V2_CMD_EIBRS_LFENCE, + SPECTRE_V2_CMD_IBRS, }; enum spectre_v2_user_cmd { @@ -861,13 +1050,15 @@ pr_info("spectre_v2_user=%s forced on command line.\n", reason); } +static __ro_after_init enum spectre_v2_mitigation_cmd spectre_v2_cmd; + static enum spectre_v2_user_cmd __init -spectre_v2_parse_user_cmdline(enum spectre_v2_mitigation_cmd v2_cmd) +spectre_v2_parse_user_cmdline(void) { char arg[20]; int ret, i; - switch (v2_cmd) { + switch (spectre_v2_cmd) { case SPECTRE_V2_CMD_NONE: return SPECTRE_V2_USER_CMD_NONE; case SPECTRE_V2_CMD_FORCE: @@ -893,15 +1084,16 @@ return SPECTRE_V2_USER_CMD_AUTO; } -static inline bool spectre_v2_in_eibrs_mode(enum spectre_v2_mitigation mode) +static inline bool spectre_v2_in_ibrs_mode(enum spectre_v2_mitigation mode) { - return (mode == SPECTRE_V2_EIBRS || - mode == SPECTRE_V2_EIBRS_RETPOLINE || - mode == SPECTRE_V2_EIBRS_LFENCE); + return mode == SPECTRE_V2_IBRS || + mode == SPECTRE_V2_EIBRS || + mode == SPECTRE_V2_EIBRS_RETPOLINE || + mode == SPECTRE_V2_EIBRS_LFENCE; } static void __init -spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd) +spectre_v2_user_select_mitigation(void) { enum spectre_v2_user_mitigation mode = SPECTRE_V2_USER_NONE; bool smt_possible = IS_ENABLED(CONFIG_SMP); @@ -914,7 +1106,7 @@ cpu_smt_control == CPU_SMT_NOT_SUPPORTED) smt_possible = false; - cmd = spectre_v2_parse_user_cmdline(v2_cmd); + cmd = spectre_v2_parse_user_cmdline(); switch (cmd) { case SPECTRE_V2_USER_CMD_NONE: goto set_mode; @@ -962,12 +1154,12 @@ } /* - * If no STIBP, enhanced IBRS is enabled or SMT impossible, STIBP is not - * required. + * If no STIBP, IBRS or enhanced IBRS is enabled, or SMT impossible, + * STIBP is not required. */ if (!boot_cpu_has(X86_FEATURE_STIBP) || !smt_possible || - spectre_v2_in_eibrs_mode(spectre_v2_enabled)) + spectre_v2_in_ibrs_mode(spectre_v2_enabled)) return; /* @@ -979,6 +1171,13 @@ boot_cpu_has(X86_FEATURE_AMD_STIBP_ALWAYS_ON)) mode = SPECTRE_V2_USER_STRICT_PREFERRED; + if (retbleed_mitigation == RETBLEED_MITIGATION_UNRET) { + if (mode != SPECTRE_V2_USER_STRICT && + mode != SPECTRE_V2_USER_STRICT_PREFERRED) + pr_info("Selecting STIBP always-on mode to complement retbleed mitigation\n"); + mode = SPECTRE_V2_USER_STRICT_PREFERRED; + } + spectre_v2_user_stibp = mode; set_mode: @@ -992,6 +1191,7 @@ [SPECTRE_V2_EIBRS] = "Mitigation: Enhanced IBRS", [SPECTRE_V2_EIBRS_LFENCE] = "Mitigation: Enhanced IBRS + LFENCE", [SPECTRE_V2_EIBRS_RETPOLINE] = "Mitigation: Enhanced IBRS + Retpolines", + [SPECTRE_V2_IBRS] = "Mitigation: IBRS", }; static const struct { @@ -1009,6 +1209,7 @@ { "eibrs,lfence", SPECTRE_V2_CMD_EIBRS_LFENCE, false }, { "eibrs,retpoline", SPECTRE_V2_CMD_EIBRS_RETPOLINE, false }, { "auto", SPECTRE_V2_CMD_AUTO, false }, + { "ibrs", SPECTRE_V2_CMD_IBRS, false }, }; static void __init spec_v2_print_cond(const char *reason, bool secure) @@ -1073,0 +1275,24 @@ + if (cmd == SPECTRE_V2_CMD_IBRS && !IS_ENABLED(CONFIG_CPU_IBRS_ENTRY)) { + pr_err("%s selected but not compiled in. Switching to AUTO select\n", + mitigation_options[i].option); + return SPECTRE_V2_CMD_AUTO; + } + + if (cmd == SPECTRE_V2_CMD_IBRS && boot_cpu_data.x86_vendor != X86_VENDOR_INTEL) { + pr_err("%s selected but not Intel CPU. Switching to AUTO select\n", + mitigation_options[i].option); + return SPECTRE_V2_CMD_AUTO; + } + + if (cmd == SPECTRE_V2_CMD_IBRS && !boot_cpu_has(X86_FEATURE_IBRS)) { + pr_err("%s selected but CPU doesn't have IBRS. Switching to AUTO select\n", + mitigation_options[i].option); + return SPECTRE_V2_CMD_AUTO; + } + + if (cmd == SPECTRE_V2_CMD_IBRS && boot_cpu_has(X86_FEATURE_XENPV)) { + pr_err("%s selected but running as XenPV guest. Switching to AUTO select\n", + mitigation_options[i].option); + return SPECTRE_V2_CMD_AUTO; + } + @@ -1086,6 +1311,22 @@ return SPECTRE_V2_RETPOLINE; } +/* Disable in-kernel use of non-RSB RET predictors */ +static void __init spec_ctrl_disable_kernel_rrsba(void) +{ + u64 ia32_cap; + + if (!boot_cpu_has(X86_FEATURE_RRSBA_CTRL)) + return; + + ia32_cap = x86_read_arch_cap_msr(); + + if (ia32_cap & ARCH_CAP_RRSBA) { + x86_spec_ctrl_base |= SPEC_CTRL_RRSBA_DIS_S; + write_spec_ctrl_current(x86_spec_ctrl_base, true); + } +} + static void __init spectre_v2_select_mitigation(void) { enum spectre_v2_mitigation_cmd cmd = spectre_v2_parse_cmdline(); @@ -1110,6 +1351,15 @@ break; } + if (IS_ENABLED(CONFIG_CPU_IBRS_ENTRY) && + boot_cpu_has_bug(X86_BUG_RETBLEED) && + retbleed_cmd != RETBLEED_CMD_OFF && + boot_cpu_has(X86_FEATURE_IBRS) && + boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) { + mode = SPECTRE_V2_IBRS; + break; + } + mode = spectre_v2_select_retpoline(); break; @@ -1126,6 +1376,10 @@ mode = spectre_v2_select_retpoline(); break; + case SPECTRE_V2_CMD_IBRS: + mode = SPECTRE_V2_IBRS; + break; + case SPECTRE_V2_CMD_EIBRS: mode = SPECTRE_V2_EIBRS; break; @@ -1142,10 +1396,9 @@ if (mode == SPECTRE_V2_EIBRS && unprivileged_ebpf_enabled()) pr_err(SPECTRE_V2_EIBRS_EBPF_MSG); - if (spectre_v2_in_eibrs_mode(mode)) { - /* Force it so VMEXIT will restore correctly */ + if (spectre_v2_in_ibrs_mode(mode)) { x86_spec_ctrl_base |= SPEC_CTRL_IBRS; - wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); + write_spec_ctrl_current(x86_spec_ctrl_base, true); } switch (mode) { @@ -1153,6 +1406,10 @@ case SPECTRE_V2_EIBRS: break; + case SPECTRE_V2_IBRS: + setup_force_cpu_cap(X86_FEATURE_KERNEL_IBRS); + break; + case SPECTRE_V2_LFENCE: case SPECTRE_V2_EIBRS_LFENCE: setup_force_cpu_cap(X86_FEATURE_RETPOLINE_LFENCE); @@ -1164,43 +1421,107 @@ break; } + /* + * Disable alternate RSB predictions in kernel when indirect CALLs and + * JMPs gets protection against BHI and Intramode-BTI, but RET + * prediction from a non-RSB predictor is still a risk. + */ + if (mode == SPECTRE_V2_EIBRS_LFENCE || + mode == SPECTRE_V2_EIBRS_RETPOLINE || + mode == SPECTRE_V2_RETPOLINE) + spec_ctrl_disable_kernel_rrsba(); + spectre_v2_enabled = mode; pr_info("%s\n", spectre_v2_strings[mode]); /* - * If spectre v2 protection has been enabled, unconditionally fill - * RSB during a context switch; this protects against two independent - * issues: + * If Spectre v2 protection has been enabled, fill the RSB during a + * context switch. In general there are two types of RSB attacks + * across context switches, for which the CALLs/RETs may be unbalanced. + * + * 1) RSB underflow + * + * Some Intel parts have "bottomless RSB". When the RSB is empty, + * speculated return targets may come from the branch predictor, + * which could have a user-poisoned BTB or BHB entry. + * + * AMD has it even worse: *all* returns are speculated from the BTB, + * regardless of the state of the RSB. + * + * When IBRS or eIBRS is enabled, the "user -> kernel" attack + * scenario is mitigated by the IBRS branch prediction isolation + * properties, so the RSB buffer filling wouldn't be necessary to + * protect against this type of attack. + * + * The "user -> user" attack scenario is mitigated by RSB filling. + * + * 2) Poisoned RSB entry + * + * If the 'next' in-kernel return stack is shorter than 'prev', + * 'next' could be tricked into speculating with a user-poisoned RSB + * entry. + * + * The "user -> kernel" attack scenario is mitigated by SMEP and + * eIBRS. + * + * The "user -> user" scenario, also known as SpectreBHB, requires + * RSB clearing. + * + * So to mitigate all cases, unconditionally fill RSB on context + * switches. * - * - RSB underflow (and switch to BTB) on Skylake+ - * - SpectreRSB variant of spectre v2 on X86_BUG_SPECTRE_V2 CPUs + * FIXME: Is this pointless for retbleed-affected AMD? */ setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW); pr_info("Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\n"); /* - * Retpoline means the kernel is safe because it has no indirect - * branches. Enhanced IBRS protects firmware too, so, enable restricted - * speculation around firmware calls only when Enhanced IBRS isn't - * supported. + * Similar to context switches, there are two types of RSB attacks + * after vmexit: + * + * 1) RSB underflow + * + * 2) Poisoned RSB entry + * + * When retpoline is enabled, both are mitigated by filling/clearing + * the RSB. + * + * When IBRS is enabled, while #1 would be mitigated by the IBRS branch + * prediction isolation protections, RSB still needs to be cleared + * because of #2. Note that SMEP provides no protection here, unlike + * user-space-poisoned RSB entries. + * + * eIBRS, on the other hand, has RSB-poisoning protections, so it + * doesn't need RSB clearing after vmexit. + */ + if (boot_cpu_has(X86_FEATURE_RETPOLINE) || + boot_cpu_has(X86_FEATURE_KERNEL_IBRS)) + setup_force_cpu_cap(X86_FEATURE_RSB_VMEXIT); + + /* + * Retpoline protects the kernel, but doesn't protect firmware. IBRS + * and Enhanced IBRS protect firmware too, so enable IBRS around + * firmware calls only when IBRS / Enhanced IBRS aren't otherwise + * enabled. * * Use "mode" to check Enhanced IBRS instead of boot_cpu_has(), because * the user might select retpoline on the kernel command line and if * the CPU supports Enhanced IBRS, kernel might un-intentionally not * enable IBRS around firmware calls. */ - if (boot_cpu_has(X86_FEATURE_IBRS) && !spectre_v2_in_eibrs_mode(mode)) { + if (boot_cpu_has(X86_FEATURE_IBRS) && !spectre_v2_in_ibrs_mode(mode)) { setup_force_cpu_cap(X86_FEATURE_USE_IBRS_FW); pr_info("Enabling Restricted Speculation for firmware calls\n"); } /* Set up IBPB and STIBP depending on the general spectre V2 command */ - spectre_v2_user_select_mitigation(cmd); + spectre_v2_cmd = cmd; } static void update_stibp_msr(void * __unused) { - wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); + u64 val = spec_ctrl_current() | (x86_spec_ctrl_base & SPEC_CTRL_STIBP); + write_spec_ctrl_current(val, true); } /* Update x86_spec_ctrl_base in case SMT state changed. */ @@ -1417,16 +1738,6 @@ } /* - * If SSBD is controlled by the SPEC_CTRL MSR, then set the proper - * bit in the mask to allow guests to use the mitigation even in the - * case where the host does not enable it. - */ - if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) || - static_cpu_has(X86_FEATURE_AMD_SSBD)) { - x86_spec_ctrl_mask |= SPEC_CTRL_SSBD; - } - - /* * We have three CPU feature flags that are in play here: * - X86_BUG_SPEC_STORE_BYPASS - CPU is susceptible. * - X86_FEATURE_SSBD - CPU is able to turn off speculative store bypass @@ -1443,7 +1754,7 @@ x86_amd_ssb_disable(); } else { x86_spec_ctrl_base |= SPEC_CTRL_SSBD; - wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); + write_spec_ctrl_current(x86_spec_ctrl_base, true); } } @@ -1694,7 +2005,7 @@ void x86_spec_ctrl_setup_ap(void) { if (boot_cpu_has(X86_FEATURE_MSR_SPEC_CTRL)) - wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); + write_spec_ctrl_current(x86_spec_ctrl_base, true); if (ssb_mode == SPEC_STORE_BYPASS_DISABLE) x86_amd_ssb_disable(); @@ -1931,7 +2242,7 @@ static char *stibp_state(void) { - if (spectre_v2_in_eibrs_mode(spectre_v2_enabled)) + if (spectre_v2_in_ibrs_mode(spectre_v2_enabled)) return ""; switch (spectre_v2_user_stibp) { @@ -1987,6 +2298,24 @@ return sprintf(buf, "%s\n", srbds_strings[srbds_mitigation]); } +static ssize_t retbleed_show_state(char *buf) +{ + if (retbleed_mitigation == RETBLEED_MITIGATION_UNRET) { + if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD && + boot_cpu_data.x86_vendor != X86_VENDOR_HYGON) + return sprintf(buf, "Vulnerable: untrained return thunk on non-Zen uarch\n"); + + return sprintf(buf, "%s; SMT %s\n", + retbleed_strings[retbleed_mitigation], + !sched_smt_active() ? "disabled" : + spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT || + spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT_PREFERRED ? + "enabled with STIBP protection" : "vulnerable"); + } + + return sprintf(buf, "%s\n", retbleed_strings[retbleed_mitigation]); +} + static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr, char *buf, unsigned int bug) { @@ -2032,6 +2361,9 @@ case X86_BUG_MMIO_STALE_DATA: return mmio_stale_data_show_state(buf); + case X86_BUG_RETBLEED: + return retbleed_show_state(buf); + default: break; } @@ -2090,2 +2422,7 @@ } + +ssize_t cpu_show_retbleed(struct device *dev, struct device_attribute *attr, char *buf) +{ + return cpu_show_common(dev, attr, buf, X86_BUG_RETBLEED); +} #endif diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/common.c linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/common.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/common.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/common.c @@ -1095,48 +1095,60 @@ {} }; +#define VULNBL(vendor, family, model, blacklist) \ + X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, blacklist) + #define VULNBL_INTEL_STEPPINGS(model, steppings, issues) \ X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(INTEL, 6, \ INTEL_FAM6_##model, steppings, \ X86_FEATURE_ANY, issues) +#define VULNBL_AMD(family, blacklist) \ + VULNBL(AMD, family, X86_MODEL_ANY, blacklist) + +#define VULNBL_HYGON(family, blacklist) \ + VULNBL(HYGON, family, X86_MODEL_ANY, blacklist) + #define SRBDS BIT(0) /* CPU is affected by X86_BUG_MMIO_STALE_DATA */ #define MMIO BIT(1) /* CPU is affected by Shared Buffers Data Sampling (SBDS), a variant of X86_BUG_MMIO_STALE_DATA */ #define MMIO_SBDS BIT(2) +/* CPU is affected by RETbleed, speculating where you would not expect it */ +#define RETBLEED BIT(3) static const struct x86_cpu_id cpu_vuln_blacklist[] __initconst = { VULNBL_INTEL_STEPPINGS(IVYBRIDGE, X86_STEPPING_ANY, SRBDS), VULNBL_INTEL_STEPPINGS(HASWELL, X86_STEPPING_ANY, SRBDS), VULNBL_INTEL_STEPPINGS(HASWELL_L, X86_STEPPING_ANY, SRBDS), VULNBL_INTEL_STEPPINGS(HASWELL_G, X86_STEPPING_ANY, SRBDS), - VULNBL_INTEL_STEPPINGS(HASWELL_X, BIT(2) | BIT(4), MMIO), - VULNBL_INTEL_STEPPINGS(BROADWELL_D, X86_STEPPINGS(0x3, 0x5), MMIO), + VULNBL_INTEL_STEPPINGS(HASWELL_X, X86_STEPPING_ANY, MMIO), + VULNBL_INTEL_STEPPINGS(BROADWELL_D, X86_STEPPING_ANY, MMIO), VULNBL_INTEL_STEPPINGS(BROADWELL_G, X86_STEPPING_ANY, SRBDS), VULNBL_INTEL_STEPPINGS(BROADWELL_X, X86_STEPPING_ANY, MMIO), VULNBL_INTEL_STEPPINGS(BROADWELL, X86_STEPPING_ANY, SRBDS), - VULNBL_INTEL_STEPPINGS(SKYLAKE_L, X86_STEPPINGS(0x3, 0x3), SRBDS | MMIO), - VULNBL_INTEL_STEPPINGS(SKYLAKE_L, X86_STEPPING_ANY, SRBDS), - VULNBL_INTEL_STEPPINGS(SKYLAKE_X, BIT(3) | BIT(4) | BIT(6) | - BIT(7) | BIT(0xB), MMIO), - VULNBL_INTEL_STEPPINGS(SKYLAKE, X86_STEPPINGS(0x3, 0x3), SRBDS | MMIO), - VULNBL_INTEL_STEPPINGS(SKYLAKE, X86_STEPPING_ANY, SRBDS), - VULNBL_INTEL_STEPPINGS(KABYLAKE_L, X86_STEPPINGS(0x9, 0xC), SRBDS | MMIO), - VULNBL_INTEL_STEPPINGS(KABYLAKE_L, X86_STEPPINGS(0x0, 0x8), SRBDS), - VULNBL_INTEL_STEPPINGS(KABYLAKE, X86_STEPPINGS(0x9, 0xD), SRBDS | MMIO), - VULNBL_INTEL_STEPPINGS(KABYLAKE, X86_STEPPINGS(0x0, 0x8), SRBDS), - VULNBL_INTEL_STEPPINGS(ICELAKE_L, X86_STEPPINGS(0x5, 0x5), MMIO | MMIO_SBDS), - VULNBL_INTEL_STEPPINGS(ICELAKE_D, X86_STEPPINGS(0x1, 0x1), MMIO), - VULNBL_INTEL_STEPPINGS(ICELAKE_X, X86_STEPPINGS(0x4, 0x6), MMIO), - VULNBL_INTEL_STEPPINGS(COMETLAKE, BIT(2) | BIT(3) | BIT(5), MMIO | MMIO_SBDS), - VULNBL_INTEL_STEPPINGS(COMETLAKE_L, X86_STEPPINGS(0x1, 0x1), MMIO | MMIO_SBDS), - VULNBL_INTEL_STEPPINGS(COMETLAKE_L, X86_STEPPINGS(0x0, 0x0), MMIO), - VULNBL_INTEL_STEPPINGS(LAKEFIELD, X86_STEPPINGS(0x1, 0x1), MMIO | MMIO_SBDS), - VULNBL_INTEL_STEPPINGS(ROCKETLAKE, X86_STEPPINGS(0x1, 0x1), MMIO), - VULNBL_INTEL_STEPPINGS(ATOM_TREMONT, X86_STEPPINGS(0x1, 0x1), MMIO | MMIO_SBDS), + VULNBL_INTEL_STEPPINGS(SKYLAKE_L, X86_STEPPING_ANY, SRBDS | MMIO | RETBLEED), + VULNBL_INTEL_STEPPINGS(SKYLAKE_X, X86_STEPPING_ANY, MMIO | RETBLEED), + VULNBL_INTEL_STEPPINGS(SKYLAKE, X86_STEPPING_ANY, SRBDS | MMIO | RETBLEED), + VULNBL_INTEL_STEPPINGS(KABYLAKE_L, X86_STEPPING_ANY, SRBDS | MMIO | RETBLEED), + VULNBL_INTEL_STEPPINGS(KABYLAKE, X86_STEPPING_ANY, SRBDS | MMIO | RETBLEED), + VULNBL_INTEL_STEPPINGS(CANNONLAKE_L, X86_STEPPING_ANY, RETBLEED), + VULNBL_INTEL_STEPPINGS(ICELAKE_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED), + VULNBL_INTEL_STEPPINGS(ICELAKE_D, X86_STEPPING_ANY, MMIO), + VULNBL_INTEL_STEPPINGS(ICELAKE_X, X86_STEPPING_ANY, MMIO), + VULNBL_INTEL_STEPPINGS(COMETLAKE, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED), + VULNBL_INTEL_STEPPINGS(COMETLAKE_L, X86_STEPPINGS(0x0, 0x0), MMIO | RETBLEED), + VULNBL_INTEL_STEPPINGS(COMETLAKE_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED), + VULNBL_INTEL_STEPPINGS(LAKEFIELD, X86_STEPPING_ANY, MMIO | MMIO_SBDS | RETBLEED), + VULNBL_INTEL_STEPPINGS(ROCKETLAKE, X86_STEPPING_ANY, MMIO | RETBLEED), + VULNBL_INTEL_STEPPINGS(ATOM_TREMONT, X86_STEPPING_ANY, MMIO | MMIO_SBDS), VULNBL_INTEL_STEPPINGS(ATOM_TREMONT_D, X86_STEPPING_ANY, MMIO), - VULNBL_INTEL_STEPPINGS(ATOM_TREMONT_L, X86_STEPPINGS(0x0, 0x0), MMIO | MMIO_SBDS), + VULNBL_INTEL_STEPPINGS(ATOM_TREMONT_L, X86_STEPPING_ANY, MMIO | MMIO_SBDS), + + VULNBL_AMD(0x15, RETBLEED), + VULNBL_AMD(0x16, RETBLEED), + VULNBL_AMD(0x17, RETBLEED), + VULNBL_HYGON(0x18, RETBLEED), {} }; @@ -1238,6 +1250,11 @@ !arch_cap_mmio_immune(ia32_cap)) setup_force_cpu_bug(X86_BUG_MMIO_STALE_DATA); + if (!cpu_has(c, X86_FEATURE_BTC_NO)) { + if (cpu_matches(cpu_vuln_blacklist, RETBLEED) || (ia32_cap & ARCH_CAP_RSBA)) + setup_force_cpu_bug(X86_BUG_RETBLEED); + } + if (cpu_matches(cpu_vuln_whitelist, NO_MELTDOWN)) return; diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/cpu.h linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/cpu.h --- linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/cpu.h +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/cpu.h @@ -61,6 +61,8 @@ static inline void tsx_ap_init(void) { } #endif /* CONFIG_CPU_SUP_INTEL */ +extern void init_spectral_chicken(struct cpuinfo_x86 *c); + extern void get_cpu_cap(struct cpuinfo_x86 *c); extern void get_cpu_address_sizes(struct cpuinfo_x86 *c); extern void cpu_detect_cache_sizes(struct cpuinfo_x86 *c); diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/hygon.c linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/hygon.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/hygon.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/hygon.c @@ -302,6 +302,12 @@ /* get apicid instead of initial apic id from cpuid */ c->apicid = hard_smp_processor_id(); + /* + * XXX someone from Hygon needs to confirm this DTRT + * + init_spectral_chicken(c); + */ + set_cpu_cap(c, X86_FEATURE_ZEN); set_cpu_cap(c, X86_FEATURE_CPB); diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/head_32.S linux-hwe-5.15-5.15.0/arch/x86/kernel/head_32.S --- linux-hwe-5.15-5.15.0/arch/x86/kernel/head_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/head_32.S @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -342,7 +343,7 @@ __INIT setup_once: andl $0,setup_once_ref /* Once is enough, thanks */ - ret + RET SYM_FUNC_START(early_idt_handler_array) # 36(%esp) %eflags diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/kvm.c linux-hwe-5.15-5.15.0/arch/x86/kernel/kvm.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/kvm.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/kvm.c @@ -935,7 +935,7 @@ "movq __per_cpu_offset(,%rdi,8), %rax;" "cmpb $0, " __stringify(KVM_STEAL_TIME_preempted) "+steal_time(%rax);" "setne %al;" -"ret;" +ASM_RET ".size __raw_callee_save___kvm_vcpu_is_preempted, .-__raw_callee_save___kvm_vcpu_is_preempted;" ".popsection"); diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/module.c linux-hwe-5.15-5.15.0/arch/x86/kernel/module.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/module.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/module.c @@ -253,7 +253,7 @@ { const Elf_Shdr *s, *text = NULL, *alt = NULL, *locks = NULL, *para = NULL, *orc = NULL, *orc_ip = NULL, - *retpolines = NULL; + *retpolines = NULL, *returns = NULL; char *secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; for (s = sechdrs; s < sechdrs + hdr->e_shnum; s++) { @@ -271,6 +271,8 @@ orc_ip = s; if (!strcmp(".retpoline_sites", secstrings + s->sh_name)) retpolines = s; + if (!strcmp(".return_sites", secstrings + s->sh_name)) + returns = s; } /* @@ -285,6 +287,10 @@ void *rseg = (void *)retpolines->sh_addr; apply_retpolines(rseg, rseg + retpolines->sh_size); } + if (returns) { + void *rseg = (void *)returns->sh_addr; + apply_returns(rseg, rseg + returns->sh_size); + } if (alt) { /* patch .altinstructions */ void *aseg = (void *)alt->sh_addr; diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/process.c linux-hwe-5.15-5.15.0/arch/x86/kernel/process.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/process.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/process.c @@ -599,7 +599,7 @@ } if (updmsr) - wrmsrl(MSR_IA32_SPEC_CTRL, msr); + write_spec_ctrl_current(msr, false); } static unsigned long speculation_ctrl_update_tif(struct task_struct *tsk) diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/relocate_kernel_32.S linux-hwe-5.15-5.15.0/arch/x86/kernel/relocate_kernel_32.S --- linux-hwe-5.15-5.15.0/arch/x86/kernel/relocate_kernel_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/relocate_kernel_32.S @@ -7,11 +7,13 @@ #include #include #include +#include #include #include /* - * Must be relocatable PIC code callable as a C function + * Must be relocatable PIC code callable as a C function, in particular + * there must be a plain RET and not jump to return thunk. */ #define PTR(x) (x << 2) @@ -92,7 +94,9 @@ movl %edi, %eax addl $(identity_mapped - relocate_kernel), %eax pushl %eax + ANNOTATE_UNRET_SAFE ret + int3 SYM_CODE_END(relocate_kernel) SYM_CODE_START_LOCAL_NOALIGN(identity_mapped) @@ -160,7 +164,9 @@ xorl %edx, %edx xorl %esi, %esi xorl %ebp, %ebp + ANNOTATE_UNRET_SAFE ret + int3 1: popl %edx movl CP_PA_SWAP_PAGE(%edi), %esp @@ -192,7 +198,9 @@ movl %edi, %eax addl $(virtual_mapped - relocate_kernel), %eax pushl %eax + ANNOTATE_UNRET_SAFE ret + int3 SYM_CODE_END(identity_mapped) SYM_CODE_START_LOCAL_NOALIGN(virtual_mapped) @@ -210,7 +218,9 @@ popl %edi popl %esi popl %ebx + ANNOTATE_UNRET_SAFE ret + int3 SYM_CODE_END(virtual_mapped) /* Do the copies */ @@ -273,7 +283,9 @@ popl %edi popl %ebx popl %ebp + ANNOTATE_UNRET_SAFE ret + int3 SYM_CODE_END(swap_pages) .globl kexec_control_code_size diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/static_call.c linux-hwe-5.15-5.15.0/arch/x86/kernel/static_call.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/static_call.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/static_call.c @@ -12,11 +12,21 @@ }; /* + * ud1 %esp, %ecx - a 3 byte #UD that is unique to trampolines, chosen such + * that there is no false-positive trampoline identification while also being a + * speculation stop. + */ +static const u8 tramp_ud[] = { 0x0f, 0xb9, 0xcc }; + +/* * cs cs cs xorl %eax, %eax - a single 5 byte instruction that clears %[er]ax */ static const u8 xor5rax[] = { 0x2e, 0x2e, 0x2e, 0x31, 0xc0 }; -static void __ref __static_call_transform(void *insn, enum insn_type type, void *func) +static const u8 retinsn[] = { RET_INSN_OPCODE, 0xcc, 0xcc, 0xcc, 0xcc }; + +static void __ref __static_call_transform(void *insn, enum insn_type type, + void *func, bool modinit) { const void *emulate = NULL; int size = CALL_INSN_SIZE; @@ -41,15 +51,17 @@ break; case RET: - code = text_gen_insn(RET_INSN_OPCODE, insn, func); - size = RET_INSN_SIZE; + if (cpu_feature_enabled(X86_FEATURE_RETHUNK)) + code = text_gen_insn(JMP32_INSN_OPCODE, insn, &__x86_return_thunk); + else + code = &retinsn; break; } if (memcmp(insn, code, size) == 0) return; - if (unlikely(system_state == SYSTEM_BOOTING)) + if (system_state == SYSTEM_BOOTING || modinit) return text_poke_early(insn, code, size); text_poke_bp(insn, code, size, emulate); @@ -100,11 +112,39 @@ - __static_call_transform(tramp, __sc_insn(!func, true), func); + __static_call_transform(tramp, __sc_insn(!func, true), func, false); } if (IS_ENABLED(CONFIG_HAVE_STATIC_CALL_INLINE) && site) { __static_call_validate(site, tail); - __static_call_transform(site, __sc_insn(!func, tail), func); + __static_call_transform(site, __sc_insn(!func, tail), func, false); } mutex_unlock(&text_mutex); } EXPORT_SYMBOL_GPL(arch_static_call_transform); + +#ifdef CONFIG_RETHUNK +/* + * This is called by apply_returns() to fix up static call trampolines, + * specifically ARCH_DEFINE_STATIC_CALL_NULL_TRAMP which is recorded as + * having a return trampoline. + * + * The problem is that static_call() is available before determining + * X86_FEATURE_RETHUNK and, by implication, running alternatives. + * + * This means that __static_call_transform() above can have overwritten the + * return trampoline and we now need to fix things up to be consistent. + */ +bool __static_call_fixup(void *tramp, u8 op, void *dest) +{ + if (memcmp(tramp+5, tramp_ud, 3)) { + /* Not a trampoline site, not our problem. */ + return false; + } + + mutex_lock(&text_mutex); + if (op == RET_INSN_OPCODE || dest == &__x86_return_thunk) + __static_call_transform(tramp, RET, NULL, true); + mutex_unlock(&text_mutex); + + return true; +} +#endif diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/traps.c linux-hwe-5.15-5.15.0/arch/x86/kernel/traps.c --- linux-hwe-5.15-5.15.0/arch/x86/kernel/traps.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/traps.c @@ -762,14 +762,10 @@ } #endif -struct bad_iret_stack { - void *error_entry_ret; - struct pt_regs regs; -}; - -asmlinkage __visible noinstr -struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s) +asmlinkage __visible noinstr struct pt_regs *fixup_bad_iret(struct pt_regs *bad_regs) { + struct pt_regs tmp, *new_stack; + /* * This is called from entry_64.S early in handling a fault * caused by a bad iret to user mode. To handle the fault @@ -778,19 +774,18 @@ * just below the IRET frame) and we want to pretend that the * exception came from the IRET target. */ - struct bad_iret_stack tmp, *new_stack = - (struct bad_iret_stack *)__this_cpu_read(cpu_tss_rw.x86_tss.sp0) - 1; + new_stack = (struct pt_regs *)__this_cpu_read(cpu_tss_rw.x86_tss.sp0) - 1; /* Copy the IRET target to the temporary storage. */ - __memcpy(&tmp.regs.ip, (void *)s->regs.sp, 5*8); + __memcpy(&tmp.ip, (void *)bad_regs->sp, 5*8); /* Copy the remainder of the stack from the current stack. */ - __memcpy(&tmp, s, offsetof(struct bad_iret_stack, regs.ip)); + __memcpy(&tmp, bad_regs, offsetof(struct pt_regs, ip)); /* Update the entry stack */ __memcpy(new_stack, &tmp, sizeof(tmp)); - BUG_ON(!user_mode(&new_stack->regs)); + BUG_ON(!user_mode(new_stack)); return new_stack; } #endif diff -u linux-hwe-5.15-5.15.0/arch/x86/kernel/vmlinux.lds.S linux-hwe-5.15-5.15.0/arch/x86/kernel/vmlinux.lds.S --- linux-hwe-5.15-5.15.0/arch/x86/kernel/vmlinux.lds.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/vmlinux.lds.S @@ -142,7 +142,7 @@ #ifdef CONFIG_RETPOLINE __indirect_thunk_start = .; - *(.text.__x86.indirect_thunk) + *(.text.__x86.*) __indirect_thunk_end = .; #endif } :text =0xcccc @@ -284,6 +284,13 @@ *(.retpoline_sites) __retpoline_sites_end = .; } + + . = ALIGN(8); + .return_sites : AT(ADDR(.return_sites) - LOAD_OFFSET) { + __return_sites = .; + *(.return_sites) + __return_sites_end = .; + } #endif /* diff -u linux-hwe-5.15-5.15.0/arch/x86/kvm/emulate.c linux-hwe-5.15-5.15.0/arch/x86/kvm/emulate.c --- linux-hwe-5.15-5.15.0/arch/x86/kvm/emulate.c +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/emulate.c @@ -187,9 +187,6 @@ #define X8(x...) X4(x), X4(x) #define X16(x...) X8(x), X8(x) -#define NR_FASTOP (ilog2(sizeof(ulong)) + 1) -#define FASTOP_SIZE 8 - struct opcode { u64 flags : 56; u64 intercept : 8; @@ -303,9 +300,15 @@ * Moreover, they are all exactly FASTOP_SIZE bytes long, so functions for * different operand sizes can be reached by calculation, rather than a jump * table (which would be bigger than the code). + * + * The 16 byte alignment, considering 5 bytes for the RET thunk, 3 for ENDBR + * and 1 for the straight line speculation INT3, leaves 7 bytes for the + * body of the function. Currently none is larger than 4. */ static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop); +#define FASTOP_SIZE 16 + #define __FOP_FUNC(name) \ ".align " __stringify(FASTOP_SIZE) " \n\t" \ ".type " name ", @function \n\t" \ @@ -315,19 +318,21 @@ __FOP_FUNC(#name) #define __FOP_RET(name) \ - "ret \n\t" \ + ASM_RET \ ".size " name ", .-" name "\n\t" #define FOP_RET(name) \ __FOP_RET(#name) -#define FOP_START(op) \ +#define __FOP_START(op, align) \ extern void em_##op(struct fastop *fake); \ asm(".pushsection .text, \"ax\" \n\t" \ ".global em_" #op " \n\t" \ - ".align " __stringify(FASTOP_SIZE) " \n\t" \ + ".align " __stringify(align) " \n\t" \ "em_" #op ":\n\t" +#define FOP_START(op) __FOP_START(op, FASTOP_SIZE) + #define FOP_END \ ".popsection") @@ -427,18 +432,29 @@ FOP_END /* Special case for SETcc - 1 instruction per cc */ + +/* + * Depending on .config the SETcc functions look like: + * + * SETcc %al [3 bytes] + * RET | JMP __x86_return_thunk [1,5 bytes; CONFIG_RETHUNK] + * INT3 [1 byte; CONFIG_SLS] + */ +#define SETCC_ALIGN 16 + #define FOP_SETCC(op) \ - ".align 4 \n\t" \ + ".align " __stringify(SETCC_ALIGN) " \n\t" \ ".type " #op ", @function \n\t" \ #op ": \n\t" \ #op " %al \n\t" \ - __FOP_RET(#op) + __FOP_RET(#op) \ + ".skip " __stringify(SETCC_ALIGN) " - (.-" #op "), 0xcc \n\t" asm(".pushsection .fixup, \"ax\"\n" - "kvm_fastop_exception: xor %esi, %esi; ret\n" + "kvm_fastop_exception: xor %esi, %esi; " ASM_RET ".popsection"); -FOP_START(setcc) +__FOP_START(setcc, SETCC_ALIGN) FOP_SETCC(seto) FOP_SETCC(setno) FOP_SETCC(setc) @@ -1053,7 +1069,7 @@ static __always_inline u8 test_cc(unsigned int condition, unsigned long flags) { u8 rc; - void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf); + void (*fop)(void) = (void *)em_setcc + SETCC_ALIGN * (condition & 0xf); flags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF; asm("push %[flags]; popf; " CALL_NOSPEC diff -u linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/nested.c linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/nested.c --- linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/nested.c +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/nested.c @@ -3077,7 +3077,7 @@ } vm_fail = __vmx_vcpu_run(vmx, (unsigned long *)&vcpu->arch.regs, - vmx->loaded_vmcs->launched); + __vmx_vcpu_run_flags(vmx)); if (vmx->msr_autoload.host.nr) vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, vmx->msr_autoload.host.nr); diff -u linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx.c linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx.c --- linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx.c +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx.c @@ -380,9 +380,9 @@ if (!vmx->disable_fb_clear) return; - rdmsrl(MSR_IA32_MCU_OPT_CTRL, msr); + msr = __rdmsr(MSR_IA32_MCU_OPT_CTRL); msr |= FB_CLEAR_DIS; - wrmsrl(MSR_IA32_MCU_OPT_CTRL, msr); + native_wrmsrl(MSR_IA32_MCU_OPT_CTRL, msr); /* Cache the MSR value to avoid reading it later */ vmx->msr_ia32_mcu_opt_ctrl = msr; } @@ -393,7 +393,7 @@ return; vmx->msr_ia32_mcu_opt_ctrl &= ~FB_CLEAR_DIS; - wrmsrl(MSR_IA32_MCU_OPT_CTRL, vmx->msr_ia32_mcu_opt_ctrl); + native_wrmsrl(MSR_IA32_MCU_OPT_CTRL, vmx->msr_ia32_mcu_opt_ctrl); } static void vmx_update_fb_clear_dis(struct kvm_vcpu *vcpu, struct vcpu_vmx *vmx) @@ -837,2 +837,20 @@ +unsigned int __vmx_vcpu_run_flags(struct vcpu_vmx *vmx) +{ + unsigned int flags = 0; + + if (vmx->loaded_vmcs->launched) + flags |= VMX_RUN_VMRESUME; + + /* + * If writes to the SPEC_CTRL MSR aren't intercepted, the guest is free + * to change it directly without causing a vmexit. In that case read + * it after vmexit and store it in vmx->spec_ctrl. + */ + if (unlikely(!msr_write_intercepted(vmx, MSR_IA32_SPEC_CTRL))) + flags |= VMX_RUN_SAVE_SPEC_CTRL; + + return flags; +} + static void clear_atomic_switch_msr_special(struct vcpu_vmx *vmx, @@ -6654,6 +6672,31 @@ } } +void noinstr vmx_spec_ctrl_restore_host(struct vcpu_vmx *vmx, + unsigned int flags) +{ + u64 hostval = this_cpu_read(x86_spec_ctrl_current); + + if (!cpu_feature_enabled(X86_FEATURE_MSR_SPEC_CTRL)) + return; + + if (flags & VMX_RUN_SAVE_SPEC_CTRL) + vmx->spec_ctrl = __rdmsr(MSR_IA32_SPEC_CTRL); + + /* + * If the guest/host SPEC_CTRL values differ, restore the host value. + * + * For legacy IBRS, the IBRS bit always needs to be written after + * transitioning from a less privileged predictor mode, regardless of + * whether the guest/host values differ. + */ + if (cpu_feature_enabled(X86_FEATURE_KERNEL_IBRS) || + vmx->spec_ctrl != hostval) + native_wrmsrl(MSR_IA32_SPEC_CTRL, hostval); + + barrier_nospec(); +} + static fastpath_t vmx_exit_handlers_fastpath(struct kvm_vcpu *vcpu) { switch (to_vmx(vcpu)->exit_reason.basic) { @@ -6667,7 +6710,8 @@ } static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu, - struct vcpu_vmx *vmx) + struct vcpu_vmx *vmx, + unsigned long flags) { kvm_guest_enter_irqoff(); @@ -6686,7 +6730,7 @@ native_write_cr2(vcpu->arch.cr2); vmx->fail = __vmx_vcpu_run(vmx, (unsigned long *)&vcpu->arch.regs, - vmx->loaded_vmcs->launched); + flags); vcpu->arch.cr2 = native_read_cr2(); @@ -6777,36 +6821,8 @@ kvm_wait_lapic_expire(vcpu); - /* - * If this vCPU has touched SPEC_CTRL, restore the guest's value if - * it's non-zero. Since vmentry is serialising on affected CPUs, there - * is no need to worry about the conditional branch over the wrmsr - * being speculatively taken. - */ - x86_spec_ctrl_set_guest(vmx->spec_ctrl, 0); - /* The actual VMENTER/EXIT is in the .noinstr.text section. */ - vmx_vcpu_enter_exit(vcpu, vmx); - - /* - * We do not use IBRS in the kernel. If this vCPU has used the - * SPEC_CTRL MSR it may have left it on; save the value and - * turn it off. This is much more efficient than blindly adding - * it to the atomic save/restore list. Especially as the former - * (Saving guest MSRs on vmexit) doesn't even exist in KVM. - * - * For non-nested case: - * If the L01 MSR bitmap does not intercept the MSR, then we need to - * save it. - * - * For nested case: - * If the L02 MSR bitmap does not intercept the MSR, then we need to - * save it. - */ - if (unlikely(!msr_write_intercepted(vmx, MSR_IA32_SPEC_CTRL))) - vmx->spec_ctrl = native_read_msr(MSR_IA32_SPEC_CTRL); - - x86_spec_ctrl_restore_host(vmx->spec_ctrl, 0); + vmx_vcpu_enter_exit(vcpu, vmx, __vmx_vcpu_run_flags(vmx)); /* All fields are clean at this point */ if (static_branch_unlikely(&enable_evmcs)) { diff -u linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx.h linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx.h --- linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx.h +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx.h @@ -8,11 +8,12 @@ #include #include "capabilities.h" -#include "kvm_cache_regs.h" +#include "../kvm_cache_regs.h" #include "posted_intr.h" #include "vmcs.h" #include "vmx_ops.h" -#include "cpuid.h" +#include "../cpuid.h" +#include "run_flags.h" #define MSR_TYPE_R 1 #define MSR_TYPE_W 2 @@ -382,7 +383,10 @@ struct vmx_uret_msr *vmx_find_uret_msr(struct vcpu_vmx *vmx, u32 msr); void pt_update_intercept_for_msr(struct kvm_vcpu *vcpu); void vmx_update_host_rsp(struct vcpu_vmx *vmx, unsigned long host_rsp); -bool __vmx_vcpu_run(struct vcpu_vmx *vmx, unsigned long *regs, bool launched); +void vmx_spec_ctrl_restore_host(struct vcpu_vmx *vmx, unsigned int flags); +unsigned int __vmx_vcpu_run_flags(struct vcpu_vmx *vmx); +bool __vmx_vcpu_run(struct vcpu_vmx *vmx, unsigned long *regs, + unsigned int flags); int vmx_find_loadstore_msr_slot(struct vmx_msrs *m, u32 msr); void vmx_ept_load_pdptrs(struct kvm_vcpu *vcpu); diff -u linux-hwe-5.15-5.15.0/arch/x86/kvm/x86.c linux-hwe-5.15-5.15.0/arch/x86/kvm/x86.c --- linux-hwe-5.15-5.15.0/arch/x86/kvm/x86.c +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/x86.c @@ -11974,9 +11974,9 @@ } EXPORT_SYMBOL_GPL(kvm_arch_end_assignment); -bool kvm_arch_has_assigned_device(struct kvm *kvm) +bool noinstr kvm_arch_has_assigned_device(struct kvm *kvm) { - return atomic_read(&kvm->arch.assigned_device_count); + return arch_atomic_read(&kvm->arch.assigned_device_count); } EXPORT_SYMBOL_GPL(kvm_arch_has_assigned_device); diff -u linux-hwe-5.15-5.15.0/arch/x86/lib/copy_mc_64.S linux-hwe-5.15-5.15.0/arch/x86/lib/copy_mc_64.S --- linux-hwe-5.15-5.15.0/arch/x86/lib/copy_mc_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/copy_mc_64.S @@ -77,7 +77,7 @@ .L_done_memcpy_trap: xorl %eax, %eax .L_done: - ret + RET SYM_FUNC_END(copy_mc_fragile) .section .fixup, "ax" @@ -132,7 +132,7 @@ rep movsb /* Copy successful. Return zero */ xorl %eax, %eax - ret + RET SYM_FUNC_END(copy_mc_enhanced_fast_string) .section .fixup, "ax" @@ -145,7 +145,7 @@ * user-copy routines. */ movq %rcx, %rax - ret + RET .previous diff -u linux-hwe-5.15-5.15.0/arch/x86/lib/retpoline.S linux-hwe-5.15-5.15.0/arch/x86/lib/retpoline.S --- linux-hwe-5.15-5.15.0/arch/x86/lib/retpoline.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/retpoline.S @@ -23,7 +23,7 @@ .Ldo_rop_\@: mov %\reg, (%_ASM_SP) UNWIND_HINT_FUNC - ret + RET .endm .macro THUNK reg @@ -32,9 +32,9 @@ SYM_INNER_LABEL(__x86_indirect_thunk_\reg, SYM_L_GLOBAL) UNWIND_HINT_EMPTY - ALTERNATIVE_2 __stringify(ANNOTATE_RETPOLINE_SAFE; jmp *%\reg), \ - __stringify(RETPOLINE \reg), X86_FEATURE_RETPOLINE, \ - __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; jmp *%\reg), X86_FEATURE_RETPOLINE_LFENCE + ALTERNATIVE_2 __stringify(RETPOLINE \reg), \ + __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; jmp *%\reg; int3), X86_FEATURE_RETPOLINE_LFENCE, \ + __stringify(ANNOTATE_RETPOLINE_SAFE; jmp *%\reg), ALT_NOT(X86_FEATURE_RETPOLINE) .endm @@ -68,0 +69,73 @@ + +/* + * This function name is magical and is used by -mfunction-return=thunk-extern + * for the compiler to generate JMPs to it. + */ +#ifdef CONFIG_RETHUNK + + .section .text.__x86.return_thunk + +/* + * Safety details here pertain to the AMD Zen{1,2} microarchitecture: + * 1) The RET at __x86_return_thunk must be on a 64 byte boundary, for + * alignment within the BTB. + * 2) The instruction at zen_untrain_ret must contain, and not + * end with, the 0xc3 byte of the RET. + * 3) STIBP must be enabled, or SMT disabled, to prevent the sibling thread + * from re-poisioning the BTB prediction. + */ + .align 64 + .skip 63, 0xcc +SYM_FUNC_START_NOALIGN(zen_untrain_ret); + + /* + * As executed from zen_untrain_ret, this is: + * + * TEST $0xcc, %bl + * LFENCE + * JMP __x86_return_thunk + * + * Executing the TEST instruction has a side effect of evicting any BTB + * prediction (potentially attacker controlled) attached to the RET, as + * __x86_return_thunk + 1 isn't an instruction boundary at the moment. + */ + .byte 0xf6 + + /* + * As executed from __x86_return_thunk, this is a plain RET. + * + * As part of the TEST above, RET is the ModRM byte, and INT3 the imm8. + * + * We subsequently jump backwards and architecturally execute the RET. + * This creates a correct BTB prediction (type=ret), but in the + * meantime we suffer Straight Line Speculation (because the type was + * no branch) which is halted by the INT3. + * + * With SMT enabled and STIBP active, a sibling thread cannot poison + * RET's prediction to a type of its choice, but can evict the + * prediction due to competitive sharing. If the prediction is + * evicted, __x86_return_thunk will suffer Straight Line Speculation + * which will be contained safely by the INT3. + */ +SYM_INNER_LABEL(__x86_return_thunk, SYM_L_GLOBAL) + ret + int3 +SYM_CODE_END(__x86_return_thunk) + + /* + * Ensure the TEST decoding / BTB invalidation is complete. + */ + lfence + + /* + * Jump back and execute the RET in the middle of the TEST instruction. + * INT3 is for SLS protection. + */ + jmp __x86_return_thunk + int3 +SYM_FUNC_END(zen_untrain_ret) +__EXPORT_THUNK(zen_untrain_ret) + +EXPORT_SYMBOL(__x86_return_thunk) + +#endif /* CONFIG_RETHUNK */ diff -u linux-hwe-5.15-5.15.0/arch/x86/net/bpf_jit_comp.c linux-hwe-5.15-5.15.0/arch/x86/net/bpf_jit_comp.c --- linux-hwe-5.15-5.15.0/arch/x86/net/bpf_jit_comp.c +++ linux-hwe-5.15-5.15.0/arch/x86/net/bpf_jit_comp.c @@ -408,2 +408,17 @@ +static void emit_return(u8 **pprog, u8 *ip) +{ + u8 *prog = *pprog; + + if (cpu_feature_enabled(X86_FEATURE_RETHUNK)) { + emit_jump(&prog, &__x86_return_thunk, ip); + } else { + EMIT1(0xC3); /* ret */ + if (IS_ENABLED(CONFIG_SLS)) + EMIT1(0xCC); /* int3 */ + } + + *pprog = prog; +} + /* @@ -1673,7 +1688,7 @@ ctx->cleanup_addr = proglen; pop_callee_regs(&prog, callee_regs_used); EMIT1(0xC9); /* leave */ - EMIT1(0xC3); /* ret */ + emit_return(&prog, image + addrs[i - 1] + (prog - temp)); break; default: @@ -2119,7 +2134,7 @@ if (flags & BPF_TRAMP_F_SKIP_FRAME) /* skip our return address and return to parent */ EMIT4(0x48, 0x83, 0xC4, 8); /* add rsp, 8 */ - EMIT1(0xC3); /* ret */ + emit_return(&prog, prog); /* Make sure the trampoline generation logic doesn't overflow */ if (WARN_ON_ONCE(prog > (u8 *)image_end - BPF_INSN_SAFETY)) { ret = -EFAULT; diff -u linux-hwe-5.15-5.15.0/arch/x86/xen/xen-asm.S linux-hwe-5.15-5.15.0/arch/x86/xen/xen-asm.S --- linux-hwe-5.15-5.15.0/arch/x86/xen/xen-asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/xen/xen-asm.S @@ -45,7 +45,7 @@ call check_events 1: FRAME_END - ret + RET SYM_FUNC_END(xen_irq_enable_direct) @@ -55,7 +55,7 @@ */ SYM_FUNC_START(xen_irq_disable_direct) movb $1, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask - ret + RET SYM_FUNC_END(xen_irq_disable_direct) /* @@ -71,7 +71,7 @@ testb $0xff, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask setz %ah addb %ah, %ah - ret + RET SYM_FUNC_END(xen_save_fl_direct) /* @@ -100,7 +100,7 @@ pop %rcx pop %rax FRAME_END - ret + RET SYM_FUNC_END(check_events) SYM_FUNC_START(xen_read_cr2) @@ -108,19 +108,19 @@ _ASM_MOV PER_CPU_VAR(xen_vcpu), %_ASM_AX _ASM_MOV XEN_vcpu_info_arch_cr2(%_ASM_AX), %_ASM_AX FRAME_END - ret + RET SYM_FUNC_END(xen_read_cr2); SYM_FUNC_START(xen_read_cr2_direct) FRAME_BEGIN _ASM_MOV PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_arch_cr2, %_ASM_AX FRAME_END - ret + RET SYM_FUNC_END(xen_read_cr2_direct); .macro xen_pv_trap name SYM_CODE_START(xen_\name) - UNWIND_HINT_EMPTY + UNWIND_HINT_ENTRY pop %rcx pop %r11 jmp \name @@ -227,8 +227,8 @@ */ /* Normal 64-bit system call target */ -SYM_CODE_START(xen_syscall_target) - UNWIND_HINT_EMPTY +SYM_CODE_START(xen_entry_SYSCALL_64) + UNWIND_HINT_ENTRY popq %rcx popq %r11 @@ -241,13 +241,13 @@ movq $__USER_CS, 1*8(%rsp) jmp entry_SYSCALL_64_after_hwframe -SYM_CODE_END(xen_syscall_target) +SYM_CODE_END(xen_entry_SYSCALL_64) #ifdef CONFIG_IA32_EMULATION /* 32-bit compat syscall target */ -SYM_CODE_START(xen_syscall32_target) - UNWIND_HINT_EMPTY +SYM_CODE_START(xen_entry_SYSCALL_compat) + UNWIND_HINT_ENTRY popq %rcx popq %r11 @@ -260,11 +260,11 @@ movq $__USER32_CS, 1*8(%rsp) jmp entry_SYSCALL_compat_after_hwframe -SYM_CODE_END(xen_syscall32_target) +SYM_CODE_END(xen_entry_SYSCALL_compat) /* 32-bit compat sysenter target */ -SYM_CODE_START(xen_sysenter_target) - UNWIND_HINT_EMPTY +SYM_CODE_START(xen_entry_SYSENTER_compat) + UNWIND_HINT_ENTRY /* * NB: Xen is polite and clears TF from EFLAGS for us. This means * that we don't need to guard against single step exceptions here. @@ -282,17 +282,17 @@ jmp entry_SYSENTER_compat_after_hwframe -SYM_CODE_END(xen_sysenter_target) +SYM_CODE_END(xen_entry_SYSENTER_compat) #else /* !CONFIG_IA32_EMULATION */ -SYM_CODE_START(xen_syscall32_target) -SYM_CODE_START(xen_sysenter_target) - UNWIND_HINT_EMPTY +SYM_CODE_START(xen_entry_SYSCALL_compat) +SYM_CODE_START(xen_entry_SYSENTER_compat) + UNWIND_HINT_ENTRY lea 16(%rsp), %rsp /* strip %rcx, %r11 */ mov $-ENOSYS, %rax pushq $0 jmp hypercall_iret -SYM_CODE_END(xen_sysenter_target) -SYM_CODE_END(xen_syscall32_target) +SYM_CODE_END(xen_entry_SYSENTER_compat) +SYM_CODE_END(xen_entry_SYSCALL_compat) #endif /* CONFIG_IA32_EMULATION */ diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/abiname linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/abiname --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/abiname +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/abiname @@ -1 +1 @@ -41 +43 diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/amd64/generic linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/amd64/generic --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/amd64/generic +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/amd64/generic @@ -6624,6 +6624,7 @@ EXPORT_SYMBOL vmlinux 0x1a31b7e0 agp_find_bridge EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled EXPORT_SYMBOL vmlinux 0x1a63af34 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x1a6b9596 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x1a79c8e9 __x86_indirect_thunk_r13 EXPORT_SYMBOL vmlinux 0x1a7bef1f proc_set_user EXPORT_SYMBOL vmlinux 0x1a871737 tcp_md5_do_del @@ -8153,7 +8154,6 @@ EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch EXPORT_SYMBOL vmlinux 0x5ed90adc int_to_scsilun EXPORT_SYMBOL vmlinux 0x5ee0645e vfs_parse_fs_param -EXPORT_SYMBOL vmlinux 0x5eec129a pcie_port_service_register EXPORT_SYMBOL vmlinux 0x5eee368b inet6_release EXPORT_SYMBOL vmlinux 0x5ef6a672 gen_pool_for_each_chunk EXPORT_SYMBOL vmlinux 0x5efde8e6 proc_doulongvec_ms_jiffies_minmax @@ -8381,7 +8381,6 @@ EXPORT_SYMBOL vmlinux 0x68afed12 filemap_map_pages EXPORT_SYMBOL vmlinux 0x68c4b824 cpumask_any_but EXPORT_SYMBOL vmlinux 0x68d9ed59 fwnode_mdiobus_register_phy -EXPORT_SYMBOL vmlinux 0x68da0e1c pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x68e1d2a9 thaw_super EXPORT_SYMBOL vmlinux 0x68e5b664 security_inode_setsecctx EXPORT_SYMBOL vmlinux 0x68e9292a nvdimm_namespace_disk_name @@ -8426,6 +8425,7 @@ EXPORT_SYMBOL vmlinux 0x6a8d13a8 crypto_sha256_update EXPORT_SYMBOL vmlinux 0x6aa11aa6 sgl_free_n_order EXPORT_SYMBOL vmlinux 0x6aa8cddf config_item_set_name +EXPORT_SYMBOL vmlinux 0x6ac18d68 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x6ac774d7 flow_indr_dev_unregister EXPORT_SYMBOL vmlinux 0x6acd088a qdisc_hash_add EXPORT_SYMBOL vmlinux 0x6adc7663 dma_map_sg_attrs @@ -16072,67 +16072,67 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf9eb813f ntb_transport_unregister_client_dev EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x2c451193 async_pmem_flush EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x949c16c0 virtio_pmem_host_ack -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x01bad6a9 nvme_wait_freeze_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x01bc9c17 nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x024c89bd nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x01647d60 nvme_wait_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x02fc8d7f __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x04c7426f nvme_wait_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0c1d667a nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0541fa0e nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x10a5bf9c nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x13215d08 nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x14e6ded8 nvme_alloc_request +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x17d1198b nvme_kill_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1a290d85 nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x206b9dea nvme_wait_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2592d6d3 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2b63a1b0 nvme_sync_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x32e37f68 nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x32e82f15 nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x367fcb70 nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x30130b4f nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x366bcf84 nvme_reset_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3bf2393a __SCT__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x42caf98f nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x43b2698f __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x46368f18 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x46b5ae1b nvme_remove_namespaces EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4aa6ddb9 nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x507b4f99 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5bedb1fc nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5c7f1671 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x607306b3 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4a816baf nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5c1c8623 nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5cd93d1a nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5d87e078 nvme_cancel_admin_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x69585ce2 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6642a2b5 nvme_wait_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6b89faca nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6df88029 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x72a1bc2e nvme_setup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x73ed6586 nvme_cancel_admin_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x75afd4e7 nvme_stop_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x78c99120 nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7c861f9a nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6bded66e nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x75f34e16 nvme_change_ctrl_state EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8477b488 nvme_fail_nonready_command EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x84e782ee nvme_cleanup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a9c70ed nvme_sec_submit -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x92a72c1c nvme_start_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x979cb5a4 nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9e9550aa nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8abd4311 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8bf35424 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x93febc8c nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9a27979f nvme_wait_freeze_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa5e9665c nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbc3add39 nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa89eae41 nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb45414e6 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc4a4b830 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc6ab82c9 nvme_init_ctrl_finish EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc991c03f __SCK__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xca4269f3 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcf390e60 nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcf887107 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd0df2865 nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdad190f4 nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd9e6c799 nvme_cancel_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe40912e6 nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe51cd493 __nvme_check_ready -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xec90f57d nvme_sync_io_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf6ebc637 nvme_change_ctrl_state -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf9ac8b4e nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3862df26 nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x42d250c3 nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x46552e3d nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xec3d6a9c nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xed3a9186 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf3e275f3 nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfa0d1718 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0896fbd4 nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1cd53b8b nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1d9a313f nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x27c70180 nvmf_get_address EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x51c659eb nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x5b0becbe nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8031454e nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x834455d6 nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa64960da nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa9fd840b nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb5ac7be2 nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb712bf41 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x57ff1cda nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6894b645 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x7cb83a31 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x97188d4d nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xc987e16e nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xee791941 nvmf_reg_read32 EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -26157,11 +26157,11 @@ MCB EXPORT_SYMBOL_GPL 0xd7868cd8 chameleon_parse_cells drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf52e38e7 mcb_alloc_dev drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x522d34e0 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x6828b026 nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x817482fb nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x81e9ba21 nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xadfd6722 nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xb2a80bbb nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xd7f3df8f nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xf3f081b8 nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xfcde2687 nvme_ctrl_from_file drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x030e5cd2 pmbus_set_update drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x03d19469 pmbus_get_fan_rate_device drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x0ff958ac pmbus_write_byte_data drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/amd64/generic.modules linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/amd64/generic.modules --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/amd64/generic.modules +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/amd64/generic.modules @@ -4521,6 +4521,7 @@ snd-acp3x-rn snd-acp5x-i2s snd-acp5x-pcm-dma +snd-acp6x-pdm-dma snd-ad1889 snd-ak4113 snd-ak4114 @@ -4635,6 +4636,7 @@ snd-oxygen-lib snd-pci-acp3x snd-pci-acp5x +snd-pci-acp6x snd-pcm snd-pcm-dmaengine snd-pcsp @@ -4663,6 +4665,7 @@ snd-soc-acp-da7219mx98357-mach snd-soc-acp-rt5645-mach snd-soc-acp-rt5682-mach +snd-soc-acp6x-mach snd-soc-acpi snd-soc-acpi-intel-match snd-soc-adau-utils diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/arm64/generic linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/arm64/generic --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/arm64/generic +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/arm64/generic @@ -6952,7 +6952,6 @@ EXPORT_SYMBOL vmlinux 0x22d3b644 md_finish_reshape EXPORT_SYMBOL vmlinux 0x22d5412b fman_unregister_intr EXPORT_SYMBOL vmlinux 0x22db1603 mmc_get_card -EXPORT_SYMBOL vmlinux 0x22db8969 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x22eb6958 mmc_hw_reset EXPORT_SYMBOL vmlinux 0x23559c51 qman_oos_fq EXPORT_SYMBOL vmlinux 0x2358a854 pci_assign_resource @@ -8714,6 +8713,7 @@ EXPORT_SYMBOL vmlinux 0x7427a576 tty_port_close_start EXPORT_SYMBOL vmlinux 0x7429e20c kstrtos8 EXPORT_SYMBOL vmlinux 0x742cc851 fwnode_irq_get +EXPORT_SYMBOL vmlinux 0x7432fb0d pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x743af596 elv_rb_find EXPORT_SYMBOL vmlinux 0x743f4126 keygen_port_hashing_init EXPORT_SYMBOL vmlinux 0x7453d3e8 security_release_secctx @@ -10676,6 +10676,7 @@ EXPORT_SYMBOL vmlinux 0xcdc39c9e security_ismaclabel EXPORT_SYMBOL vmlinux 0xcde77bcc free_opal_dev EXPORT_SYMBOL vmlinux 0xcdf58403 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0xcdfc0797 pcie_port_service_register EXPORT_SYMBOL vmlinux 0xcdfdf00e blk_rq_map_integrity_sg EXPORT_SYMBOL vmlinux 0xce036f24 sg_split EXPORT_SYMBOL vmlinux 0xce0ada29 netdev_has_upper_dev_all_rcu @@ -10714,7 +10715,6 @@ EXPORT_SYMBOL vmlinux 0xcfaa2910 sk_send_sigurg EXPORT_SYMBOL vmlinux 0xcfbc2141 neigh_xmit EXPORT_SYMBOL vmlinux 0xcfbf49db __dynamic_dev_dbg -EXPORT_SYMBOL vmlinux 0xcfc6e3f7 pcie_port_service_register EXPORT_SYMBOL vmlinux 0xcfc9deaf atomic_dec_and_mutex_lock EXPORT_SYMBOL vmlinux 0xcfd884a8 __hsiphash_unaligned EXPORT_SYMBOL vmlinux 0xcfdb53a7 rproc_elf_sanity_check @@ -15866,66 +15866,66 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf9eb813f ntb_transport_unregister_client_dev EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x90c1bb72 async_pmem_flush EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0xaaa39429 virtio_pmem_host_ack -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x045e5f5e nvme_stop_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0e149bdf nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0036994e nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x051d8b66 nvme_sync_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x14293a6d __nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x15d9f442 nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x17143280 nvme_cancel_request EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x17c77780 nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1c94ffca nvme_setup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x220765fa __nvme_check_ready -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x27b721cd nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2837037a nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3018b9f4 nvme_start_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x37622411 nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3d983144 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x19f27da7 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x23496bc4 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3b4aa9aa nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3cbf019e nvme_cancel_admin_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x509daaaf nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x515f27df nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5d665feb nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49379d2a nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4d0e4e32 nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55b2057d nvme_fail_nonready_command +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6167782e nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x633220c5 nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6e20e4c5 nvme_uninit_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d63d8ef nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x65a93a74 nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6ddd45c7 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7ebb52e6 nvme_disable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x843ab7f9 nvme_alloc_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x876c1bfb nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a43ea39 nvme_wait_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a9c70ed nvme_sec_submit EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e7ec2b6 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ebcfb27 nvme_cancel_admin_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x97ec3e9f nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x97fa2233 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xab25f652 nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xae210b43 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9dec6a1d nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9fe96ea6 nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa3167454 nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaa6f0ca9 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xad6e8d75 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaec643bc nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaf109762 nvme_init_ctrl_finish EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb1fbde88 nvme_cleanup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbcc80ff4 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbd3fee59 nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc152f183 nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xccb939ef nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbf3dc3fb nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc2f487de nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc6f5fcb6 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc8736fde nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc9c7fa49 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcb24c327 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcb4f556f nvme_change_ctrl_state EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd0a20744 nvme_host_path_error EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd6770807 nvme_unfreeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd8087e70 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe95af68e nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd7043a58 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd78e87ac nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdbf9ebae nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe3708324 nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe9fbc336 nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xebdf26c4 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf2223a70 nvme_wait_freeze_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf699697b nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf9458620 nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfbd241c3 nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3e139b98 nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x47c83e05 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfcc5741a nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x08eb5c85 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3a210421 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3a4eac2d nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3eb33739 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x4596b2d5 nvmf_get_address EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x51c659eb nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x530fceb8 nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x606d5a80 nvmf_unregister_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x63be053c nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x859086e8 nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8fc74eda nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9917a21a nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf10090a1 nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf603a1bc nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x5327de0d nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x5dbcf914 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xdecce5a2 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf9e06ced nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xfd15bab5 nvmf_connect_io_queue EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -26402,11 +26402,11 @@ MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf3811d54 mcb_alloc_dev drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xfff2fa58 mcb_device_register drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x45aba3d1 nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x7954598c nvme_find_get_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x9b33d013 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x273033e3 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x51fb3fee nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x65eb1ef8 nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xa59785d5 nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xdafccc3b nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xbefb8674 nvme_command_effects drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x06e5b619 pmbus_update_byte_data drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x0f1c9111 pmbus_get_fan_rate_device drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x182c4374 pmbus_get_driver_info drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/arm64/generic-64k linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/arm64/generic-64k --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/arm64/generic-64k +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/arm64/generic-64k @@ -8028,7 +8028,6 @@ EXPORT_SYMBOL vmlinux 0x550a50d4 gnet_stats_start_copy_compat EXPORT_SYMBOL vmlinux 0x550d1e0b submit_bio_wait EXPORT_SYMBOL vmlinux 0x551bd071 __rb_erase_color -EXPORT_SYMBOL vmlinux 0x551eb2e8 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x552db3aa qman_query_cgr_congested EXPORT_SYMBOL vmlinux 0x5535875f pci_select_bars EXPORT_SYMBOL vmlinux 0x554ae3a4 irq_poll_sched @@ -9271,6 +9270,7 @@ EXPORT_SYMBOL vmlinux 0x8be7ee7f mroute6_is_socket EXPORT_SYMBOL vmlinux 0x8c005a5e mipi_dsi_dcs_set_display_on EXPORT_SYMBOL vmlinux 0x8c0e722b of_match_node +EXPORT_SYMBOL vmlinux 0x8c0f15a8 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x8c26d495 prepare_to_wait_event EXPORT_SYMBOL vmlinux 0x8c4337c3 jbd2_journal_submit_inode_data_buffers EXPORT_SYMBOL vmlinux 0x8c512f5a pipe_lock @@ -10810,7 +10810,6 @@ EXPORT_SYMBOL vmlinux 0xd27b25dd blk_check_plugged EXPORT_SYMBOL vmlinux 0xd2800691 nf_conntrack_destroy EXPORT_SYMBOL vmlinux 0xd289254d netdev_reset_tc -EXPORT_SYMBOL vmlinux 0xd28a7cdc pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0xd29e205f netdev_class_create_file_ns EXPORT_SYMBOL vmlinux 0xd2b36869 icmp6_send EXPORT_SYMBOL vmlinux 0xd2b47ca4 pci_match_id @@ -11267,6 +11266,7 @@ EXPORT_SYMBOL vmlinux 0xe691ac7f ZSTD_decompressBegin EXPORT_SYMBOL vmlinux 0xe692a9b7 tcp_getsockopt EXPORT_SYMBOL vmlinux 0xe694a649 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0xe69f705e pcie_port_service_register EXPORT_SYMBOL vmlinux 0xe6b0a728 rproc_coredump_add_custom_segment EXPORT_SYMBOL vmlinux 0xe6b1cf5b blk_queue_max_segment_size EXPORT_SYMBOL vmlinux 0xe6b9a663 tty_register_device @@ -15863,66 +15863,66 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xfa425126 ntb_transport_unregister_client EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x9b0d5816 async_pmem_flush EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0xb8abaacc virtio_pmem_host_ack -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x046cac27 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x02700aee nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0566849b nvme_unfreeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x06f515ae nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x078a216d nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x07d5f4fe nvme_uninit_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0d6346d3 nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0eefb3f5 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0752edf7 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1019e5c8 nvme_fail_nonready_command EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x181e178a __nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1cb2ae5a nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x20b14560 nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x222dda6c nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x287998fd nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x32ba861b nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x36abcc2f nvme_setup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x41d1d7f1 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x19c69c26 nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1deddc33 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2df1a8db nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x424c7dd8 nvme_wait_freeze_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x50835e83 nvme_wait_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x565e382f nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x591e25a4 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4ea92098 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5884715e nvme_shutdown_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x66ba36d0 nvme_complete_rq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x689a81d2 nvme_alloc_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6baf0513 nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x78c41ef0 nvme_start_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7929bcf1 nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7ad54df6 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x692e6ff1 nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x797167a1 nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d3d6f33 nvme_uninit_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x885c3d41 nvme_shutdown_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a9c70ed nvme_sec_submit EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e7ec2b6 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x93e8d938 nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x948e50d6 nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e9d6e47 nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8fe49ffe nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x957b1a75 nvme_start_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x974b1473 nvme_cleanup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9a1d315c nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa0f05b1c nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x985fa534 nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x996ed054 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9cdbb974 nvme_remove_namespaces EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa787f0a8 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa965cc46 nvme_sync_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xad75594b nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xae58a100 nvme_stop_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbb520ab1 nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcd111cf6 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd06053e1 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbb9b89d0 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc0be1cf3 nvme_enable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc4f39d4d nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc55f58f5 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc8fb5b64 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xca5a76f6 nvme_stop_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58b2c2d nvme_reset_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdb34a3cf nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe096a44d nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe91a356c nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf7bcc22a __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdce85f06 nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe1d97f97 nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe8014c97 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe8e61bba nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xea42f092 nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xeb1cb7db nvme_complete_async_event EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf8dc10bb nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0b48dfdb nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x21dc7790 nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x25dead4d nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x2cbe3cb1 nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3a0f2a92 nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xff40e631 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x088e77a2 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0c48758f nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x4a7d5b59 nvmf_reg_read32 EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x51c659eb nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8f1b5cfb nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x95df54db nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xcc190d6b nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xd7772216 nvmf_unregister_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xe4acbe6d nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x5ddb1ea7 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x604cd042 nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x90a2acec nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x963f5468 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9e730d5f nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xc3db47f2 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xcf0cb656 nvmf_unregister_transport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -26398,11 +26398,11 @@ MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf3811d54 mcb_alloc_dev drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xfff2fa58 mcb_device_register drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x07f96d5d nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x7d9f002c nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x8ce7df01 nvme_command_effects drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xad6c2879 nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x20e89325 nvme_put_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xb4cdc733 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xce41fb0d nvme_command_effects drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xd4a30eca nvme_execute_passthru_rq drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe2b2583e nvme_find_get_ns drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x157eb2a8 pmbus_check_word_register drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x1681b591 pmbus_clear_cache drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x20df9b4e pmbus_read_byte_data drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/armhf/generic linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/armhf/generic --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/armhf/generic +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/armhf/generic @@ -6132,6 +6132,7 @@ EXPORT_SYMBOL vmlinux 0x086253a7 ioremap_cache EXPORT_SYMBOL vmlinux 0x087033fc elv_rb_former_request EXPORT_SYMBOL vmlinux 0x0882a449 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x088fdf11 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x089990ad devfreq_remove_device EXPORT_SYMBOL vmlinux 0x08a411b0 devfreq_add_device EXPORT_SYMBOL vmlinux 0x08bb5b69 make_kuid @@ -6767,7 +6768,6 @@ EXPORT_SYMBOL vmlinux 0x258d2f76 net_dim_get_tx_moderation EXPORT_SYMBOL vmlinux 0x2595cb83 devfreq_resume_device EXPORT_SYMBOL vmlinux 0x259c836c kthread_associate_blkcg -EXPORT_SYMBOL vmlinux 0x25ac2359 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x25ae3200 snd_card_file_remove EXPORT_SYMBOL vmlinux 0x25e58a09 hdmi_avi_infoframe_init EXPORT_SYMBOL vmlinux 0x25e9d4bd resource_list_free @@ -7430,6 +7430,7 @@ EXPORT_SYMBOL vmlinux 0x456bdd1f pci_enable_device_mem EXPORT_SYMBOL vmlinux 0x4578f528 __kfifo_to_user EXPORT_SYMBOL vmlinux 0x4583a245 snd_register_device +EXPORT_SYMBOL vmlinux 0x458798b8 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x458877fb sk_common_release EXPORT_SYMBOL vmlinux 0x4589861a phy_attached_info EXPORT_SYMBOL vmlinux 0x45a1f0f1 __skb_warn_lro_forwarding @@ -8063,7 +8064,6 @@ EXPORT_SYMBOL vmlinux 0x6228c21f smp_call_function_single EXPORT_SYMBOL vmlinux 0x622b52ed of_node_name_prefix EXPORT_SYMBOL vmlinux 0x622db8b3 filp_open -EXPORT_SYMBOL vmlinux 0x62558adf pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x6257f939 vme_irq_request EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister EXPORT_SYMBOL vmlinux 0x627fa67a md_reap_sync_thread @@ -15330,66 +15330,66 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xd8b2d890 ntb_transport_unregister_client EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf55d6313 ntb_transport_register_client_dev EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf9eb813f ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x006f2f31 nvme_setup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x013f1a0f nvme_alloc_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0f7f9c74 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x09587581 nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1fa9faba nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x24a69ab0 nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x260023f8 nvme_wait_freeze_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2d57f86f nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2ec6b825 __nvme_check_ready EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3822df32 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3cb7d1c8 nvme_sync_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3d6804d3 __nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x40d6787c nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x43aeb7f8 nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x46535e8a nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x47ea9a81 nvme_try_sched_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4d96ea0e nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x51e7242b nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55be7a32 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x50021e7e nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x527b467b nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x53700774 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5692b48a nvme_init_ctrl_finish EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5882b5a5 nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5c4146e1 nvme_unfreeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5dc35dcc nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5f0be6fa nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x68d4a4db nvme_set_queue_count EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6bdf8acc nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6f18ab59 nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x73cebc0d nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7569a956 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6cf7b68c nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d27b09a nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7e0b21e4 nvme_stop_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8690e61e nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x838fe4f8 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x85af91ca __nvme_check_ready EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ab19397 nvme_sec_submit -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8b0c728b nvme_try_sched_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ef93e55 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9c4236a3 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa96730e9 nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb21cc25d nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8db027d9 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x914ca023 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x99810cd9 nvme_fail_nonready_command +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa6693148 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa7566b4a nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xad9ddbb1 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb4ecca2a nvme_change_ctrl_state EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbd0f2f71 nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbd5f0705 nvme_sync_io_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc0a74815 nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc6df5b53 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc6fa4780 nvme_change_ctrl_state -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc7956561 nvme_start_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc9a09cf7 nvme_start_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcc92c25c nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc28dcfa9 nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcad843f1 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd3c11350 nvme_wait_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd5f5f496 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd911a6ed nvme_stop_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdcafb566 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xde8e2aae nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdd629756 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdfaf9431 nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe0df2b70 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe2c126c9 nvme_reset_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe2da98db nvme_cleanup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe3007edf nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xee4f0ae2 nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xffccbf7c nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe734ead6 nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf520bc13 nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x044d6b41 nvmf_get_address EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0e1f31fe nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3d87edcf nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x4e48a0bf nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8877da98 nvmf_unregister_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8f5a4a8d nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa0d38d07 nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xba5ccea5 nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xca288047 nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xde7337ef nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf117c8e7 nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xfb90ee7e nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x174f63de nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x4f7d5ecd nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6a44e6a2 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9b09b7cf nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9f6e5cec nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa0bcc308 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xae0c2770 nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb6a92aa2 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xde4b2469 nvmf_register_transport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -25206,10 +25206,10 @@ MCB EXPORT_SYMBOL_GPL 0xe9bbc91b mcb_free_dev drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xefccda8e mcb_bus_get drivers/mcb/mcb NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x15265c47 nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x2730d50d nvme_find_get_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x43dbdc34 nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x6654a805 nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x89969894 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x2cbbc056 nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x70d6e076 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x8ba7ac73 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xa0bd2913 nvme_put_ns drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x1d1d0158 pmbus_write_byte_data drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x1f932420 pmbus_update_byte_data drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x3455a5ef pmbus_get_fan_rate_device drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/armhf/generic-lpae linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/armhf/generic-lpae --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/armhf/generic-lpae +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/armhf/generic-lpae @@ -5948,6 +5948,7 @@ EXPORT_SYMBOL vmlinux 0x0377e5da param_set_ullong EXPORT_SYMBOL vmlinux 0x037a0cba kfree EXPORT_SYMBOL vmlinux 0x03815f35 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x038d9300 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x0397edd5 fb_edid_to_monspecs EXPORT_SYMBOL vmlinux 0x03ac9a1b device_match_acpi_dev EXPORT_SYMBOL vmlinux 0x03ac9f7e __put_page @@ -7596,7 +7597,6 @@ EXPORT_SYMBOL vmlinux 0x4f256848 param_set_bint EXPORT_SYMBOL vmlinux 0x4f2b2b5b config_item_get EXPORT_SYMBOL vmlinux 0x4f337455 of_io_request_and_map -EXPORT_SYMBOL vmlinux 0x4f64a882 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x4f816e9b snd_pcm_format_big_endian EXPORT_SYMBOL vmlinux 0x4f881a21 sock_alloc_send_pskb EXPORT_SYMBOL vmlinux 0x4f89c9de gpmc_cs_free @@ -7872,6 +7872,7 @@ EXPORT_SYMBOL vmlinux 0x5c9284a0 processor_id EXPORT_SYMBOL vmlinux 0x5cabd087 dquot_free_inode EXPORT_SYMBOL vmlinux 0x5cb8b20f ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x5cbc8ffd pcie_port_service_register EXPORT_SYMBOL vmlinux 0x5cbd8e69 __crc32c_le EXPORT_SYMBOL vmlinux 0x5cbf71de dst_destroy EXPORT_SYMBOL vmlinux 0x5cc70fc5 sock_no_sendmsg_locked @@ -8020,7 +8021,6 @@ EXPORT_SYMBOL vmlinux 0x6317cd29 nand_ecc_get_on_die_hw_engine EXPORT_SYMBOL vmlinux 0x63187451 pcie_aspm_support_enabled EXPORT_SYMBOL vmlinux 0x631d06aa cpu_rmap_put -EXPORT_SYMBOL vmlinux 0x6324428e pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x6342f99f mipi_dsi_create_packet EXPORT_SYMBOL vmlinux 0x6346f51d is_bad_inode EXPORT_SYMBOL vmlinux 0x634f2ead nexthop_set_hw_flags @@ -15231,65 +15231,65 @@ EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x291a1254 async_pmem_flush EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0xe853c04c virtio_pmem_host_ack EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x016fe35d nvme_cleanup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0479f811 nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x066a40d0 nvme_uninit_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x085adf01 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x02575c33 nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0ecb6480 nvme_uninit_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x14b2bc14 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1624f562 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2cdddd54 __nvme_check_ready -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2f4b07e8 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1abe42f6 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x219f5670 nvme_enable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x24846647 nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x330ba55a nvme_wait_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x34dc0cc3 __nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x356692dc nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x36dd10e2 nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3a5e905e nvme_change_ctrl_state -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3e3bbf28 nvme_start_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3ed11b90 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x35d55267 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x38cc49b7 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x392a464f nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x39f507d6 nvme_start_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4a54a77d nvme_start_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4ece8ff2 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4f742fab nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x51871706 nvme_unfreeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x647fd3c1 nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55930eb0 nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x59e9c609 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5cf5a7bc nvme_disable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x76ac7ef6 nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x76fc040d nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6b691ba6 nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6f033a07 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x733caa83 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7dcb38fd nvme_fail_nonready_command EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8414c349 nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x819bf917 nvme_stop_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x849ae4b0 nvme_submit_sync_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ab19397 nvme_sec_submit -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ebd0c7c nvme_setup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x94d597ec nvme_host_path_error +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x94e6dee5 __nvme_check_ready EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x95ed9b82 nvme_alloc_request EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9b68c902 nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9df451ac nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9e149c20 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9d0543e2 nvme_setup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9f72d542 nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa61793d9 nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbeaa7039 nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc4ca9356 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd1102b20 nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa30ed72f nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb4108a28 nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xba9ca957 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbc1bd2cc nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc0b4cbbe nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc3b4e38d nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc77a5afa nvme_sync_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd81c46c4 nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd9e1ae07 nvme_sync_io_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdaf6ae1d nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdb4cf2d5 nvme_wait_freeze_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdcafb566 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe8065b7f nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xea010c6f nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf86f42a8 nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfca005c3 nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe3ae8c35 nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe9437513 nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xeae1e4ab nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xefec83b1 nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf787fd1a nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x07d87712 nvmf_ip_options_match EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0e1f31fe nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0fd96035 nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1a50e2cf nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1ac84010 nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x50525cec nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x73893635 nvmf_unregister_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb150373d nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xc16fe2fa nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xdd7f90f7 nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf2678f84 nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf9621a8e nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1aa33ef7 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x296f490d nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x47b77984 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x7b91ff22 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb3cd43a3 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb615b469 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xbe941924 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xbf5bcbc7 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xd0d54abd nvmf_reg_read32 EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -25033,11 +25033,11 @@ MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf2818b40 mcb_unregister_driver drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf5b7441f mcb_alloc_bus drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x12ed6007 nvme_command_effects drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x46f624d8 nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x83955da9 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x633c2667 nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xb7944f50 nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe7b8afbc nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xd1a215ae nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe5bcc051 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe65356b0 nvme_command_effects drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x0df2846d pmbus_read_word_data drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x15e2a822 pmbus_write_byte drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x264fcd83 pmbus_read_byte_data drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/ppc64el/generic linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/ppc64el/generic --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/ppc64el/generic +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/ppc64el/generic @@ -15185,66 +15185,66 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf9eb813f ntb_transport_unregister_client_dev EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x5766127c virtio_pmem_host_ack EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x75a93c59 async_pmem_flush -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0e25450f nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x049e48a9 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x06ad4231 nvme_uninit_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x142b58c9 nvme_change_ctrl_state EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1615b9aa nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x18cf5ef6 nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1d537309 nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1f127e71 nvme_enable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x188fd984 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x20e407e3 nvme_disable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x289f27cc nvme_complete_rq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x29e3ae06 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2aed5862 nvme_sync_io_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2d44e984 nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2fa9d383 nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x301c4f13 nvme_sync_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x32f1f80f nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2a6bcf04 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3b46e2f9 nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3ffcc5d5 nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x426dc3fc nvme_set_features EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x42728816 nvme_cleanup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x431ff499 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x446d3988 nvme_setup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x50fe5ce6 nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x52b2359b nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5407141b nvme_start_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55b09db7 nvme_try_sched_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5a7701b7 nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5fdc0a2c nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6162d895 nvme_start_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6187bd4f nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5e6b0afa nvme_cancel_admin_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6bb8a596 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x72ae9a05 nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x74948617 nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x774719f5 nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x68be9475 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6c2a0e3b nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6e92b9d3 nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x72a8558b nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d274c10 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d92991f nvme_reset_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x81675055 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x89340783 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x838d9f5b nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x87558688 nvme_unfreeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a9c70ed nvme_sec_submit EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e7ec2b6 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ebec7d6 nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x95888e8a nvme_cancel_admin_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x97e4e08e nvme_wait_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa137f0a2 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb4125a20 nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb861ed88 nvme_stop_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc846db84 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x99ad338a nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa7a1d774 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb4037607 nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb9a28a8d nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbafb35f5 nvme_enable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbddb34ae nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbed53111 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc4bafad0 nvme_wait_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd285690f __nvme_submit_sync_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdcf894f6 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdf6e0dd3 nvme_set_queue_count EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe025260f nvme_alloc_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe53c49a3 __nvme_check_ready -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe892c43d nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf468ec60 nvme_start_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xff8a3ea7 nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x07b97e22 nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x110abd3d nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x144c475c nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x2172e511 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe242d922 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe6635fe3 nvme_fail_nonready_command +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf069b0ef nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf9c82c25 nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1abcfc25 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x29d07a07 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x327c2b31 nvmf_ip_options_match EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x51c659eb nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6004b02a nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x913ae467 nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9d68a99f nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xbc98636f nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xe0b7d496 nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xef91d48c nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6d70903f nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x73ed2762 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9fe2f1a6 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa67c530b nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb9b56c52 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xcf392120 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xdd9d24a7 nvmf_register_transport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -24589,11 +24589,11 @@ MCB EXPORT_SYMBOL_GPL 0xe4c97311 mcb_bus_add_devices drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf3dfd5ea mcb_bus_get drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x0d63537f nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x11822b2e nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x326e846c nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xd8e4a3a8 nvme_find_get_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe596945d nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xf6d950ae nvme_put_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x56612d1c nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x690cb422 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xc4a8f072 nvme_find_get_ns drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x0aa6e484 pmbus_regulator_ops drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x1986c01f pmbus_check_word_register drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x1f25b3d9 pmbus_update_fan drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/s390x/generic linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/s390x/generic --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/s390x/generic +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/s390x/generic @@ -3750,6 +3750,7 @@ EXPORT_SYMBOL vmlinux 0x3e058c30 debug_event_common EXPORT_SYMBOL vmlinux 0x3e3bad0a __tasklet_hi_schedule EXPORT_SYMBOL vmlinux 0x3e433a5d tty_port_close_start +EXPORT_SYMBOL vmlinux 0x3e56ba4f pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x3e572682 __wake_up EXPORT_SYMBOL vmlinux 0x3e6a2e0f dev_addr_add EXPORT_SYMBOL vmlinux 0x3e731fc3 padata_alloc_shell @@ -5028,7 +5029,6 @@ EXPORT_SYMBOL vmlinux 0x8409a121 cookie_ecn_ok EXPORT_SYMBOL vmlinux 0x840a5f06 elv_rb_former_request EXPORT_SYMBOL vmlinux 0x841cc2f6 dma_fence_remove_callback -EXPORT_SYMBOL vmlinux 0x84682bff pcie_port_service_register EXPORT_SYMBOL vmlinux 0x846dff0d account_page_redirty EXPORT_SYMBOL vmlinux 0x847b3e18 ccw_device_get_id EXPORT_SYMBOL vmlinux 0x847f2373 dev_add_pack @@ -5836,6 +5836,7 @@ EXPORT_SYMBOL vmlinux 0xaf665a46 __check_sticky EXPORT_SYMBOL vmlinux 0xaf6f4c94 call_fib_notifiers EXPORT_SYMBOL vmlinux 0xaf7fcc34 tc_setup_cb_replace +EXPORT_SYMBOL vmlinux 0xaf96a515 pcie_port_service_register EXPORT_SYMBOL vmlinux 0xafa360c1 mark_buffer_dirty_inode EXPORT_SYMBOL vmlinux 0xafc2e479 scsi_target_resume EXPORT_SYMBOL vmlinux 0xafd8b174 vfs_getattr_nosec @@ -7163,7 +7164,6 @@ EXPORT_SYMBOL vmlinux 0xf7d71918 __kfifo_in_r EXPORT_SYMBOL vmlinux 0xf7e533ba scsi_alloc_sgtables EXPORT_SYMBOL vmlinux 0xf7f4ca9a igrab -EXPORT_SYMBOL vmlinux 0xf7fb16aa pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0xf7fb8c69 xsk_tx_peek_release_desc_batch EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q EXPORT_SYMBOL vmlinux 0xf817a083 __blk_mq_end_request @@ -8132,66 +8132,66 @@ EXPORT_SYMBOL_GPL drivers/net/vxlan 0x3b2ed56b vxlan_dev_create EXPORT_SYMBOL_GPL drivers/net/vxlan 0xa8307805 vxlan_fdb_clear_offload EXPORT_SYMBOL_GPL drivers/net/vxlan 0xdfc2b1f1 vxlan_fdb_replay -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x031e67e3 nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x03641b37 nvme_change_ctrl_state -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0a422792 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11545020 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x02f45e4b nvme_init_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x144b97f0 nvme_kill_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1597e57e nvme_cancel_request EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x22190e35 nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2346c6a6 nvme_try_sched_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2508408e nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x238a895c nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x27d87d3a nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x28d09bff nvme_alloc_request +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2d163b8b nvme_set_queue_count EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2fa55ced nvme_sec_submit -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x35650733 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x40cdf485 nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x442249af nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4429061f nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x351dd9ef nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3cb65956 nvme_stop_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4abf4239 nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4fcc67b4 nvme_wait_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x506a3fc3 nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x52763530 nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55786bc7 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4df5fb13 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x519f4d56 nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x53c0a379 nvme_fail_nonready_command EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5d81a246 __traceiter_nvme_sq +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x608aab28 nvme_cancel_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6f5dc322 nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x71c3019f nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x726d0ec4 nvme_unfreeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7525ace5 nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x777b4eed nvme_wait_freeze_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7ae9f999 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x66ba001e nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x693b05a2 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x69cedb04 nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6f2f7607 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x779804a4 nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x81c6ab38 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8999c4a6 nvme_sync_io_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e7ec2b6 __tracepoint_nvme_sq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x99f96426 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9c850010 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa33f4ac5 nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa5c4afd8 nvme_get_features EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaa6782f3 nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb1727832 nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb1f2c3ad nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb7a1dd71 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb8a8ca41 nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xba0d38fc nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbdbab255 nvme_start_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcec34d2c __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaafe6677 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb8470831 nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbd908c18 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbe28498a nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc3288fc7 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcacd129f nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd08bad88 nvme_try_sched_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd88f79f2 nvme_sync_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd9424a7a nvme_cleanup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdcfb0ccf nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf16250e7 nvme_cancel_admin_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf47cc08a nvme_uninit_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x2b744552 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe1afa43b nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe30faa7f nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xeac893cd nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xed22ea9e nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf36b2d3f nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfbbbe6c2 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xff3a3194 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x01b0b670 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1384af81 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x17e78ecb nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x28d2233a nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x2f2d5246 nvmf_reg_read64 EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x37e15190 nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x37f14e03 nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x53e4c32c nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6a2643b7 nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8980fe35 nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8bcb47ea nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9bf48bb6 nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xaea79117 nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xc4471cfa nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf160a869 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9983c93e nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9e8aeb41 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa044abcc nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb08c7da9 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xda0cad8d nvmf_ip_options_match EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -13788,5 +13788,5 @@ -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x09e1f589 nvme_put_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x2899bc5c nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x6bccdabc nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xac197e2c nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xb8ec67c5 nvme_find_get_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe0d67707 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x727b3555 nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x8fb4ad26 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x9dd8b942 nvme_ctrl_from_file drivers/nvme/host/nvme-core diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/version linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/version --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/version +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/abi/version @@ -1 +1 @@ -5.15.0-41.44~20.04.1 +5.15.0-43.46~20.04.1 diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/changelog linux-hwe-5.15-5.15.0/debian.hwe-5.15/changelog --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/changelog +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/changelog @@ -1,3 +1,99 @@ +linux-hwe-5.15 (5.15.0-45.48~20.04.1) focal; urgency=medium + + [ Ubuntu: 5.15.0-45.48 ] + + * CVE-2022-29900 // CVE-2022-29901 + - x86/lib/atomic64_386_32: Rename things + - x86: Prepare asm files for straight-line-speculation + - x86: Prepare inline-asm for straight-line-speculation + - x86/alternative: Relax text_poke_bp() constraint + - kbuild: move objtool_args back to scripts/Makefile.build + - x86: Add straight-line-speculation mitigation + - kvm/emulate: Fix SETcc emulation function offsets with SLS + - crypto: x86/poly1305 - Fixup SLS + - objtool: Add straight-line-speculation validation + - objtool: Fix SLS validation for kcov tail-call replacement + - objtool: Fix objtool regression on x32 systems + - objtool: Fix symbol creation + - objtool: Introduce CFI hash + - objtool: Default ignore INT3 for unreachable + - x86, kvm: use proper ASM macros for kvm_vcpu_is_preempted + - x86/traps: Use pt_regs directly in fixup_bad_iret() + - x86/entry: Switch the stack after error_entry() returns + - x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry() + - x86/entry: Don't call error_entry() for XENPV + - x86/entry: Remove skip_r11rcx + - x86/realmode: build with -D__DISABLE_EXPORTS + - x86/ibt,ftrace: Make function-graph play nice + - x86/kvm/vmx: Make noinstr clean + - x86/cpufeatures: Move RETPOLINE flags to word 11 + - x86/retpoline: Cleanup some #ifdefery + - x86/retpoline: Swizzle retpoline thunk + - x86/retpoline: Use -mfunction-return + - x86: Undo return-thunk damage + - x86,objtool: Create .return_sites + - objtool: skip non-text sections when adding return-thunk sites + - x86,static_call: Use alternative RET encoding + - x86/ftrace: Use alternative RET encoding + - x86/bpf: Use alternative RET encoding + - x86/kvm: Fix SETcc emulation for return thunks + - x86/vsyscall_emu/64: Don't use RET in vsyscall emulation + - x86/sev: Avoid using __x86_return_thunk + - x86: Use return-thunk in asm code + - x86/entry: Avoid very early RET + - objtool: Treat .text.__x86.* as noinstr + - x86: Add magic AMD return-thunk + - x86/bugs: Report AMD retbleed vulnerability + - x86/bugs: Add AMD retbleed= boot parameter + - x86/bugs: Enable STIBP for JMP2RET + - x86/bugs: Keep a per-CPU IA32_SPEC_CTRL value + - x86/entry: Add kernel IBRS implementation + - x86/bugs: Optimize SPEC_CTRL MSR writes + - x86/speculation: Add spectre_v2=ibrs option to support Kernel IBRS + - x86/bugs: Split spectre_v2_select_mitigation() and + spectre_v2_user_select_mitigation() + - x86/bugs: Report Intel retbleed vulnerability + - intel_idle: Disable IBRS during long idle + - objtool: Update Retpoline validation + - x86/xen: Rename SYS* entry points + - x86/xen: Add UNTRAIN_RET + - x86/bugs: Add retbleed=ibpb + - x86/bugs: Do IBPB fallback check only once + - objtool: Add entry UNRET validation + - x86/cpu/amd: Add Spectral Chicken + - x86/speculation: Fix RSB filling with CONFIG_RETPOLINE=n + - x86/speculation: Fix firmware entry SPEC_CTRL handling + - x86/speculation: Fix SPEC_CTRL write on SMT state change + - x86/speculation: Use cached host SPEC_CTRL value for guest entry/exit + - x86/speculation: Remove x86_spec_ctrl_mask + - objtool: Re-add UNWIND_HINT_{SAVE_RESTORE} + - KVM: VMX: Flatten __vmx_vcpu_run() + - KVM: VMX: Convert launched argument to flags + - KVM: VMX: Prevent guest RSB poisoning attacks with eIBRS + - KVM: VMX: Fix IBRS handling after vmexit + - x86/speculation: Fill RSB on vmexit for IBRS + - KVM: VMX: Prevent RSB underflow before vmenter + - x86/common: Stamp out the stepping madness + - x86/cpu/amd: Enumerate BTC_NO + - x86/retbleed: Add fine grained Kconfig knobs + - x86/bugs: Add Cannon lake to RETBleed affected CPU list + - x86/entry: Move PUSH_AND_CLEAR_REGS() back into error_entry + - x86/bugs: Do not enable IBPB-on-entry when IBPB is not supported + - x86/kexec: Disable RET on kexec + - x86/speculation: Disable RRSBA behavior + - [Config]: Enable speculation mitigations + - x86/static_call: Serialize __static_call_fixup() properly + - x86/asm/32: Fix ANNOTATE_UNRET_SAFE use on 32-bit + - x86/bugs: Mark retbleed_strings static + - x86/entry: Remove UNTRAIN_RET from native_irq_return_ldt + - x86/kvm: fix FASTOP_SIZE when return thunks are enabled + - x86/speculation: Use DECLARE_PER_CPU for x86_spec_ctrl_current + - KVM: emulate: do not adjust size of fastop and setcc subroutines + - x86/bugs: Remove apostrophe typo + - efi/x86: use naked RET on mixed mode call wrapper + + -- Luke Nowakowski-Krijger Fri, 29 Jul 2022 12:56:08 -0700 + linux-hwe-5.15 (5.15.0-43.46~20.04.1) focal; urgency=medium * focal/linux-hwe-5.15: 5.15.0-43.46~20.04.1 -proposed tracker (LP: #1981242) diff -u linux-hwe-5.15-5.15.0/debian.hwe-5.15/config/config.common.ubuntu linux-hwe-5.15-5.15.0/debian.hwe-5.15/config/config.common.ubuntu --- linux-hwe-5.15-5.15.0/debian.hwe-5.15/config/config.common.ubuntu +++ linux-hwe-5.15-5.15.0/debian.hwe-5.15/config/config.common.ubuntu @@ -1532,6 +1532,7 @@ CONFIG_CC_HAS_INT128=y CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_CC_HAS_RETURN_THUNK=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y CONFIG_CC_HAS_SANE_STACKPROTECTOR=y CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y @@ -2151,6 +2152,8 @@ CONFIG_CPU_FREQ_THERMAL=y CONFIG_CPU_HAS_ASID=y # CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +CONFIG_CPU_IBPB_ENTRY=y +CONFIG_CPU_IBRS_ENTRY=y # CONFIG_CPU_ICACHE_DISABLE is not set CONFIG_CPU_ICACHE_MISMATCH_WORKAROUND=y CONFIG_CPU_IDLE=y @@ -2177,6 +2180,7 @@ CONFIG_CPU_THERMAL=y CONFIG_CPU_THUMB_CAPABLE=y CONFIG_CPU_TLB_V7=y +CONFIG_CPU_UNRET_ENTRY=y CONFIG_CPU_V7=y CONFIG_CRAMFS_BLOCKDEV=y CONFIG_CRAMFS_MTD=y @@ -8828,6 +8832,7 @@ CONFIG_RESET_TI_SYSCON=m CONFIG_RESET_UNIPHIER=m CONFIG_RESET_UNIPHIER_GLUE=m +CONFIG_RETHUNK=y CONFIG_RETPOLINE=y CONFIG_RETU_WATCHDOG=m CONFIG_RFD77402=m @@ -10666,6 +10671,7 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m +CONFIG_SPECULATION_MITIGATIONS=y CONFIG_SPI_ALTERA=m CONFIG_SPI_ALTERA_CORE=m CONFIG_SPI_ALTERA_DFL=m diff -u linux-hwe-5.15-5.15.0/debian.master/abi/abiname linux-hwe-5.15-5.15.0/debian.master/abi/abiname --- linux-hwe-5.15-5.15.0/debian.master/abi/abiname +++ linux-hwe-5.15-5.15.0/debian.master/abi/abiname @@ -1 +1 @@ -41 +43 diff -u linux-hwe-5.15-5.15.0/debian.master/abi/amd64/generic linux-hwe-5.15-5.15.0/debian.master/abi/amd64/generic --- linux-hwe-5.15-5.15.0/debian.master/abi/amd64/generic +++ linux-hwe-5.15-5.15.0/debian.master/abi/amd64/generic @@ -6624,6 +6624,7 @@ EXPORT_SYMBOL vmlinux 0x1a31b7e0 agp_find_bridge EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled EXPORT_SYMBOL vmlinux 0x1a63af34 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x1a6b9596 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x1a79c8e9 __x86_indirect_thunk_r13 EXPORT_SYMBOL vmlinux 0x1a7bef1f proc_set_user EXPORT_SYMBOL vmlinux 0x1a871737 tcp_md5_do_del @@ -8153,7 +8154,6 @@ EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch EXPORT_SYMBOL vmlinux 0x5ed90adc int_to_scsilun EXPORT_SYMBOL vmlinux 0x5ee0645e vfs_parse_fs_param -EXPORT_SYMBOL vmlinux 0x5eec129a pcie_port_service_register EXPORT_SYMBOL vmlinux 0x5eee368b inet6_release EXPORT_SYMBOL vmlinux 0x5ef6a672 gen_pool_for_each_chunk EXPORT_SYMBOL vmlinux 0x5efde8e6 proc_doulongvec_ms_jiffies_minmax @@ -8381,7 +8381,6 @@ EXPORT_SYMBOL vmlinux 0x68afed12 filemap_map_pages EXPORT_SYMBOL vmlinux 0x68c4b824 cpumask_any_but EXPORT_SYMBOL vmlinux 0x68d9ed59 fwnode_mdiobus_register_phy -EXPORT_SYMBOL vmlinux 0x68da0e1c pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x68e1d2a9 thaw_super EXPORT_SYMBOL vmlinux 0x68e5b664 security_inode_setsecctx EXPORT_SYMBOL vmlinux 0x68e9292a nvdimm_namespace_disk_name @@ -8426,6 +8425,7 @@ EXPORT_SYMBOL vmlinux 0x6a8d13a8 crypto_sha256_update EXPORT_SYMBOL vmlinux 0x6aa11aa6 sgl_free_n_order EXPORT_SYMBOL vmlinux 0x6aa8cddf config_item_set_name +EXPORT_SYMBOL vmlinux 0x6ac18d68 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x6ac774d7 flow_indr_dev_unregister EXPORT_SYMBOL vmlinux 0x6acd088a qdisc_hash_add EXPORT_SYMBOL vmlinux 0x6adc7663 dma_map_sg_attrs @@ -16072,67 +16072,67 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf9eb813f ntb_transport_unregister_client_dev EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x2c451193 async_pmem_flush EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x949c16c0 virtio_pmem_host_ack -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x01bad6a9 nvme_wait_freeze_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x01bc9c17 nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x024c89bd nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x01647d60 nvme_wait_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x02fc8d7f __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x04c7426f nvme_wait_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0c1d667a nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0541fa0e nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x10a5bf9c nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x13215d08 nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x14e6ded8 nvme_alloc_request +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x17d1198b nvme_kill_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1a290d85 nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x206b9dea nvme_wait_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2592d6d3 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2b63a1b0 nvme_sync_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x32e37f68 nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x32e82f15 nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x367fcb70 nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x30130b4f nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x366bcf84 nvme_reset_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3bf2393a __SCT__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x42caf98f nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x43b2698f __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x46368f18 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x46b5ae1b nvme_remove_namespaces EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4aa6ddb9 nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x507b4f99 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5bedb1fc nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5c7f1671 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x607306b3 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4a816baf nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5c1c8623 nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5cd93d1a nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5d87e078 nvme_cancel_admin_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x69585ce2 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6642a2b5 nvme_wait_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6b89faca nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6df88029 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x72a1bc2e nvme_setup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x73ed6586 nvme_cancel_admin_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x75afd4e7 nvme_stop_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x78c99120 nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7c861f9a nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6bded66e nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x75f34e16 nvme_change_ctrl_state EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8477b488 nvme_fail_nonready_command EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x84e782ee nvme_cleanup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a9c70ed nvme_sec_submit -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x92a72c1c nvme_start_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x979cb5a4 nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9e9550aa nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8abd4311 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8bf35424 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x93febc8c nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9a27979f nvme_wait_freeze_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa5e9665c nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbc3add39 nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa89eae41 nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb45414e6 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc4a4b830 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc6ab82c9 nvme_init_ctrl_finish EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc991c03f __SCK__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xca4269f3 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcf390e60 nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcf887107 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd0df2865 nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdad190f4 nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd9e6c799 nvme_cancel_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe40912e6 nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe51cd493 __nvme_check_ready -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xec90f57d nvme_sync_io_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf6ebc637 nvme_change_ctrl_state -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf9ac8b4e nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3862df26 nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x42d250c3 nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x46552e3d nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xec3d6a9c nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xed3a9186 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf3e275f3 nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfa0d1718 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0896fbd4 nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1cd53b8b nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1d9a313f nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x27c70180 nvmf_get_address EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x51c659eb nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x5b0becbe nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8031454e nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x834455d6 nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa64960da nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa9fd840b nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb5ac7be2 nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb712bf41 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x57ff1cda nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6894b645 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x7cb83a31 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x97188d4d nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xc987e16e nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xee791941 nvmf_reg_read32 EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -26157,11 +26157,11 @@ MCB EXPORT_SYMBOL_GPL 0xd7868cd8 chameleon_parse_cells drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf52e38e7 mcb_alloc_dev drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x522d34e0 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x6828b026 nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x817482fb nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x81e9ba21 nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xadfd6722 nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xb2a80bbb nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xd7f3df8f nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xf3f081b8 nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xfcde2687 nvme_ctrl_from_file drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x030e5cd2 pmbus_set_update drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x03d19469 pmbus_get_fan_rate_device drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x0ff958ac pmbus_write_byte_data drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.master/abi/amd64/generic.modules linux-hwe-5.15-5.15.0/debian.master/abi/amd64/generic.modules --- linux-hwe-5.15-5.15.0/debian.master/abi/amd64/generic.modules +++ linux-hwe-5.15-5.15.0/debian.master/abi/amd64/generic.modules @@ -4520,6 +4520,7 @@ snd-acp3x-rn snd-acp5x-i2s snd-acp5x-pcm-dma +snd-acp6x-pdm-dma snd-ad1889 snd-ak4113 snd-ak4114 @@ -4634,6 +4635,7 @@ snd-oxygen-lib snd-pci-acp3x snd-pci-acp5x +snd-pci-acp6x snd-pcm snd-pcm-dmaengine snd-pcsp @@ -4662,6 +4664,7 @@ snd-soc-acp-da7219mx98357-mach snd-soc-acp-rt5645-mach snd-soc-acp-rt5682-mach +snd-soc-acp6x-mach snd-soc-acpi snd-soc-acpi-intel-match snd-soc-adau-utils diff -u linux-hwe-5.15-5.15.0/debian.master/abi/arm64/generic linux-hwe-5.15-5.15.0/debian.master/abi/arm64/generic --- linux-hwe-5.15-5.15.0/debian.master/abi/arm64/generic +++ linux-hwe-5.15-5.15.0/debian.master/abi/arm64/generic @@ -6952,7 +6952,6 @@ EXPORT_SYMBOL vmlinux 0x22d3b644 md_finish_reshape EXPORT_SYMBOL vmlinux 0x22d5412b fman_unregister_intr EXPORT_SYMBOL vmlinux 0x22db1603 mmc_get_card -EXPORT_SYMBOL vmlinux 0x22db8969 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x22eb6958 mmc_hw_reset EXPORT_SYMBOL vmlinux 0x23559c51 qman_oos_fq EXPORT_SYMBOL vmlinux 0x2358a854 pci_assign_resource @@ -8714,6 +8713,7 @@ EXPORT_SYMBOL vmlinux 0x7427a576 tty_port_close_start EXPORT_SYMBOL vmlinux 0x7429e20c kstrtos8 EXPORT_SYMBOL vmlinux 0x742cc851 fwnode_irq_get +EXPORT_SYMBOL vmlinux 0x7432fb0d pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x743af596 elv_rb_find EXPORT_SYMBOL vmlinux 0x743f4126 keygen_port_hashing_init EXPORT_SYMBOL vmlinux 0x7453d3e8 security_release_secctx @@ -10676,6 +10676,7 @@ EXPORT_SYMBOL vmlinux 0xcdc39c9e security_ismaclabel EXPORT_SYMBOL vmlinux 0xcde77bcc free_opal_dev EXPORT_SYMBOL vmlinux 0xcdf58403 netdev_lower_get_next_private +EXPORT_SYMBOL vmlinux 0xcdfc0797 pcie_port_service_register EXPORT_SYMBOL vmlinux 0xcdfdf00e blk_rq_map_integrity_sg EXPORT_SYMBOL vmlinux 0xce036f24 sg_split EXPORT_SYMBOL vmlinux 0xce0ada29 netdev_has_upper_dev_all_rcu @@ -10714,7 +10715,6 @@ EXPORT_SYMBOL vmlinux 0xcfaa2910 sk_send_sigurg EXPORT_SYMBOL vmlinux 0xcfbc2141 neigh_xmit EXPORT_SYMBOL vmlinux 0xcfbf49db __dynamic_dev_dbg -EXPORT_SYMBOL vmlinux 0xcfc6e3f7 pcie_port_service_register EXPORT_SYMBOL vmlinux 0xcfc9deaf atomic_dec_and_mutex_lock EXPORT_SYMBOL vmlinux 0xcfd884a8 __hsiphash_unaligned EXPORT_SYMBOL vmlinux 0xcfdb53a7 rproc_elf_sanity_check @@ -15866,66 +15866,66 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf9eb813f ntb_transport_unregister_client_dev EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x90c1bb72 async_pmem_flush EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0xaaa39429 virtio_pmem_host_ack -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x045e5f5e nvme_stop_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0e149bdf nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0036994e nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x051d8b66 nvme_sync_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x14293a6d __nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x15d9f442 nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x17143280 nvme_cancel_request EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x17c77780 nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1c94ffca nvme_setup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x220765fa __nvme_check_ready -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x27b721cd nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2837037a nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3018b9f4 nvme_start_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x37622411 nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3d983144 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x19f27da7 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x23496bc4 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3b4aa9aa nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3cbf019e nvme_cancel_admin_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x509daaaf nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x515f27df nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5d665feb nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49379d2a nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4d0e4e32 nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55b2057d nvme_fail_nonready_command +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6167782e nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x633220c5 nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6e20e4c5 nvme_uninit_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d63d8ef nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x65a93a74 nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6ddd45c7 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7ebb52e6 nvme_disable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x843ab7f9 nvme_alloc_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x876c1bfb nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a43ea39 nvme_wait_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a9c70ed nvme_sec_submit EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e7ec2b6 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ebcfb27 nvme_cancel_admin_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x97ec3e9f nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x97fa2233 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xab25f652 nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xae210b43 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9dec6a1d nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9fe96ea6 nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa3167454 nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaa6f0ca9 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xad6e8d75 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaec643bc nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaf109762 nvme_init_ctrl_finish EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb1fbde88 nvme_cleanup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbcc80ff4 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbd3fee59 nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc152f183 nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xccb939ef nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbf3dc3fb nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc2f487de nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc6f5fcb6 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc8736fde nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc9c7fa49 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcb24c327 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcb4f556f nvme_change_ctrl_state EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd0a20744 nvme_host_path_error EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd6770807 nvme_unfreeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd8087e70 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe95af68e nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd7043a58 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd78e87ac nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdbf9ebae nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe3708324 nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe9fbc336 nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xebdf26c4 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf2223a70 nvme_wait_freeze_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf699697b nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf9458620 nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfbd241c3 nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3e139b98 nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x47c83e05 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfcc5741a nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x08eb5c85 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3a210421 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3a4eac2d nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3eb33739 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x4596b2d5 nvmf_get_address EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x51c659eb nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x530fceb8 nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x606d5a80 nvmf_unregister_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x63be053c nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x859086e8 nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8fc74eda nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9917a21a nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf10090a1 nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf603a1bc nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x5327de0d nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x5dbcf914 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xdecce5a2 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf9e06ced nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xfd15bab5 nvmf_connect_io_queue EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -26402,11 +26402,11 @@ MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf3811d54 mcb_alloc_dev drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xfff2fa58 mcb_device_register drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x45aba3d1 nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x7954598c nvme_find_get_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x9b33d013 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x273033e3 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x51fb3fee nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x65eb1ef8 nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xa59785d5 nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xdafccc3b nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xbefb8674 nvme_command_effects drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x06e5b619 pmbus_update_byte_data drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x0f1c9111 pmbus_get_fan_rate_device drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x182c4374 pmbus_get_driver_info drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.master/abi/arm64/generic-64k linux-hwe-5.15-5.15.0/debian.master/abi/arm64/generic-64k --- linux-hwe-5.15-5.15.0/debian.master/abi/arm64/generic-64k +++ linux-hwe-5.15-5.15.0/debian.master/abi/arm64/generic-64k @@ -8028,7 +8028,6 @@ EXPORT_SYMBOL vmlinux 0x550a50d4 gnet_stats_start_copy_compat EXPORT_SYMBOL vmlinux 0x550d1e0b submit_bio_wait EXPORT_SYMBOL vmlinux 0x551bd071 __rb_erase_color -EXPORT_SYMBOL vmlinux 0x551eb2e8 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x552db3aa qman_query_cgr_congested EXPORT_SYMBOL vmlinux 0x5535875f pci_select_bars EXPORT_SYMBOL vmlinux 0x554ae3a4 irq_poll_sched @@ -9271,6 +9270,7 @@ EXPORT_SYMBOL vmlinux 0x8be7ee7f mroute6_is_socket EXPORT_SYMBOL vmlinux 0x8c005a5e mipi_dsi_dcs_set_display_on EXPORT_SYMBOL vmlinux 0x8c0e722b of_match_node +EXPORT_SYMBOL vmlinux 0x8c0f15a8 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x8c26d495 prepare_to_wait_event EXPORT_SYMBOL vmlinux 0x8c4337c3 jbd2_journal_submit_inode_data_buffers EXPORT_SYMBOL vmlinux 0x8c512f5a pipe_lock @@ -10810,7 +10810,6 @@ EXPORT_SYMBOL vmlinux 0xd27b25dd blk_check_plugged EXPORT_SYMBOL vmlinux 0xd2800691 nf_conntrack_destroy EXPORT_SYMBOL vmlinux 0xd289254d netdev_reset_tc -EXPORT_SYMBOL vmlinux 0xd28a7cdc pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0xd29e205f netdev_class_create_file_ns EXPORT_SYMBOL vmlinux 0xd2b36869 icmp6_send EXPORT_SYMBOL vmlinux 0xd2b47ca4 pci_match_id @@ -11267,6 +11266,7 @@ EXPORT_SYMBOL vmlinux 0xe691ac7f ZSTD_decompressBegin EXPORT_SYMBOL vmlinux 0xe692a9b7 tcp_getsockopt EXPORT_SYMBOL vmlinux 0xe694a649 udp_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0xe69f705e pcie_port_service_register EXPORT_SYMBOL vmlinux 0xe6b0a728 rproc_coredump_add_custom_segment EXPORT_SYMBOL vmlinux 0xe6b1cf5b blk_queue_max_segment_size EXPORT_SYMBOL vmlinux 0xe6b9a663 tty_register_device @@ -15863,66 +15863,66 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xfa425126 ntb_transport_unregister_client EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x9b0d5816 async_pmem_flush EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0xb8abaacc virtio_pmem_host_ack -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x046cac27 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x02700aee nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0566849b nvme_unfreeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x06f515ae nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x078a216d nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x07d5f4fe nvme_uninit_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0d6346d3 nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0eefb3f5 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0752edf7 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1019e5c8 nvme_fail_nonready_command EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x181e178a __nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1cb2ae5a nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x20b14560 nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x222dda6c nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x287998fd nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x32ba861b nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x36abcc2f nvme_setup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x41d1d7f1 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x19c69c26 nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1deddc33 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2df1a8db nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x424c7dd8 nvme_wait_freeze_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x50835e83 nvme_wait_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x565e382f nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x591e25a4 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4ea92098 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5884715e nvme_shutdown_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x66ba36d0 nvme_complete_rq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x689a81d2 nvme_alloc_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6baf0513 nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x78c41ef0 nvme_start_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7929bcf1 nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7ad54df6 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x692e6ff1 nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x797167a1 nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d3d6f33 nvme_uninit_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x885c3d41 nvme_shutdown_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a9c70ed nvme_sec_submit EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e7ec2b6 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x93e8d938 nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x948e50d6 nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e9d6e47 nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8fe49ffe nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x957b1a75 nvme_start_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x974b1473 nvme_cleanup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9a1d315c nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa0f05b1c nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x985fa534 nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x996ed054 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9cdbb974 nvme_remove_namespaces EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa787f0a8 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa965cc46 nvme_sync_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xad75594b nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xae58a100 nvme_stop_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbb520ab1 nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcd111cf6 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd06053e1 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbb9b89d0 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc0be1cf3 nvme_enable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc4f39d4d nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc55f58f5 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc8fb5b64 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xca5a76f6 nvme_stop_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58b2c2d nvme_reset_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdb34a3cf nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe096a44d nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe91a356c nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf7bcc22a __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdce85f06 nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe1d97f97 nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe8014c97 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe8e61bba nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xea42f092 nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xeb1cb7db nvme_complete_async_event EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf8dc10bb nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0b48dfdb nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x21dc7790 nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x25dead4d nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x2cbe3cb1 nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3a0f2a92 nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xff40e631 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x088e77a2 nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0c48758f nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x4a7d5b59 nvmf_reg_read32 EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x51c659eb nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8f1b5cfb nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x95df54db nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xcc190d6b nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xd7772216 nvmf_unregister_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xe4acbe6d nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x5ddb1ea7 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x604cd042 nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x90a2acec nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x963f5468 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9e730d5f nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xc3db47f2 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xcf0cb656 nvmf_unregister_transport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -26398,11 +26398,11 @@ MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf3811d54 mcb_alloc_dev drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xfff2fa58 mcb_device_register drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x07f96d5d nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x7d9f002c nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x8ce7df01 nvme_command_effects drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xad6c2879 nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x20e89325 nvme_put_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xb4cdc733 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xce41fb0d nvme_command_effects drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xd4a30eca nvme_execute_passthru_rq drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe2b2583e nvme_find_get_ns drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x157eb2a8 pmbus_check_word_register drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x1681b591 pmbus_clear_cache drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x20df9b4e pmbus_read_byte_data drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.master/abi/armhf/generic linux-hwe-5.15-5.15.0/debian.master/abi/armhf/generic --- linux-hwe-5.15-5.15.0/debian.master/abi/armhf/generic +++ linux-hwe-5.15-5.15.0/debian.master/abi/armhf/generic @@ -6132,6 +6132,7 @@ EXPORT_SYMBOL vmlinux 0x086253a7 ioremap_cache EXPORT_SYMBOL vmlinux 0x087033fc elv_rb_former_request EXPORT_SYMBOL vmlinux 0x0882a449 security_xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x088fdf11 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x089990ad devfreq_remove_device EXPORT_SYMBOL vmlinux 0x08a411b0 devfreq_add_device EXPORT_SYMBOL vmlinux 0x08bb5b69 make_kuid @@ -6767,7 +6768,6 @@ EXPORT_SYMBOL vmlinux 0x258d2f76 net_dim_get_tx_moderation EXPORT_SYMBOL vmlinux 0x2595cb83 devfreq_resume_device EXPORT_SYMBOL vmlinux 0x259c836c kthread_associate_blkcg -EXPORT_SYMBOL vmlinux 0x25ac2359 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x25ae3200 snd_card_file_remove EXPORT_SYMBOL vmlinux 0x25e58a09 hdmi_avi_infoframe_init EXPORT_SYMBOL vmlinux 0x25e9d4bd resource_list_free @@ -7430,6 +7430,7 @@ EXPORT_SYMBOL vmlinux 0x456bdd1f pci_enable_device_mem EXPORT_SYMBOL vmlinux 0x4578f528 __kfifo_to_user EXPORT_SYMBOL vmlinux 0x4583a245 snd_register_device +EXPORT_SYMBOL vmlinux 0x458798b8 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x458877fb sk_common_release EXPORT_SYMBOL vmlinux 0x4589861a phy_attached_info EXPORT_SYMBOL vmlinux 0x45a1f0f1 __skb_warn_lro_forwarding @@ -8063,7 +8064,6 @@ EXPORT_SYMBOL vmlinux 0x6228c21f smp_call_function_single EXPORT_SYMBOL vmlinux 0x622b52ed of_node_name_prefix EXPORT_SYMBOL vmlinux 0x622db8b3 filp_open -EXPORT_SYMBOL vmlinux 0x62558adf pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x6257f939 vme_irq_request EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister EXPORT_SYMBOL vmlinux 0x627fa67a md_reap_sync_thread @@ -15330,66 +15330,66 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xd8b2d890 ntb_transport_unregister_client EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf55d6313 ntb_transport_register_client_dev EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf9eb813f ntb_transport_unregister_client_dev +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x006f2f31 nvme_setup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x013f1a0f nvme_alloc_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0f7f9c74 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x09587581 nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1fa9faba nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x24a69ab0 nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x260023f8 nvme_wait_freeze_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2d57f86f nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2ec6b825 __nvme_check_ready EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3822df32 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3cb7d1c8 nvme_sync_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3d6804d3 __nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x40d6787c nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x43aeb7f8 nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x46535e8a nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x47ea9a81 nvme_try_sched_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4d96ea0e nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x51e7242b nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55be7a32 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x50021e7e nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x527b467b nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x53700774 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5692b48a nvme_init_ctrl_finish EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5882b5a5 nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5c4146e1 nvme_unfreeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5dc35dcc nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5f0be6fa nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x68d4a4db nvme_set_queue_count EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6bdf8acc nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6f18ab59 nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x73cebc0d nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7569a956 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6cf7b68c nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d27b09a nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7e0b21e4 nvme_stop_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8690e61e nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x838fe4f8 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x85af91ca __nvme_check_ready EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ab19397 nvme_sec_submit -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8b0c728b nvme_try_sched_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ef93e55 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9c4236a3 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa96730e9 nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb21cc25d nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8db027d9 nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x914ca023 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x99810cd9 nvme_fail_nonready_command +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa6693148 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa7566b4a nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xad9ddbb1 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb4ecca2a nvme_change_ctrl_state EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbd0f2f71 nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbd5f0705 nvme_sync_io_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc0a74815 nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc6df5b53 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc6fa4780 nvme_change_ctrl_state -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc7956561 nvme_start_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc9a09cf7 nvme_start_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcc92c25c nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc28dcfa9 nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcad843f1 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd3c11350 nvme_wait_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd5f5f496 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd911a6ed nvme_stop_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdcafb566 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xde8e2aae nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdd629756 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdfaf9431 nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe0df2b70 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe2c126c9 nvme_reset_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe2da98db nvme_cleanup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe3007edf nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xee4f0ae2 nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xffccbf7c nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe734ead6 nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf520bc13 nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x044d6b41 nvmf_get_address EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0e1f31fe nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x3d87edcf nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x4e48a0bf nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8877da98 nvmf_unregister_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8f5a4a8d nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa0d38d07 nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xba5ccea5 nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xca288047 nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xde7337ef nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf117c8e7 nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xfb90ee7e nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x174f63de nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x4f7d5ecd nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6a44e6a2 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9b09b7cf nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9f6e5cec nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa0bcc308 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xae0c2770 nvmf_ip_options_match +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb6a92aa2 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xde4b2469 nvmf_register_transport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -25206,10 +25206,10 @@ MCB EXPORT_SYMBOL_GPL 0xe9bbc91b mcb_free_dev drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xefccda8e mcb_bus_get drivers/mcb/mcb NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x15265c47 nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x2730d50d nvme_find_get_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x43dbdc34 nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x6654a805 nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x89969894 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x2cbbc056 nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x70d6e076 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x8ba7ac73 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xa0bd2913 nvme_put_ns drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x1d1d0158 pmbus_write_byte_data drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x1f932420 pmbus_update_byte_data drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x3455a5ef pmbus_get_fan_rate_device drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.master/abi/armhf/generic-lpae linux-hwe-5.15-5.15.0/debian.master/abi/armhf/generic-lpae --- linux-hwe-5.15-5.15.0/debian.master/abi/armhf/generic-lpae +++ linux-hwe-5.15-5.15.0/debian.master/abi/armhf/generic-lpae @@ -5948,6 +5948,7 @@ EXPORT_SYMBOL vmlinux 0x0377e5da param_set_ullong EXPORT_SYMBOL vmlinux 0x037a0cba kfree EXPORT_SYMBOL vmlinux 0x03815f35 ledtrig_disk_activity +EXPORT_SYMBOL vmlinux 0x038d9300 pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x0397edd5 fb_edid_to_monspecs EXPORT_SYMBOL vmlinux 0x03ac9a1b device_match_acpi_dev EXPORT_SYMBOL vmlinux 0x03ac9f7e __put_page @@ -7596,7 +7597,6 @@ EXPORT_SYMBOL vmlinux 0x4f256848 param_set_bint EXPORT_SYMBOL vmlinux 0x4f2b2b5b config_item_get EXPORT_SYMBOL vmlinux 0x4f337455 of_io_request_and_map -EXPORT_SYMBOL vmlinux 0x4f64a882 pcie_port_service_register EXPORT_SYMBOL vmlinux 0x4f816e9b snd_pcm_format_big_endian EXPORT_SYMBOL vmlinux 0x4f881a21 sock_alloc_send_pskb EXPORT_SYMBOL vmlinux 0x4f89c9de gpmc_cs_free @@ -7872,6 +7872,7 @@ EXPORT_SYMBOL vmlinux 0x5c9284a0 processor_id EXPORT_SYMBOL vmlinux 0x5cabd087 dquot_free_inode EXPORT_SYMBOL vmlinux 0x5cb8b20f ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x5cbc8ffd pcie_port_service_register EXPORT_SYMBOL vmlinux 0x5cbd8e69 __crc32c_le EXPORT_SYMBOL vmlinux 0x5cbf71de dst_destroy EXPORT_SYMBOL vmlinux 0x5cc70fc5 sock_no_sendmsg_locked @@ -8020,7 +8021,6 @@ EXPORT_SYMBOL vmlinux 0x6317cd29 nand_ecc_get_on_die_hw_engine EXPORT_SYMBOL vmlinux 0x63187451 pcie_aspm_support_enabled EXPORT_SYMBOL vmlinux 0x631d06aa cpu_rmap_put -EXPORT_SYMBOL vmlinux 0x6324428e pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x6342f99f mipi_dsi_create_packet EXPORT_SYMBOL vmlinux 0x6346f51d is_bad_inode EXPORT_SYMBOL vmlinux 0x634f2ead nexthop_set_hw_flags @@ -15231,65 +15231,65 @@ EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x291a1254 async_pmem_flush EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0xe853c04c virtio_pmem_host_ack EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x016fe35d nvme_cleanup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0479f811 nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x066a40d0 nvme_uninit_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x085adf01 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x02575c33 nvme_set_queue_count +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0ecb6480 nvme_uninit_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x14b2bc14 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1624f562 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2cdddd54 __nvme_check_ready -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2f4b07e8 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1abe42f6 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x219f5670 nvme_enable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x24846647 nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x330ba55a nvme_wait_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x34dc0cc3 __nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x356692dc nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x36dd10e2 nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3a5e905e nvme_change_ctrl_state -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3e3bbf28 nvme_start_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3ed11b90 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x35d55267 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x38cc49b7 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x392a464f nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x39f507d6 nvme_start_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4a54a77d nvme_start_freeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4ece8ff2 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4f742fab nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x51871706 nvme_unfreeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x647fd3c1 nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55930eb0 nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x59e9c609 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5cf5a7bc nvme_disable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x76ac7ef6 nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x76fc040d nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6b691ba6 nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6f033a07 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x733caa83 nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7dcb38fd nvme_fail_nonready_command EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8414c349 nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x819bf917 nvme_stop_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x849ae4b0 nvme_submit_sync_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ab19397 nvme_sec_submit -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ebd0c7c nvme_setup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x94d597ec nvme_host_path_error +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x94e6dee5 __nvme_check_ready EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x95ed9b82 nvme_alloc_request EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9b68c902 nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9df451ac nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9e149c20 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9d0543e2 nvme_setup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9f72d542 nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa61793d9 nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbeaa7039 nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc4ca9356 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd1102b20 nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa30ed72f nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb4108a28 nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xba9ca957 nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbc1bd2cc nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc0b4cbbe nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc3b4e38d nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc77a5afa nvme_sync_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd81c46c4 nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd9e1ae07 nvme_sync_io_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdaf6ae1d nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdb4cf2d5 nvme_wait_freeze_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdcafb566 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe8065b7f nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xea010c6f nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf86f42a8 nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfca005c3 nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe3ae8c35 nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe9437513 nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xeae1e4ab nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xefec83b1 nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf787fd1a nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x07d87712 nvmf_ip_options_match EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0e1f31fe nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x0fd96035 nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1a50e2cf nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1ac84010 nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x50525cec nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x73893635 nvmf_unregister_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb150373d nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xc16fe2fa nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xdd7f90f7 nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf2678f84 nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf9621a8e nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1aa33ef7 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x296f490d nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x47b77984 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x7b91ff22 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb3cd43a3 nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb615b469 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xbe941924 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xbf5bcbc7 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xd0d54abd nvmf_reg_read32 EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -25033,11 +25033,11 @@ MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf2818b40 mcb_unregister_driver drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf5b7441f mcb_alloc_bus drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x12ed6007 nvme_command_effects drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x46f624d8 nvme_put_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x83955da9 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x633c2667 nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xb7944f50 nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe7b8afbc nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xd1a215ae nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe5bcc051 nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe65356b0 nvme_command_effects drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x0df2846d pmbus_read_word_data drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x15e2a822 pmbus_write_byte drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x264fcd83 pmbus_read_byte_data drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.master/abi/ppc64el/generic linux-hwe-5.15-5.15.0/debian.master/abi/ppc64el/generic --- linux-hwe-5.15-5.15.0/debian.master/abi/ppc64el/generic +++ linux-hwe-5.15-5.15.0/debian.master/abi/ppc64el/generic @@ -15185,66 +15185,66 @@ EXPORT_SYMBOL_GPL drivers/ntb/ntb_transport 0xf9eb813f ntb_transport_unregister_client_dev EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x5766127c virtio_pmem_host_ack EXPORT_SYMBOL_GPL drivers/nvdimm/nd_virtio 0x75a93c59 async_pmem_flush -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0e25450f nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x049e48a9 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x06ad4231 nvme_uninit_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x142b58c9 nvme_change_ctrl_state EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1615b9aa nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x18cf5ef6 nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1d537309 nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1f127e71 nvme_enable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x188fd984 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x20e407e3 nvme_disable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x289f27cc nvme_complete_rq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x29e3ae06 __traceiter_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2aed5862 nvme_sync_io_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2d44e984 nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2fa9d383 nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x301c4f13 nvme_sync_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x32f1f80f nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2a6bcf04 nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3b46e2f9 nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3ffcc5d5 nvme_get_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x426dc3fc nvme_set_features EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x42728816 nvme_cleanup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x431ff499 nvme_try_sched_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x446d3988 nvme_setup_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x50fe5ce6 nvme_cancel_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x52b2359b nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5407141b nvme_start_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55b09db7 nvme_try_sched_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5a7701b7 nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5fdc0a2c nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6162d895 nvme_start_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6187bd4f nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5e6b0afa nvme_cancel_admin_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6bb8a596 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x72ae9a05 nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x74948617 nvme_set_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x774719f5 nvme_kill_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x68be9475 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6c2a0e3b nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6e92b9d3 nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x72a8558b nvme_stop_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d274c10 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7d92991f nvme_reset_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x81675055 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x89340783 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x838d9f5b nvme_init_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x87558688 nvme_unfreeze EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8a9c70ed nvme_sec_submit EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e7ec2b6 __tracepoint_nvme_sq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8ebec7d6 nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x95888e8a nvme_cancel_admin_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x97e4e08e nvme_wait_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa137f0a2 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb4125a20 nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb861ed88 nvme_stop_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc846db84 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x99ad338a nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa7a1d774 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb4037607 nvme_cancel_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb9a28a8d nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbafb35f5 nvme_enable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbddb34ae nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbed53111 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc4bafad0 nvme_wait_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd285690f __nvme_submit_sync_cmd EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdcf894f6 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdf6e0dd3 nvme_set_queue_count EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe025260f nvme_alloc_request -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe53c49a3 __nvme_check_ready -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe892c43d nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf468ec60 nvme_start_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xff8a3ea7 nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x07b97e22 nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x110abd3d nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x144c475c nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x2172e511 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe242d922 nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe6635fe3 nvme_fail_nonready_command +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf069b0ef nvme_start_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf9c82c25 nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1abcfc25 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x29d07a07 nvmf_reg_read64 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x327c2b31 nvmf_ip_options_match EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x51c659eb nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6004b02a nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x913ae467 nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9d68a99f nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xbc98636f nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xe0b7d496 nvmf_reg_read32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xef91d48c nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6d70903f nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x73ed2762 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9fe2f1a6 nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa67c530b nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb9b56c52 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xcf392120 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xdd9d24a7 nvmf_register_transport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -24589,11 +24589,11 @@ MCB EXPORT_SYMBOL_GPL 0xe4c97311 mcb_bus_add_devices drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xeb2c8905 mcb_release_mem drivers/mcb/mcb MCB EXPORT_SYMBOL_GPL 0xf3dfd5ea mcb_bus_get drivers/mcb/mcb -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x0d63537f nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x11822b2e nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x326e846c nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xd8e4a3a8 nvme_find_get_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe596945d nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xf6d950ae nvme_put_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x56612d1c nvme_ctrl_from_file drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x690cb422 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xc4a8f072 nvme_find_get_ns drivers/nvme/host/nvme-core PMBUS EXPORT_SYMBOL_GPL 0x0aa6e484 pmbus_regulator_ops drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x1986c01f pmbus_check_word_register drivers/hwmon/pmbus/pmbus_core PMBUS EXPORT_SYMBOL_GPL 0x1f25b3d9 pmbus_update_fan drivers/hwmon/pmbus/pmbus_core diff -u linux-hwe-5.15-5.15.0/debian.master/abi/s390x/generic linux-hwe-5.15-5.15.0/debian.master/abi/s390x/generic --- linux-hwe-5.15-5.15.0/debian.master/abi/s390x/generic +++ linux-hwe-5.15-5.15.0/debian.master/abi/s390x/generic @@ -3750,6 +3750,7 @@ EXPORT_SYMBOL vmlinux 0x3e058c30 debug_event_common EXPORT_SYMBOL vmlinux 0x3e3bad0a __tasklet_hi_schedule EXPORT_SYMBOL vmlinux 0x3e433a5d tty_port_close_start +EXPORT_SYMBOL vmlinux 0x3e56ba4f pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0x3e572682 __wake_up EXPORT_SYMBOL vmlinux 0x3e6a2e0f dev_addr_add EXPORT_SYMBOL vmlinux 0x3e731fc3 padata_alloc_shell @@ -5028,7 +5029,6 @@ EXPORT_SYMBOL vmlinux 0x8409a121 cookie_ecn_ok EXPORT_SYMBOL vmlinux 0x840a5f06 elv_rb_former_request EXPORT_SYMBOL vmlinux 0x841cc2f6 dma_fence_remove_callback -EXPORT_SYMBOL vmlinux 0x84682bff pcie_port_service_register EXPORT_SYMBOL vmlinux 0x846dff0d account_page_redirty EXPORT_SYMBOL vmlinux 0x847b3e18 ccw_device_get_id EXPORT_SYMBOL vmlinux 0x847f2373 dev_add_pack @@ -5836,6 +5836,7 @@ EXPORT_SYMBOL vmlinux 0xaf665a46 __check_sticky EXPORT_SYMBOL vmlinux 0xaf6f4c94 call_fib_notifiers EXPORT_SYMBOL vmlinux 0xaf7fcc34 tc_setup_cb_replace +EXPORT_SYMBOL vmlinux 0xaf96a515 pcie_port_service_register EXPORT_SYMBOL vmlinux 0xafa360c1 mark_buffer_dirty_inode EXPORT_SYMBOL vmlinux 0xafc2e479 scsi_target_resume EXPORT_SYMBOL vmlinux 0xafd8b174 vfs_getattr_nosec @@ -7163,7 +7164,6 @@ EXPORT_SYMBOL vmlinux 0xf7d71918 __kfifo_in_r EXPORT_SYMBOL vmlinux 0xf7e533ba scsi_alloc_sgtables EXPORT_SYMBOL vmlinux 0xf7f4ca9a igrab -EXPORT_SYMBOL vmlinux 0xf7fb16aa pcie_port_service_unregister EXPORT_SYMBOL vmlinux 0xf7fb8c69 xsk_tx_peek_release_desc_batch EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q EXPORT_SYMBOL vmlinux 0xf817a083 __blk_mq_end_request @@ -8132,66 +8132,66 @@ EXPORT_SYMBOL_GPL drivers/net/vxlan 0x3b2ed56b vxlan_dev_create EXPORT_SYMBOL_GPL drivers/net/vxlan 0xa8307805 vxlan_fdb_clear_offload EXPORT_SYMBOL_GPL drivers/net/vxlan 0xdfc2b1f1 vxlan_fdb_replay -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x031e67e3 nvme_delete_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x03641b37 nvme_change_ctrl_state -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x0a422792 nvme_fail_nonready_command -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11545020 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x02f45e4b nvme_init_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x11abc494 __SCK__tp_func_nvme_sq +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x144b97f0 nvme_kill_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x1597e57e nvme_cancel_request EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x22190e35 nvme_submit_sync_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2346c6a6 nvme_try_sched_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2508408e nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x238a895c nvme_cancel_admin_tagset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x27d87d3a nvme_start_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x28d09bff nvme_alloc_request +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2d163b8b nvme_set_queue_count EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x2fa55ced nvme_sec_submit -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x35650733 nvme_kill_queues -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x40cdf485 nvme_enable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x442249af nvme_set_queue_count -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4429061f nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x351dd9ef nvme_disable_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x3cb65956 nvme_stop_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x49224181 nvme_reset_wq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4abf4239 nvme_complete_rq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4fcc67b4 nvme_wait_reset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x506a3fc3 nvme_init_ctrl_finish -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x52763530 nvme_stop_keep_alive -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x55786bc7 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x4df5fb13 nvme_complete_async_event +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x519f4d56 nvme_init_ctrl_finish +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x53c0a379 nvme_fail_nonready_command EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x5d81a246 __traceiter_nvme_sq +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x608aab28 nvme_cancel_tagset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x64b62862 nvme_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6f5dc322 nvme_disable_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x71c3019f nvme_cancel_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x726d0ec4 nvme_unfreeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7525ace5 nvme_complete_async_event -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x777b4eed nvme_wait_freeze_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x7ae9f999 nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x66ba001e nvme_set_features +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x693b05a2 nvme_shutdown_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x69cedb04 nvme_stop_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x6f2f7607 nvme_start_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x779804a4 nvme_enable_ctrl EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x813cf212 nvme_io_timeout -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x81c6ab38 nvme_wait_freeze -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8999c4a6 nvme_sync_io_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x8e7ec2b6 __tracepoint_nvme_sq EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x99f96426 __nvme_submit_sync_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0x9c850010 nvme_start_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa33f4ac5 nvme_remove_namespaces +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xa5c4afd8 nvme_get_features EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaa6782f3 nvme_host_path_error -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb1727832 nvme_shutdown_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb1f2c3ad nvme_get_features -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb7a1dd71 nvme_init_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb8a8ca41 nvme_stop_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xba0d38fc nvme_remove_namespaces -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbdbab255 nvme_start_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcec34d2c __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xaafe6677 __nvme_check_ready +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xb8470831 nvme_reset_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbd908c18 nvme_unfreeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xbe28498a nvme_sync_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xc3288fc7 nvme_stop_keep_alive +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xcacd129f nvme_wait_reset +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd08bad88 nvme_try_sched_reset EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd45434ee admin_timeout EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd58bbbcb nvme_delete_wq -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd88f79f2 nvme_sync_queues EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xd9424a7a nvme_cleanup_cmd -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xdcfb0ccf nvme_reset_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf16250e7 nvme_cancel_admin_tagset -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf47cc08a nvme_uninit_ctrl -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x2b744552 nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe1afa43b nvme_uninit_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xe30faa7f nvme_setup_cmd +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xeac893cd nvme_delete_ctrl +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xed22ea9e nvme_wait_freeze +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xf36b2d3f nvme_wait_freeze_timeout +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xfbbbe6c2 nvme_change_ctrl_state +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-core 0xff3a3194 nvme_sync_io_queues +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x01b0b670 nvmf_get_address +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x1384af81 nvmf_connect_admin_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x17e78ecb nvmf_reg_write32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x28d2233a nvmf_register_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x2f2d5246 nvmf_reg_read64 EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x37e15190 nvmf_free_options -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x37f14e03 nvmf_reg_read64 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x53e4c32c nvmf_should_reconnect -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x6a2643b7 nvmf_reg_write32 -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8980fe35 nvmf_connect_io_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x8bcb47ea nvmf_get_address -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9bf48bb6 nvmf_register_transport -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xaea79117 nvmf_ip_options_match -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xc4471cfa nvmf_connect_admin_queue -EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xf160a869 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9983c93e nvmf_connect_io_queue +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0x9e8aeb41 nvmf_reg_read32 +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xa044abcc nvmf_unregister_transport +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xb08c7da9 nvmf_should_reconnect +EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fabrics 0xda0cad8d nvmf_ip_options_match EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x0d12e564 nvme_fc_register_remoteport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3884f8b8 nvme_fc_unregister_localport EXPORT_SYMBOL_GPL drivers/nvme/host/nvme-fc 0x3e33ac54 nvme_fc_rescan_remoteport @@ -13788,5 +13788,5 @@ -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x09e1f589 nvme_put_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x2899bc5c nvme_put_ns drivers/nvme/host/nvme-core NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x6bccdabc nvme_execute_passthru_rq drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xac197e2c nvme_ctrl_from_file drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xb8ec67c5 nvme_find_get_ns drivers/nvme/host/nvme-core -NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0xe0d67707 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x727b3555 nvme_find_get_ns drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x8fb4ad26 nvme_command_effects drivers/nvme/host/nvme-core +NVME_TARGET_PASSTHRU EXPORT_SYMBOL_GPL 0x9dd8b942 nvme_ctrl_from_file drivers/nvme/host/nvme-core diff -u linux-hwe-5.15-5.15.0/debian.master/abi/version linux-hwe-5.15-5.15.0/debian.master/abi/version --- linux-hwe-5.15-5.15.0/debian.master/abi/version +++ linux-hwe-5.15-5.15.0/debian.master/abi/version @@ -1 +1 @@ -5.15.0-41.44 +5.15.0-43.46 diff -u linux-hwe-5.15-5.15.0/debian.master/changelog linux-hwe-5.15-5.15.0/debian.master/changelog --- linux-hwe-5.15-5.15.0/debian.master/changelog +++ linux-hwe-5.15-5.15.0/debian.master/changelog @@ -1,3 +1,97 @@ +linux (5.15.0-45.48) jammy; urgency=medium + + * CVE-2022-29900 // CVE-2022-29901 + - x86/lib/atomic64_386_32: Rename things + - x86: Prepare asm files for straight-line-speculation + - x86: Prepare inline-asm for straight-line-speculation + - x86/alternative: Relax text_poke_bp() constraint + - kbuild: move objtool_args back to scripts/Makefile.build + - x86: Add straight-line-speculation mitigation + - kvm/emulate: Fix SETcc emulation function offsets with SLS + - crypto: x86/poly1305 - Fixup SLS + - objtool: Add straight-line-speculation validation + - objtool: Fix SLS validation for kcov tail-call replacement + - objtool: Fix objtool regression on x32 systems + - objtool: Fix symbol creation + - objtool: Introduce CFI hash + - objtool: Default ignore INT3 for unreachable + - x86, kvm: use proper ASM macros for kvm_vcpu_is_preempted + - x86/traps: Use pt_regs directly in fixup_bad_iret() + - x86/entry: Switch the stack after error_entry() returns + - x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry() + - x86/entry: Don't call error_entry() for XENPV + - x86/entry: Remove skip_r11rcx + - x86/realmode: build with -D__DISABLE_EXPORTS + - x86/ibt,ftrace: Make function-graph play nice + - x86/kvm/vmx: Make noinstr clean + - x86/cpufeatures: Move RETPOLINE flags to word 11 + - x86/retpoline: Cleanup some #ifdefery + - x86/retpoline: Swizzle retpoline thunk + - x86/retpoline: Use -mfunction-return + - x86: Undo return-thunk damage + - x86,objtool: Create .return_sites + - objtool: skip non-text sections when adding return-thunk sites + - x86,static_call: Use alternative RET encoding + - x86/ftrace: Use alternative RET encoding + - x86/bpf: Use alternative RET encoding + - x86/kvm: Fix SETcc emulation for return thunks + - x86/vsyscall_emu/64: Don't use RET in vsyscall emulation + - x86/sev: Avoid using __x86_return_thunk + - x86: Use return-thunk in asm code + - x86/entry: Avoid very early RET + - objtool: Treat .text.__x86.* as noinstr + - x86: Add magic AMD return-thunk + - x86/bugs: Report AMD retbleed vulnerability + - x86/bugs: Add AMD retbleed= boot parameter + - x86/bugs: Enable STIBP for JMP2RET + - x86/bugs: Keep a per-CPU IA32_SPEC_CTRL value + - x86/entry: Add kernel IBRS implementation + - x86/bugs: Optimize SPEC_CTRL MSR writes + - x86/speculation: Add spectre_v2=ibrs option to support Kernel IBRS + - x86/bugs: Split spectre_v2_select_mitigation() and + spectre_v2_user_select_mitigation() + - x86/bugs: Report Intel retbleed vulnerability + - intel_idle: Disable IBRS during long idle + - objtool: Update Retpoline validation + - x86/xen: Rename SYS* entry points + - x86/xen: Add UNTRAIN_RET + - x86/bugs: Add retbleed=ibpb + - x86/bugs: Do IBPB fallback check only once + - objtool: Add entry UNRET validation + - x86/cpu/amd: Add Spectral Chicken + - x86/speculation: Fix RSB filling with CONFIG_RETPOLINE=n + - x86/speculation: Fix firmware entry SPEC_CTRL handling + - x86/speculation: Fix SPEC_CTRL write on SMT state change + - x86/speculation: Use cached host SPEC_CTRL value for guest entry/exit + - x86/speculation: Remove x86_spec_ctrl_mask + - objtool: Re-add UNWIND_HINT_{SAVE_RESTORE} + - KVM: VMX: Flatten __vmx_vcpu_run() + - KVM: VMX: Convert launched argument to flags + - KVM: VMX: Prevent guest RSB poisoning attacks with eIBRS + - KVM: VMX: Fix IBRS handling after vmexit + - x86/speculation: Fill RSB on vmexit for IBRS + - KVM: VMX: Prevent RSB underflow before vmenter + - x86/common: Stamp out the stepping madness + - x86/cpu/amd: Enumerate BTC_NO + - x86/retbleed: Add fine grained Kconfig knobs + - x86/bugs: Add Cannon lake to RETBleed affected CPU list + - x86/entry: Move PUSH_AND_CLEAR_REGS() back into error_entry + - x86/bugs: Do not enable IBPB-on-entry when IBPB is not supported + - x86/kexec: Disable RET on kexec + - x86/speculation: Disable RRSBA behavior + - [Config]: Enable speculation mitigations + - x86/static_call: Serialize __static_call_fixup() properly + - x86/asm/32: Fix ANNOTATE_UNRET_SAFE use on 32-bit + - x86/bugs: Mark retbleed_strings static + - x86/entry: Remove UNTRAIN_RET from native_irq_return_ldt + - x86/kvm: fix FASTOP_SIZE when return thunks are enabled + - x86/speculation: Use DECLARE_PER_CPU for x86_spec_ctrl_current + - KVM: emulate: do not adjust size of fastop and setcc subroutines + - x86/bugs: Remove apostrophe typo + - efi/x86: use naked RET on mixed mode call wrapper + + -- Thadeu Lima de Souza Cascardo Tue, 19 Jul 2022 18:57:17 -0300 + linux (5.15.0-43.46) jammy; urgency=medium * jammy/linux: 5.15.0-43.46 -proposed tracker (LP: #1981243) diff -u linux-hwe-5.15-5.15.0/debian.master/config/config.common.ubuntu linux-hwe-5.15-5.15.0/debian.master/config/config.common.ubuntu --- linux-hwe-5.15-5.15.0/debian.master/config/config.common.ubuntu +++ linux-hwe-5.15-5.15.0/debian.master/config/config.common.ubuntu @@ -1517,9 +1517,11 @@ CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_CC_HAS_KASAN_SW_TAGS=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_CC_HAS_RETURN_THUNK=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y CONFIG_CC_HAS_SANE_STACKPROTECTOR=y CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y +CONFIG_CC_HAS_SLS=y CONFIG_CC_HAS_UBSAN_BOUNDS=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y @@ -2137,6 +2139,8 @@ CONFIG_CPU_FREQ_THERMAL=y CONFIG_CPU_HAS_ASID=y # CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +CONFIG_CPU_IBPB_ENTRY=y +CONFIG_CPU_IBRS_ENTRY=y # CONFIG_CPU_ICACHE_DISABLE is not set CONFIG_CPU_ICACHE_MISMATCH_WORKAROUND=y CONFIG_CPU_IDLE=y @@ -2163,6 +2167,7 @@ CONFIG_CPU_THERMAL=y CONFIG_CPU_THUMB_CAPABLE=y CONFIG_CPU_TLB_V7=y +CONFIG_CPU_UNRET_ENTRY=y CONFIG_CPU_V7=y CONFIG_CRAMFS_BLOCKDEV=y CONFIG_CRAMFS_MTD=y @@ -8816,6 +8821,7 @@ CONFIG_RESET_TI_SYSCON=m CONFIG_RESET_UNIPHIER=m CONFIG_RESET_UNIPHIER_GLUE=m +CONFIG_RETHUNK=y CONFIG_RETPOLINE=y CONFIG_RETU_WATCHDOG=m CONFIG_RFD77402=m @@ -9794,6 +9800,7 @@ CONFIG_SLIP_MODE_SLIP6=y CONFIG_SLIP_SMART=y # CONFIG_SLOB is not set +CONFIG_SLS=y CONFIG_SLUB=y CONFIG_SLUB_CPU_PARTIAL=y CONFIG_SLUB_DEBUG=y @@ -10654,6 +10661,7 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m +CONFIG_SPECULATION_MITIGATIONS=y CONFIG_SPI_ALTERA=m CONFIG_SPI_ALTERA_CORE=m CONFIG_SPI_ALTERA_DFL=m diff -u linux-hwe-5.15-5.15.0/debian/changelog linux-hwe-5.15-5.15.0/debian/changelog --- linux-hwe-5.15-5.15.0/debian/changelog +++ linux-hwe-5.15-5.15.0/debian/changelog @@ -1,3 +1,99 @@ +linux-hwe-5.15 (5.15.0-45.48~20.04.1) focal; urgency=medium + + [ Ubuntu: 5.15.0-45.48 ] + + * CVE-2022-29900 // CVE-2022-29901 + - x86/lib/atomic64_386_32: Rename things + - x86: Prepare asm files for straight-line-speculation + - x86: Prepare inline-asm for straight-line-speculation + - x86/alternative: Relax text_poke_bp() constraint + - kbuild: move objtool_args back to scripts/Makefile.build + - x86: Add straight-line-speculation mitigation + - kvm/emulate: Fix SETcc emulation function offsets with SLS + - crypto: x86/poly1305 - Fixup SLS + - objtool: Add straight-line-speculation validation + - objtool: Fix SLS validation for kcov tail-call replacement + - objtool: Fix objtool regression on x32 systems + - objtool: Fix symbol creation + - objtool: Introduce CFI hash + - objtool: Default ignore INT3 for unreachable + - x86, kvm: use proper ASM macros for kvm_vcpu_is_preempted + - x86/traps: Use pt_regs directly in fixup_bad_iret() + - x86/entry: Switch the stack after error_entry() returns + - x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry() + - x86/entry: Don't call error_entry() for XENPV + - x86/entry: Remove skip_r11rcx + - x86/realmode: build with -D__DISABLE_EXPORTS + - x86/ibt,ftrace: Make function-graph play nice + - x86/kvm/vmx: Make noinstr clean + - x86/cpufeatures: Move RETPOLINE flags to word 11 + - x86/retpoline: Cleanup some #ifdefery + - x86/retpoline: Swizzle retpoline thunk + - x86/retpoline: Use -mfunction-return + - x86: Undo return-thunk damage + - x86,objtool: Create .return_sites + - objtool: skip non-text sections when adding return-thunk sites + - x86,static_call: Use alternative RET encoding + - x86/ftrace: Use alternative RET encoding + - x86/bpf: Use alternative RET encoding + - x86/kvm: Fix SETcc emulation for return thunks + - x86/vsyscall_emu/64: Don't use RET in vsyscall emulation + - x86/sev: Avoid using __x86_return_thunk + - x86: Use return-thunk in asm code + - x86/entry: Avoid very early RET + - objtool: Treat .text.__x86.* as noinstr + - x86: Add magic AMD return-thunk + - x86/bugs: Report AMD retbleed vulnerability + - x86/bugs: Add AMD retbleed= boot parameter + - x86/bugs: Enable STIBP for JMP2RET + - x86/bugs: Keep a per-CPU IA32_SPEC_CTRL value + - x86/entry: Add kernel IBRS implementation + - x86/bugs: Optimize SPEC_CTRL MSR writes + - x86/speculation: Add spectre_v2=ibrs option to support Kernel IBRS + - x86/bugs: Split spectre_v2_select_mitigation() and + spectre_v2_user_select_mitigation() + - x86/bugs: Report Intel retbleed vulnerability + - intel_idle: Disable IBRS during long idle + - objtool: Update Retpoline validation + - x86/xen: Rename SYS* entry points + - x86/xen: Add UNTRAIN_RET + - x86/bugs: Add retbleed=ibpb + - x86/bugs: Do IBPB fallback check only once + - objtool: Add entry UNRET validation + - x86/cpu/amd: Add Spectral Chicken + - x86/speculation: Fix RSB filling with CONFIG_RETPOLINE=n + - x86/speculation: Fix firmware entry SPEC_CTRL handling + - x86/speculation: Fix SPEC_CTRL write on SMT state change + - x86/speculation: Use cached host SPEC_CTRL value for guest entry/exit + - x86/speculation: Remove x86_spec_ctrl_mask + - objtool: Re-add UNWIND_HINT_{SAVE_RESTORE} + - KVM: VMX: Flatten __vmx_vcpu_run() + - KVM: VMX: Convert launched argument to flags + - KVM: VMX: Prevent guest RSB poisoning attacks with eIBRS + - KVM: VMX: Fix IBRS handling after vmexit + - x86/speculation: Fill RSB on vmexit for IBRS + - KVM: VMX: Prevent RSB underflow before vmenter + - x86/common: Stamp out the stepping madness + - x86/cpu/amd: Enumerate BTC_NO + - x86/retbleed: Add fine grained Kconfig knobs + - x86/bugs: Add Cannon lake to RETBleed affected CPU list + - x86/entry: Move PUSH_AND_CLEAR_REGS() back into error_entry + - x86/bugs: Do not enable IBPB-on-entry when IBPB is not supported + - x86/kexec: Disable RET on kexec + - x86/speculation: Disable RRSBA behavior + - [Config]: Enable speculation mitigations + - x86/static_call: Serialize __static_call_fixup() properly + - x86/asm/32: Fix ANNOTATE_UNRET_SAFE use on 32-bit + - x86/bugs: Mark retbleed_strings static + - x86/entry: Remove UNTRAIN_RET from native_irq_return_ldt + - x86/kvm: fix FASTOP_SIZE when return thunks are enabled + - x86/speculation: Use DECLARE_PER_CPU for x86_spec_ctrl_current + - KVM: emulate: do not adjust size of fastop and setcc subroutines + - x86/bugs: Remove apostrophe typo + - efi/x86: use naked RET on mixed mode call wrapper + + -- Luke Nowakowski-Krijger Fri, 29 Jul 2022 12:56:08 -0700 + linux-hwe-5.15 (5.15.0-43.46~20.04.1) focal; urgency=medium * focal/linux-hwe-5.15: 5.15.0-43.46~20.04.1 -proposed tracker (LP: #1981242) diff -u linux-hwe-5.15-5.15.0/debian/control linux-hwe-5.15-5.15.0/debian/control --- linux-hwe-5.15-5.15.0/debian/control +++ linux-hwe-5.15-5.15.0/debian/control @@ -84,7 +84,7 @@ you do not want this package. Install the appropriate linux-headers package instead. -Package: linux-hwe-5.15-headers-5.15.0-43 +Package: linux-hwe-5.15-headers-5.15.0-45 Build-Profiles: Architecture: all Multi-Arch: foreign @@ -94,7 +94,7 @@ Description: Header files related to Linux kernel version 5.15.0 This package provides kernel header files for version 5.15.0, for sites that want the latest kernel headers. Please read - /usr/share/doc/linux-hwe-5.15-headers-5.15.0-43/debian.README.gz for details + /usr/share/doc/linux-hwe-5.15-headers-5.15.0-45/debian.README.gz for details Package: linux-hwe-5.15-tools-common Build-Profiles: @@ -108,18 +108,18 @@ version locked tools (such as perf and x86_energy_perf_policy) for version 5.15.0. -Package: linux-hwe-5.15-tools-5.15.0-43 +Package: linux-hwe-5.15-tools-5.15.0-45 Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: devel Priority: optional Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common -Description: Linux kernel version specific tools for version 5.15.0-43 +Description: Linux kernel version specific tools for version 5.15.0-45 This package provides the architecture dependant parts for kernel version locked tools (such as perf and x86_energy_perf_policy) for - version 5.15.0-43 on + version 5.15.0-45 on 64 bit x86. - You probably want to install linux-tools-5.15.0-43-. + You probably want to install linux-tools-5.15.0-45-. Package: linux-hwe-5.15-cloud-tools-common Build-Profiles: @@ -132,17 +132,17 @@ This package provides the architecture independent parts for kernel version locked tools for cloud tools for version 5.15.0. -Package: linux-hwe-5.15-cloud-tools-5.15.0-43 +Package: linux-hwe-5.15-cloud-tools-5.15.0-45 Build-Profiles: Architecture: amd64 armhf Section: devel Priority: optional Depends: ${misc:Depends}, ${shlibs:Depends}, linux-cloud-tools-common -Description: Linux kernel version specific cloud tools for version 5.15.0-43 +Description: Linux kernel version specific cloud tools for version 5.15.0-45 This package provides the architecture dependant parts for kernel - version locked tools for cloud tools for version 5.15.0-43 on + version locked tools for cloud tools for version 5.15.0-45 on 64 bit x86. - You probably want to install linux-cloud-tools-5.15.0-43-. + You probably want to install linux-cloud-tools-5.15.0-45-. Package: linux-hwe-5.15-tools-host Build-Profiles: @@ -156,17 +156,17 @@ -Package: linux-image-unsigned-5.15.0-43-generic +Package: linux-image-unsigned-5.15.0-45-generic Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: kernel Priority: optional Provides: linux-image, fuse-module, aufs-dkms, kvm-api-4, redhat-cluster-modules, ivtv-modules, virtualbox-guest-modules [amd64], ${linux:rprovides} -Depends: ${misc:Depends}, ${shlibs:Depends}, kmod, linux-base (>= 4.5ubuntu1~16.04.1), linux-modules-5.15.0-43-generic +Depends: ${misc:Depends}, ${shlibs:Depends}, kmod, linux-base (>= 4.5ubuntu1~16.04.1), linux-modules-5.15.0-45-generic Recommends: grub-pc [amd64] | grub-efi-amd64 [amd64] | grub-efi-ia32 [amd64] | grub [amd64] | lilo [amd64] | flash-kernel [armhf arm64] | grub-efi-arm64 [arm64] | grub-efi-arm [armhf] | grub-ieee1275 [ppc64el], initramfs-tools | linux-initramfs-tool Breaks: flash-kernel (<< 3.90ubuntu2) [arm64 armhf], s390-tools (<< 2.3.0-0ubuntu3) [s390x] -Conflicts: linux-image-5.15.0-43-generic -Suggests: fdutils, linux-doc | linux-hwe-5.15-source-5.15.0, linux-hwe-5.15-tools, linux-headers-5.15.0-43-generic, linux-modules-extra-5.15.0-43-generic +Conflicts: linux-image-5.15.0-45-generic +Suggests: fdutils, linux-doc | linux-hwe-5.15-source-5.15.0, linux-hwe-5.15-tools, linux-headers-5.15.0-45-generic, linux-modules-extra-5.15.0-45-generic Description: Linux kernel image for version 5.15.0 on 64 bit x86 SMP This package contains the unsigned Linux kernel image for version 5.15.0 on 64 bit x86 SMP. @@ -179,12 +179,12 @@ the linux-generic meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-modules-5.15.0-43-generic +Package: linux-modules-5.15.0-45-generic Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: kernel Priority: optional -Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-43-generic | linux-image-unsigned-5.15.0-43-generic +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-45-generic | linux-image-unsigned-5.15.0-45-generic Built-Using: ${linux:BuiltUsing} Description: Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP Contains the corresponding System.map file, the modules built by the @@ -199,12 +199,12 @@ the linux-generic meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-modules-extra-5.15.0-43-generic +Package: linux-modules-extra-5.15.0-45-generic Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: kernel Priority: optional -Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-43-generic | linux-image-unsigned-5.15.0-43-generic, crda | wireless-crda +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-45-generic | linux-image-unsigned-5.15.0-45-generic, crda | wireless-crda Description: Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP This package contains the Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP. @@ -221,21 +221,21 @@ the linux-generic meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-headers-5.15.0-43-generic +Package: linux-headers-5.15.0-45-generic Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-headers-5.15.0-43, ${shlibs:Depends} +Depends: ${misc:Depends}, linux-hwe-5.15-headers-5.15.0-45, ${shlibs:Depends} Provides: linux-headers, linux-headers-3.0 Description: Linux kernel headers for version 5.15.0 on 64 bit x86 SMP This package provides kernel header files for version 5.15.0 on 64 bit x86 SMP. . This is for sites that want the latest kernel headers. Please read - /usr/share/doc/linux-headers-5.15.0-43/debian.README.gz for details. + /usr/share/doc/linux-headers-5.15.0-45/debian.README.gz for details. -Package: linux-image-unsigned-5.15.0-43-generic-dbgsym +Package: linux-image-unsigned-5.15.0-45-generic-dbgsym Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: devel @@ -252,31 +252,31 @@ is uncompressed, and unstripped. This package also includes the unstripped modules. -Package: linux-tools-5.15.0-43-generic +Package: linux-tools-5.15.0-45-generic Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-tools-5.15.0-43 -Description: Linux kernel version specific tools for version 5.15.0-43 +Depends: ${misc:Depends}, linux-hwe-5.15-tools-5.15.0-45 +Description: Linux kernel version specific tools for version 5.15.0-45 This package provides the architecture dependant parts for kernel version locked tools (such as perf and x86_energy_perf_policy) for - version 5.15.0-43 on + version 5.15.0-45 on 64 bit x86. -Package: linux-cloud-tools-5.15.0-43-generic +Package: linux-cloud-tools-5.15.0-45-generic Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-cloud-tools-5.15.0-43 -Description: Linux kernel version specific cloud tools for version 5.15.0-43 +Depends: ${misc:Depends}, linux-hwe-5.15-cloud-tools-5.15.0-45 +Description: Linux kernel version specific cloud tools for version 5.15.0-45 This package provides the architecture dependant parts for kernel - version locked tools for cloud for version 5.15.0-43 on + version locked tools for cloud for version 5.15.0-45 on 64 bit x86. -Package: linux-buildinfo-5.15.0-43-generic +Package: linux-buildinfo-5.15.0-45-generic Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: kernel @@ -290,18 +290,18 @@ You likely do not want to install this package. -Package: linux-modules-iwlwifi-5.15.0-43-generic +Package: linux-modules-iwlwifi-5.15.0-45-generic Build-Profiles: Architecture: amd64 armhf arm64 ppc64el s390x Section: kernel Priority: optional Depends: ${misc:Depends}, - linux-image-5.15.0-43-generic | linux-image-unsigned-5.15.0-43-generic, + linux-image-5.15.0-45-generic | linux-image-unsigned-5.15.0-45-generic, Built-Using: ${linux:BuiltUsing} -Description: Linux kernel iwlwifi modules for version 5.15.0-43 +Description: Linux kernel iwlwifi modules for version 5.15.0-45 This package provides the Linux kernel iwlwifi modules for version - 5.15.0-43. + 5.15.0-45. . You likely do not want to install this package directly. Instead, install the one of the linux-modules-iwlwifi-generic* meta-packages, @@ -309,17 +309,17 @@ also installed. -Package: linux-image-unsigned-5.15.0-43-generic-64k +Package: linux-image-unsigned-5.15.0-45-generic-64k Build-Profiles: Architecture: arm64 Section: kernel Priority: optional Provides: linux-image, fuse-module, aufs-dkms, kvm-api-4, redhat-cluster-modules, ivtv-modules, ${linux:rprovides} -Depends: ${misc:Depends}, ${shlibs:Depends}, kmod, linux-base (>= 4.5ubuntu1~16.04.1), linux-modules-5.15.0-43-generic-64k +Depends: ${misc:Depends}, ${shlibs:Depends}, kmod, linux-base (>= 4.5ubuntu1~16.04.1), linux-modules-5.15.0-45-generic-64k Recommends: grub-efi-arm64 [arm64] | flash-kernel [arm64], initramfs-tools | linux-initramfs-tool Breaks: flash-kernel (<< 3.90ubuntu2) [arm64 armhf], s390-tools (<< 2.3.0-0ubuntu3) [s390x] -Conflicts: linux-image-5.15.0-43-generic-64k -Suggests: fdutils, linux-doc | linux-hwe-5.15-source-5.15.0, linux-hwe-5.15-tools, linux-headers-5.15.0-43-generic-64k, linux-modules-extra-5.15.0-43-generic-64k +Conflicts: linux-image-5.15.0-45-generic-64k +Suggests: fdutils, linux-doc | linux-hwe-5.15-source-5.15.0, linux-hwe-5.15-tools, linux-headers-5.15.0-45-generic-64k, linux-modules-extra-5.15.0-45-generic-64k Description: Linux kernel image for version 5.15.0 on 64 bit x86 SMP This package contains the unsigned Linux kernel image for version 5.15.0 on 64 bit x86 SMP. @@ -332,12 +332,12 @@ the linux-generic-64k meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-modules-5.15.0-43-generic-64k +Package: linux-modules-5.15.0-45-generic-64k Build-Profiles: Architecture: arm64 Section: kernel Priority: optional -Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-43-generic-64k | linux-image-unsigned-5.15.0-43-generic-64k +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-45-generic-64k | linux-image-unsigned-5.15.0-45-generic-64k Built-Using: ${linux:BuiltUsing} Description: Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP Contains the corresponding System.map file, the modules built by the @@ -352,12 +352,12 @@ the linux-generic-64k meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-modules-extra-5.15.0-43-generic-64k +Package: linux-modules-extra-5.15.0-45-generic-64k Build-Profiles: Architecture: arm64 Section: kernel Priority: optional -Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-43-generic-64k | linux-image-unsigned-5.15.0-43-generic-64k, crda | wireless-crda +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-45-generic-64k | linux-image-unsigned-5.15.0-45-generic-64k, crda | wireless-crda Description: Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP This package contains the Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP. @@ -374,21 +374,21 @@ the linux-generic-64k meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-headers-5.15.0-43-generic-64k +Package: linux-headers-5.15.0-45-generic-64k Build-Profiles: Architecture: arm64 Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-headers-5.15.0-43, ${shlibs:Depends} +Depends: ${misc:Depends}, linux-hwe-5.15-headers-5.15.0-45, ${shlibs:Depends} Provides: linux-headers, linux-headers-3.0 Description: Linux kernel headers for version 5.15.0 on 64 bit x86 SMP This package provides kernel header files for version 5.15.0 on 64 bit x86 SMP. . This is for sites that want the latest kernel headers. Please read - /usr/share/doc/linux-headers-5.15.0-43/debian.README.gz for details. + /usr/share/doc/linux-headers-5.15.0-45/debian.README.gz for details. -Package: linux-image-unsigned-5.15.0-43-generic-64k-dbgsym +Package: linux-image-unsigned-5.15.0-45-generic-64k-dbgsym Build-Profiles: Architecture: arm64 Section: devel @@ -405,31 +405,31 @@ is uncompressed, and unstripped. This package also includes the unstripped modules. -Package: linux-tools-5.15.0-43-generic-64k +Package: linux-tools-5.15.0-45-generic-64k Build-Profiles: Architecture: arm64 Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-tools-5.15.0-43 -Description: Linux kernel version specific tools for version 5.15.0-43 +Depends: ${misc:Depends}, linux-hwe-5.15-tools-5.15.0-45 +Description: Linux kernel version specific tools for version 5.15.0-45 This package provides the architecture dependant parts for kernel version locked tools (such as perf and x86_energy_perf_policy) for - version 5.15.0-43 on + version 5.15.0-45 on 64 bit x86. -Package: linux-cloud-tools-5.15.0-43-generic-64k +Package: linux-cloud-tools-5.15.0-45-generic-64k Build-Profiles: Architecture: arm64 Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-cloud-tools-5.15.0-43 -Description: Linux kernel version specific cloud tools for version 5.15.0-43 +Depends: ${misc:Depends}, linux-hwe-5.15-cloud-tools-5.15.0-45 +Description: Linux kernel version specific cloud tools for version 5.15.0-45 This package provides the architecture dependant parts for kernel - version locked tools for cloud for version 5.15.0-43 on + version locked tools for cloud for version 5.15.0-45 on 64 bit x86. -Package: linux-buildinfo-5.15.0-43-generic-64k +Package: linux-buildinfo-5.15.0-45-generic-64k Build-Profiles: Architecture: arm64 Section: kernel @@ -443,18 +443,18 @@ You likely do not want to install this package. -Package: linux-modules-iwlwifi-5.15.0-43-generic-64k +Package: linux-modules-iwlwifi-5.15.0-45-generic-64k Build-Profiles: Architecture: arm64 Section: kernel Priority: optional Depends: ${misc:Depends}, - linux-image-5.15.0-43-generic-64k | linux-image-unsigned-5.15.0-43-generic-64k, + linux-image-5.15.0-45-generic-64k | linux-image-unsigned-5.15.0-45-generic-64k, Built-Using: ${linux:BuiltUsing} -Description: Linux kernel iwlwifi modules for version 5.15.0-43 +Description: Linux kernel iwlwifi modules for version 5.15.0-45 This package provides the Linux kernel iwlwifi modules for version - 5.15.0-43. + 5.15.0-45. . You likely do not want to install this package directly. Instead, install the one of the linux-modules-iwlwifi-generic-64k* meta-packages, @@ -462,17 +462,17 @@ also installed. -Package: linux-image-unsigned-5.15.0-43-generic-lpae +Package: linux-image-unsigned-5.15.0-45-generic-lpae Build-Profiles: Architecture: armhf Section: kernel Priority: optional Provides: linux-image, fuse-module, aufs-dkms, kvm-api-4, redhat-cluster-modules, ivtv-modules, ${linux:rprovides} -Depends: ${misc:Depends}, ${shlibs:Depends}, kmod, linux-base (>= 4.5ubuntu1~16.04.1), linux-modules-5.15.0-43-generic-lpae +Depends: ${misc:Depends}, ${shlibs:Depends}, kmod, linux-base (>= 4.5ubuntu1~16.04.1), linux-modules-5.15.0-45-generic-lpae Recommends: flash-kernel [armhf] | grub-efi-arm [armhf], initramfs-tools | linux-initramfs-tool Breaks: flash-kernel (<< 3.90ubuntu2) [arm64 armhf], s390-tools (<< 2.3.0-0ubuntu3) [s390x] -Conflicts: linux-image-5.15.0-43-generic-lpae -Suggests: fdutils, linux-doc | linux-hwe-5.15-source-5.15.0, linux-hwe-5.15-tools, linux-headers-5.15.0-43-generic-lpae, linux-modules-extra-5.15.0-43-generic-lpae +Conflicts: linux-image-5.15.0-45-generic-lpae +Suggests: fdutils, linux-doc | linux-hwe-5.15-source-5.15.0, linux-hwe-5.15-tools, linux-headers-5.15.0-45-generic-lpae, linux-modules-extra-5.15.0-45-generic-lpae Description: Linux kernel image for version 5.15.0 on 64 bit x86 SMP This package contains the unsigned Linux kernel image for version 5.15.0 on 64 bit x86 SMP. @@ -485,12 +485,12 @@ the linux-generic-lpae meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-modules-5.15.0-43-generic-lpae +Package: linux-modules-5.15.0-45-generic-lpae Build-Profiles: Architecture: armhf Section: kernel Priority: optional -Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-43-generic-lpae | linux-image-unsigned-5.15.0-43-generic-lpae +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-45-generic-lpae | linux-image-unsigned-5.15.0-45-generic-lpae Built-Using: ${linux:BuiltUsing} Description: Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP Contains the corresponding System.map file, the modules built by the @@ -505,12 +505,12 @@ the linux-generic-lpae meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-modules-extra-5.15.0-43-generic-lpae +Package: linux-modules-extra-5.15.0-45-generic-lpae Build-Profiles: Architecture: armhf Section: kernel Priority: optional -Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-43-generic-lpae | linux-image-unsigned-5.15.0-43-generic-lpae, crda | wireless-crda +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-5.15.0-45-generic-lpae | linux-image-unsigned-5.15.0-45-generic-lpae, crda | wireless-crda Description: Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP This package contains the Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP. @@ -527,21 +527,21 @@ the linux-generic-lpae meta-package, which will ensure that upgrades work correctly, and that supporting packages are also installed. -Package: linux-headers-5.15.0-43-generic-lpae +Package: linux-headers-5.15.0-45-generic-lpae Build-Profiles: Architecture: armhf Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-headers-5.15.0-43, ${shlibs:Depends} +Depends: ${misc:Depends}, linux-hwe-5.15-headers-5.15.0-45, ${shlibs:Depends} Provides: linux-headers, linux-headers-3.0 Description: Linux kernel headers for version 5.15.0 on 64 bit x86 SMP This package provides kernel header files for version 5.15.0 on 64 bit x86 SMP. . This is for sites that want the latest kernel headers. Please read - /usr/share/doc/linux-headers-5.15.0-43/debian.README.gz for details. + /usr/share/doc/linux-headers-5.15.0-45/debian.README.gz for details. -Package: linux-image-unsigned-5.15.0-43-generic-lpae-dbgsym +Package: linux-image-unsigned-5.15.0-45-generic-lpae-dbgsym Build-Profiles: Architecture: armhf Section: devel @@ -558,31 +558,31 @@ is uncompressed, and unstripped. This package also includes the unstripped modules. -Package: linux-tools-5.15.0-43-generic-lpae +Package: linux-tools-5.15.0-45-generic-lpae Build-Profiles: Architecture: armhf Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-tools-5.15.0-43 -Description: Linux kernel version specific tools for version 5.15.0-43 +Depends: ${misc:Depends}, linux-hwe-5.15-tools-5.15.0-45 +Description: Linux kernel version specific tools for version 5.15.0-45 This package provides the architecture dependant parts for kernel version locked tools (such as perf and x86_energy_perf_policy) for - version 5.15.0-43 on + version 5.15.0-45 on 64 bit x86. -Package: linux-cloud-tools-5.15.0-43-generic-lpae +Package: linux-cloud-tools-5.15.0-45-generic-lpae Build-Profiles: Architecture: armhf Section: devel Priority: optional -Depends: ${misc:Depends}, linux-hwe-5.15-cloud-tools-5.15.0-43 -Description: Linux kernel version specific cloud tools for version 5.15.0-43 +Depends: ${misc:Depends}, linux-hwe-5.15-cloud-tools-5.15.0-45 +Description: Linux kernel version specific cloud tools for version 5.15.0-45 This package provides the architecture dependant parts for kernel - version locked tools for cloud for version 5.15.0-43 on + version locked tools for cloud for version 5.15.0-45 on 64 bit x86. -Package: linux-buildinfo-5.15.0-43-generic-lpae +Package: linux-buildinfo-5.15.0-45-generic-lpae Build-Profiles: Architecture: armhf Section: kernel @@ -596,18 +596,18 @@ You likely do not want to install this package. -Package: linux-modules-iwlwifi-5.15.0-43-generic-lpae +Package: linux-modules-iwlwifi-5.15.0-45-generic-lpae Build-Profiles: Architecture: armhf Section: kernel Priority: optional Depends: ${misc:Depends}, - linux-image-5.15.0-43-generic-lpae | linux-image-unsigned-5.15.0-43-generic-lpae, + linux-image-5.15.0-45-generic-lpae | linux-image-unsigned-5.15.0-45-generic-lpae, Built-Using: ${linux:BuiltUsing} -Description: Linux kernel iwlwifi modules for version 5.15.0-43 +Description: Linux kernel iwlwifi modules for version 5.15.0-45 This package provides the Linux kernel iwlwifi modules for version - 5.15.0-43. + 5.15.0-45. . You likely do not want to install this package directly. Instead, install the one of the linux-modules-iwlwifi-generic-lpae* meta-packages, diff -u linux-hwe-5.15-5.15.0/drivers/base/cpu.c linux-hwe-5.15-5.15.0/drivers/base/cpu.c --- linux-hwe-5.15-5.15.0/drivers/base/cpu.c +++ linux-hwe-5.15-5.15.0/drivers/base/cpu.c @@ -570,6 +570,12 @@ return sysfs_emit(buf, "Not affected\n"); } +ssize_t __weak cpu_show_retbleed(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return sysfs_emit(buf, "Not affected\n"); +} + static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL); static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL); static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL); @@ -580,6 +586,7 @@ static DEVICE_ATTR(itlb_multihit, 0444, cpu_show_itlb_multihit, NULL); static DEVICE_ATTR(srbds, 0444, cpu_show_srbds, NULL); static DEVICE_ATTR(mmio_stale_data, 0444, cpu_show_mmio_stale_data, NULL); +static DEVICE_ATTR(retbleed, 0444, cpu_show_retbleed, NULL); static struct attribute *cpu_root_vulnerabilities_attrs[] = { &dev_attr_meltdown.attr, @@ -592,6 +599,7 @@ &dev_attr_itlb_multihit.attr, &dev_attr_srbds.attr, &dev_attr_mmio_stale_data.attr, + &dev_attr_retbleed.attr, NULL }; diff -u linux-hwe-5.15-5.15.0/include/linux/cpu.h linux-hwe-5.15-5.15.0/include/linux/cpu.h --- linux-hwe-5.15-5.15.0/include/linux/cpu.h +++ linux-hwe-5.15-5.15.0/include/linux/cpu.h @@ -68,6 +68,8 @@ extern ssize_t cpu_show_mmio_stale_data(struct device *dev, struct device_attribute *attr, char *buf); +extern ssize_t cpu_show_retbleed(struct device *dev, + struct device_attribute *attr, char *buf); extern __printf(4, 5) struct device *cpu_device_create(struct device *parent, void *drvdata, diff -u linux-hwe-5.15-5.15.0/include/linux/kvm_host.h linux-hwe-5.15-5.15.0/include/linux/kvm_host.h --- linux-hwe-5.15-5.15.0/include/linux/kvm_host.h +++ linux-hwe-5.15-5.15.0/include/linux/kvm_host.h @@ -1233,7 +1233,7 @@ { } -static inline bool kvm_arch_has_assigned_device(struct kvm *kvm) +static __always_inline bool kvm_arch_has_assigned_device(struct kvm *kvm) { return false; } diff -u linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct-modify.c linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct-modify.c --- linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct-modify.c +++ linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct-modify.c @@ -31,7 +31,7 @@ " call my_direct_func1\n" " leave\n" " .size my_tramp1, .-my_tramp1\n" -" ret\n" + ASM_RET " .type my_tramp2, @function\n" " .globl my_tramp2\n" " my_tramp2:" @@ -39,7 +39,7 @@ " movq %rsp, %rbp\n" " call my_direct_func2\n" " leave\n" -" ret\n" + ASM_RET " .size my_tramp2, .-my_tramp2\n" " .popsection\n" ); diff -u linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct-too.c linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct-too.c --- linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct-too.c +++ linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct-too.c @@ -31,7 +31,7 @@ " popq %rsi\n" " popq %rdi\n" " leave\n" -" ret\n" + ASM_RET " .size my_tramp, .-my_tramp\n" " .popsection\n" ); diff -u linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct.c linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct.c --- linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct.c +++ linux-hwe-5.15-5.15.0/samples/ftrace/ftrace-direct.c @@ -24,7 +24,7 @@ " call my_direct_func\n" " popq %rdi\n" " leave\n" -" ret\n" + ASM_RET " .size my_tramp, .-my_tramp\n" " .popsection\n" ); diff -u linux-hwe-5.15-5.15.0/scripts/Makefile.build linux-hwe-5.15-5.15.0/scripts/Makefile.build --- linux-hwe-5.15-5.15.0/scripts/Makefile.build +++ linux-hwe-5.15-5.15.0/scripts/Makefile.build @@ -224,6 +224,18 @@ endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT ifdef CONFIG_STACK_VALIDATION + +objtool_args = \ + $(if $(CONFIG_UNWINDER_ORC),orc generate,check) \ + $(if $(part-of-module), --module) \ + $(if $(CONFIG_FRAME_POINTER),, --no-fp) \ + $(if $(CONFIG_GCOV_KERNEL)$(CONFIG_LTO_CLANG), --no-unreachable)\ + $(if $(CONFIG_RETPOLINE), --retpoline) \ + $(if $(CONFIG_RETHUNK), --rethunk) \ + $(if $(CONFIG_X86_SMAP), --uaccess) \ + $(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount) \ + $(if $(CONFIG_SLS), --sls) + ifndef CONFIG_LTO_CLANG __objtool_obj := $(objtree)/tools/objtool/objtool diff -u linux-hwe-5.15-5.15.0/scripts/link-vmlinux.sh linux-hwe-5.15-5.15.0/scripts/link-vmlinux.sh --- linux-hwe-5.15-5.15.0/scripts/link-vmlinux.sh +++ linux-hwe-5.15-5.15.0/scripts/link-vmlinux.sh @@ -120,6 +120,9 @@ if [ -n "${CONFIG_VMLINUX_VALIDATION}" ]; then objtoolopt="${objtoolopt} --noinstr" + if is_enabled CONFIG_CPU_UNRET_ENTRY; then + objtoolopt="${objtoolopt} --unret" + fi fi if [ -n "${objtoolopt}" ]; then @@ -139,6 +142,9 @@ if [ -n "${CONFIG_X86_SMAP}" ]; then objtoolopt="${objtoolopt} --uaccess" fi + if [ -n "${CONFIG_SLS}" ]; then + objtoolopt="${objtoolopt} --sls" + fi info OBJTOOL ${1} tools/objtool/objtool ${objtoolcmd} ${objtoolopt} ${1} fi diff -u linux-hwe-5.15-5.15.0/security/Kconfig linux-hwe-5.15-5.15.0/security/Kconfig --- linux-hwe-5.15-5.15.0/security/Kconfig +++ linux-hwe-5.15-5.15.0/security/Kconfig @@ -63,17 +63,6 @@ implement socket and networking access controls. If you are unsure how to answer this question, answer N. -config PAGE_TABLE_ISOLATION - bool "Remove the kernel mapping in user mode" - default y - depends on (X86_64 || X86_PAE) && !UML - help - This feature reduces the number of hardware side channels by - ensuring that the majority of kernel addresses are not mapped - into userspace. - - See Documentation/x86/pti.rst for more details. - config SECURITY_INFINIBAND bool "Infiniband Security Hooks" depends on SECURITY && INFINIBAND diff -u linux-hwe-5.15-5.15.0/tools/arch/x86/include/asm/msr-index.h linux-hwe-5.15-5.15.0/tools/arch/x86/include/asm/msr-index.h --- linux-hwe-5.15-5.15.0/tools/arch/x86/include/asm/msr-index.h +++ linux-hwe-5.15-5.15.0/tools/arch/x86/include/asm/msr-index.h @@ -51,6 +51,8 @@ #define SPEC_CTRL_STIBP BIT(SPEC_CTRL_STIBP_SHIFT) /* STIBP mask */ #define SPEC_CTRL_SSBD_SHIFT 2 /* Speculative Store Bypass Disable bit */ #define SPEC_CTRL_SSBD BIT(SPEC_CTRL_SSBD_SHIFT) /* Speculative Store Bypass Disable */ +#define SPEC_CTRL_RRSBA_DIS_S_SHIFT 6 /* Disable RRSBA behavior */ +#define SPEC_CTRL_RRSBA_DIS_S BIT(SPEC_CTRL_RRSBA_DIS_S_SHIFT) #define MSR_IA32_PRED_CMD 0x00000049 /* Prediction Command */ #define PRED_CMD_IBPB BIT(0) /* Indirect Branch Prediction Barrier */ @@ -138,6 +140,13 @@ * bit available to control VERW * behavior. */ +#define ARCH_CAP_RRSBA BIT(19) /* + * Indicates RET may use predictors + * other than the RSB. With eIBRS + * enabled predictions in kernel mode + * are restricted to targets in + * kernel. + */ #define MSR_IA32_FLUSH_CMD 0x0000010b #define L1D_FLUSH BIT(0) /* diff -u linux-hwe-5.15-5.15.0/tools/objtool/arch/x86/decode.c linux-hwe-5.15-5.15.0/tools/objtool/arch/x86/decode.c --- linux-hwe-5.15-5.15.0/tools/objtool/arch/x86/decode.c +++ linux-hwe-5.15-5.15.0/tools/objtool/arch/x86/decode.c @@ -529,6 +529,11 @@ } break; + case 0xcc: + /* int3 */ + *type = INSN_TRAP; + break; + case 0xe3: /* jecxz/jrcxz */ *type = INSN_JUMP_CONDITIONAL; @@ -665,10 +670,10 @@ { static const char ret[5][5] = { { BYTE_RET }, - { BYTE_RET, BYTES_NOP1 }, - { BYTE_RET, BYTES_NOP2 }, - { BYTE_RET, BYTES_NOP3 }, - { BYTE_RET, BYTES_NOP4 }, + { BYTE_RET, 0xcc }, + { BYTE_RET, 0xcc, BYTES_NOP1 }, + { BYTE_RET, 0xcc, BYTES_NOP2 }, + { BYTE_RET, 0xcc, BYTES_NOP3 }, }; if (len < 1 || len > 5) { @@ -679,34 +684,32 @@ return ret[len-1]; } -int arch_decode_hint_reg(struct instruction *insn, u8 sp_reg) +int arch_decode_hint_reg(u8 sp_reg, int *base) { - struct cfi_reg *cfa = &insn->cfi.cfa; - switch (sp_reg) { case ORC_REG_UNDEFINED: - cfa->base = CFI_UNDEFINED; + *base = CFI_UNDEFINED; break; case ORC_REG_SP: - cfa->base = CFI_SP; + *base = CFI_SP; break; case ORC_REG_BP: - cfa->base = CFI_BP; + *base = CFI_BP; break; case ORC_REG_SP_INDIRECT: - cfa->base = CFI_SP_INDIRECT; + *base = CFI_SP_INDIRECT; break; case ORC_REG_R10: - cfa->base = CFI_R10; + *base = CFI_R10; break; case ORC_REG_R13: - cfa->base = CFI_R13; + *base = CFI_R13; break; case ORC_REG_DI: - cfa->base = CFI_DI; + *base = CFI_DI; break; case ORC_REG_DX: - cfa->base = CFI_DX; + *base = CFI_DX; break; default: return -1; @@ -721,0 +725,5 @@ + +bool arch_is_rethunk(struct symbol *sym) +{ + return !strcmp(sym->name, "__x86_return_thunk"); +} diff -u linux-hwe-5.15-5.15.0/tools/objtool/check.c linux-hwe-5.15-5.15.0/tools/objtool/check.c --- linux-hwe-5.15-5.15.0/tools/objtool/check.c +++ linux-hwe-5.15-5.15.0/tools/objtool/check.c @@ -5,6 +5,8 @@ #include #include +#include +#include #include #include @@ -26,7 +28,11 @@ bool skip_orig; }; -struct cfi_init_state initial_func_cfi; +static unsigned long nr_cfi, nr_cfi_reused, nr_cfi_cache; + +static struct cfi_init_state initial_func_cfi; +static struct cfi_state init_cfi; +static struct cfi_state func_cfi; struct instruction *find_insn(struct objtool_file *file, struct section *sec, unsigned long offset) @@ -266,6 +272,78 @@ state->noinstr = sec->noinstr; } +static struct cfi_state *cfi_alloc(void) +{ + struct cfi_state *cfi = calloc(sizeof(struct cfi_state), 1); + if (!cfi) { + WARN("calloc failed"); + exit(1); + } + nr_cfi++; + return cfi; +} + +static int cfi_bits; +static struct hlist_head *cfi_hash; + +static inline bool cficmp(struct cfi_state *cfi1, struct cfi_state *cfi2) +{ + return memcmp((void *)cfi1 + sizeof(cfi1->hash), + (void *)cfi2 + sizeof(cfi2->hash), + sizeof(struct cfi_state) - sizeof(struct hlist_node)); +} + +static inline u32 cfi_key(struct cfi_state *cfi) +{ + return jhash((void *)cfi + sizeof(cfi->hash), + sizeof(*cfi) - sizeof(cfi->hash), 0); +} + +static struct cfi_state *cfi_hash_find_or_add(struct cfi_state *cfi) +{ + struct hlist_head *head = &cfi_hash[hash_min(cfi_key(cfi), cfi_bits)]; + struct cfi_state *obj; + + hlist_for_each_entry(obj, head, hash) { + if (!cficmp(cfi, obj)) { + nr_cfi_cache++; + return obj; + } + } + + obj = cfi_alloc(); + *obj = *cfi; + hlist_add_head(&obj->hash, head); + + return obj; +} + +static void cfi_hash_add(struct cfi_state *cfi) +{ + struct hlist_head *head = &cfi_hash[hash_min(cfi_key(cfi), cfi_bits)]; + + hlist_add_head(&cfi->hash, head); +} + +static void *cfi_hash_alloc(unsigned long size) +{ + cfi_bits = max(10, ilog2(size)); + cfi_hash = mmap(NULL, sizeof(struct hlist_head) << cfi_bits, + PROT_READ|PROT_WRITE, + MAP_PRIVATE|MAP_ANON, -1, 0); + if (cfi_hash == (void *)-1L) { + WARN("mmap fail cfi_hash"); + cfi_hash = NULL; + } else if (stats) { + printf("cfi_bits: %d\n", cfi_bits); + } + + return cfi_hash; +} + +static unsigned long nr_insns; +static unsigned long nr_insns_visited; + /* * Call the arch-specific instruction decoder for all the instructions and add * them to the global instruction list. @@ -276,7 +354,6 @@ struct symbol *func; unsigned long offset; struct instruction *insn; - unsigned long nr_insns = 0; int ret; for_each_sec(file, sec) { @@ -290,7 +367,8 @@ sec->text = true; if (!strcmp(sec->name, ".noinstr.text") || - !strcmp(sec->name, ".entry.text")) + !strcmp(sec->name, ".entry.text") || + !strncmp(sec->name, ".text.__x86.", 12)) sec->noinstr = true; for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) { @@ -302,7 +380,6 @@ memset(insn, 0, sizeof(*insn)); INIT_LIST_HEAD(&insn->alts); INIT_LIST_HEAD(&insn->stack_ops); - init_cfi_state(&insn->cfi); insn->sec = sec; insn->offset = offset; @@ -393,12 +470,12 @@ else if (reloc->addend == reloc->sym->sec->sh.sh_size) { insn = find_last_insn(file, reloc->sym->sec); if (!insn) { - WARN("can't find unreachable insn at %s+0x%lx", + WARN("can't find unreachable insn at %s+0x%" PRIx64, reloc->sym->sec->name, reloc->addend); return -1; } } else { - WARN("can't find unreachable insn at %s+0x%lx", + WARN("can't find unreachable insn at %s+0x%" PRIx64, reloc->sym->sec->name, reloc->addend); return -1; } @@ -428,12 +505,12 @@ else if (reloc->addend == reloc->sym->sec->sh.sh_size) { insn = find_last_insn(file, reloc->sym->sec); if (!insn) { - WARN("can't find reachable insn at %s+0x%lx", + WARN("can't find reachable insn at %s+0x%" PRIx64, reloc->sym->sec->name, reloc->addend); return -1; } } else { - WARN("can't find reachable insn at %s+0x%lx", + WARN("can't find reachable insn at %s+0x%" PRIx64, reloc->sym->sec->name, reloc->addend); return -1; } @@ -578,6 +655,52 @@ return 0; } +static int create_return_sites_sections(struct objtool_file *file) +{ + struct instruction *insn; + struct section *sec; + int idx; + + sec = find_section_by_name(file->elf, ".return_sites"); + if (sec) { + WARN("file already has .return_sites, skipping"); + return 0; + } + + idx = 0; + list_for_each_entry(insn, &file->return_thunk_list, call_node) + idx++; + + if (!idx) + return 0; + + sec = elf_create_section(file->elf, ".return_sites", 0, + sizeof(int), idx); + if (!sec) { + WARN("elf_create_section: .return_sites"); + return -1; + } + + idx = 0; + list_for_each_entry(insn, &file->return_thunk_list, call_node) { + + int *site = (int *)sec->data->d_buf + idx; + *site = 0; + + if (elf_add_reloc_to_insn(file->elf, sec, + idx * sizeof(int), + R_X86_64_PC32, + insn->sec, insn->offset)) { + WARN("elf_add_reloc_to_insn: .return_sites"); + return -1; + } + + idx++; + } + + return 0; +} + static int create_mcount_loc_sections(struct objtool_file *file) { struct section *sec; @@ -856,6 +979,11 @@ return false; } +__weak bool arch_is_rethunk(struct symbol *sym) +{ + return false; +} + #define NEGATIVE_RELOC ((void *)-1L) static struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn) @@ -930,6 +1058,17 @@ : arch_nop_insn(insn->len)); insn->type = sibling ? INSN_RETURN : INSN_NOP; + + if (sibling) { + /* + * We've replaced the tail-call JMP insn by two new + * insn: RET; INT3, except we only have a single struct + * insn here. Mark it retpoline_safe to avoid the SLS + * warning, instead of adding another insn. + */ + insn->retpoline_safe = true; + } + return; } @@ -1005,6 +1144,21 @@ annotate_call_site(file, insn, false); } + +static void add_return_call(struct objtool_file *file, struct instruction *insn, bool add) +{ + /* + * Return thunk tail calls are really just returns in disguise, + * so convert them accordingly. + */ + insn->type = INSN_RETURN; + insn->retpoline_safe = true; + + /* Skip the non-text sections, specially .discard ones */ + if (add && insn->sec->text) + list_add_tail(&insn->call_node, &file->return_thunk_list); +} + /* * Find the destination instructions for all jumps. */ @@ -1029,6 +1183,9 @@ } else if (reloc->sym->retpoline_thunk) { add_retpoline_call(file, insn); continue; + } else if (reloc->sym->return_thunk) { + add_return_call(file, insn, true); + continue; } else if (insn->func) { /* internal or external sibling call (with reloc) */ add_call_dest(file, insn, reloc->sym, true); @@ -1044,6 +1201,7 @@ insn->jump_dest = find_insn(file, dest_sec, dest_off); if (!insn->jump_dest) { + struct symbol *sym = find_symbol_by_offset(dest_sec, dest_off); /* * This is a special case where an alt instruction @@ -1053,6 +1211,19 @@ if (!strcmp(insn->sec->name, ".altinstr_replacement")) continue; + /* + * This is a special case for zen_untrain_ret(). + * It jumps to __x86_return_thunk(), but objtool + * can't find the thunk's starting RET + * instruction, because the RET is also in the + * middle of another instruction. Objtool only + * knows about the outer instruction. + */ + if (sym && sym->return_thunk) { + add_return_call(file, insn, false); + continue; + } + WARN_FUNC("can't find jump dest instruction at %s+0x%lx", insn->sec, insn->offset, dest_sec->name, dest_off); @@ -1227,7 +1398,6 @@ memset(nop, 0, sizeof(*nop)); INIT_LIST_HEAD(&nop->alts); INIT_LIST_HEAD(&nop->stack_ops); - init_cfi_state(&nop->cfi); nop->sec = special_alt->new_sec; nop->offset = special_alt->new_off + special_alt->new_len; @@ -1636,10 +1806,11 @@ static int read_unwind_hints(struct objtool_file *file) { + struct cfi_state cfi = init_cfi; struct section *sec, *relocsec; - struct reloc *reloc; struct unwind_hint *hint; struct instruction *insn; + struct reloc *reloc; int i; sec = find_section_by_name(file->elf, ".discard.unwind_hints"); @@ -1676,20 +1847,49 @@ insn->hint = true; + if (hint->type == UNWIND_HINT_TYPE_SAVE) { + insn->hint = false; + insn->save = true; + continue; + } + + if (hint->type == UNWIND_HINT_TYPE_RESTORE) { + insn->restore = true; + continue; + } + + if (hint->type == UNWIND_HINT_TYPE_REGS_PARTIAL) { + struct symbol *sym = find_symbol_by_offset(insn->sec, insn->offset); + + if (sym && sym->bind == STB_GLOBAL) { + insn->entry = 1; + } + } + + if (hint->type == UNWIND_HINT_TYPE_ENTRY) { + hint->type = UNWIND_HINT_TYPE_CALL; + insn->entry = 1; + } + if (hint->type == UNWIND_HINT_TYPE_FUNC) { - set_func_state(&insn->cfi); + insn->cfi = &func_cfi; continue; } - if (arch_decode_hint_reg(insn, hint->sp_reg)) { + if (insn->cfi) + cfi = *(insn->cfi); + + if (arch_decode_hint_reg(hint->sp_reg, &cfi.cfa.base)) { WARN_FUNC("unsupported unwind_hint sp base reg %d", insn->sec, insn->offset, hint->sp_reg); return -1; } - insn->cfi.cfa.offset = bswap_if_needed(hint->sp_offset); - insn->cfi.type = hint->type; - insn->cfi.end = hint->end; + cfi.cfa.offset = bswap_if_needed(hint->sp_offset); + cfi.type = hint->type; + cfi.end = hint->end; + + insn->cfi = cfi_hash_find_or_add(&cfi); } return 0; @@ -1718,8 +1918,10 @@ } if (insn->type != INSN_JUMP_DYNAMIC && - insn->type != INSN_CALL_DYNAMIC) { - WARN_FUNC("retpoline_safe hint not an indirect jump/call", + insn->type != INSN_CALL_DYNAMIC && + insn->type != INSN_RETURN && + insn->type != INSN_NOP) { + WARN_FUNC("retpoline_safe hint not an indirect jump/call/ret/nop", insn->sec, insn->offset); return -1; } @@ -1845,6 +2047,9 @@ if (arch_is_retpoline(func)) func->retpoline_thunk = true; + if (arch_is_rethunk(func)) + func->return_thunk = true; + if (!strcmp(func->name, "__fentry__")) func->fentry = true; @@ -2540,13 +2745,18 @@ if (!insn->alt_group) return 0; + if (!insn->cfi) { + WARN("CFI missing"); + return -1; + } + alt_cfi = insn->alt_group->cfi; group_off = insn->offset - insn->alt_group->first_insn->offset; if (!alt_cfi[group_off]) { - alt_cfi[group_off] = &insn->cfi; + alt_cfi[group_off] = insn->cfi; } else { - if (memcmp(alt_cfi[group_off], &insn->cfi, sizeof(struct cfi_state))) { + if (cficmp(alt_cfi[group_off], insn->cfi)) { WARN_FUNC("stack layout conflict in alternatives", insn->sec, insn->offset); return -1; @@ -2597,9 +2807,14 @@ static bool insn_cfi_match(struct instruction *insn, struct cfi_state *cfi2) { - struct cfi_state *cfi1 = &insn->cfi; + struct cfi_state *cfi1 = insn->cfi; int i; + if (!cfi1) { + WARN("CFI missing"); + return false; + } + if (memcmp(&cfi1->cfa, &cfi2->cfa, sizeof(cfi1->cfa))) { WARN_FUNC("stack state mismatch: cfa1=%d%+d cfa2=%d%+d", @@ -2784,7 +2999,7 @@ struct instruction *insn, struct insn_state state) { struct alternative *alt; - struct instruction *next_insn; + struct instruction *next_insn, *prev_insn = NULL; struct section *sec; u8 visited; int ret; @@ -2806,22 +3021,61 @@ return 1; } - visited = 1 << state.uaccess; - if (insn->visited) { + visited = VISITED_BRANCH << state.uaccess; + if (insn->visited & VISITED_BRANCH_MASK) { if (!insn->hint && !insn_cfi_match(insn, &state.cfi)) return 1; if (insn->visited & visited) return 0; + } else { + nr_insns_visited++; } if (state.noinstr) state.instr += insn->instr; - if (insn->hint) - state.cfi = insn->cfi; - else - insn->cfi = state.cfi; + if (insn->hint) { + if (insn->restore) { + struct instruction *save_insn, *i; + + i = insn; + save_insn = NULL; + + sym_for_each_insn_continue_reverse(file, func, i) { + if (i->save) { + save_insn = i; + break; + } + } + + if (!save_insn) { + WARN_FUNC("no corresponding CFI save for CFI restore", + sec, insn->offset); + return 1; + } + + if (!save_insn->visited) { + WARN_FUNC("objtool isn't smart enough to handle this CFI save/restore combo", + sec, insn->offset); + return 1; + } + + insn->cfi = save_insn->cfi; + nr_cfi_reused++; + } + + state.cfi = *insn->cfi; + } else { + /* XXX track if we actually changed state.cfi */ + + if (prev_insn && !cficmp(prev_insn->cfi, &state.cfi)) { + insn->cfi = prev_insn->cfi; + nr_cfi_reused++; + } else { + insn->cfi = cfi_hash_find_or_add(&state.cfi); + } + } insn->visited |= visited; @@ -2853,6 +3107,11 @@ switch (insn->type) { case INSN_RETURN: + if (sls && !insn->retpoline_safe && + next_insn && next_insn->type != INSN_TRAP) { + WARN_FUNC("missing int3 after ret", + insn->sec, insn->offset); + } return validate_return(func, insn, &state); case INSN_CALL: @@ -2896,6 +3155,13 @@ break; case INSN_JUMP_DYNAMIC: + if (sls && !insn->retpoline_safe && + next_insn && next_insn->type != INSN_TRAP) { + WARN_FUNC("missing int3 after indirect jump", + insn->sec, insn->offset); + } + + /* fallthrough */ case INSN_JUMP_DYNAMIC_CONDITIONAL: if (is_sibling_call(insn)) { ret = validate_sibling_call(insn, &state); @@ -2971,6 +3237,7 @@ return 1; } + prev_insn = insn; insn = next_insn; } @@ -3010,6 +3277,145 @@ return warnings; } +/* + * Validate rethunk entry constraint: must untrain RET before the first RET. + * + * Follow every branch (intra-function) and ensure ANNOTATE_UNRET_END comes + * before an actual RET instruction. + */ +static int validate_entry(struct objtool_file *file, struct instruction *insn) +{ + struct instruction *next, *dest; + int ret, warnings = 0; + + for (;;) { + next = next_insn_to_validate(file, insn); + + if (insn->visited & VISITED_ENTRY) + return 0; + + insn->visited |= VISITED_ENTRY; + + if (!insn->ignore_alts && !list_empty(&insn->alts)) { + struct alternative *alt; + bool skip_orig = false; + + list_for_each_entry(alt, &insn->alts, list) { + if (alt->skip_orig) + skip_orig = true; + + ret = validate_entry(file, alt->insn); + if (ret) { + if (backtrace) + BT_FUNC("(alt)", insn); + return ret; + } + } + + if (skip_orig) + return 0; + } + + switch (insn->type) { + + case INSN_CALL_DYNAMIC: + case INSN_JUMP_DYNAMIC: + case INSN_JUMP_DYNAMIC_CONDITIONAL: + WARN_FUNC("early indirect call", insn->sec, insn->offset); + return 1; + + case INSN_JUMP_UNCONDITIONAL: + case INSN_JUMP_CONDITIONAL: + if (!is_sibling_call(insn)) { + if (!insn->jump_dest) { + WARN_FUNC("unresolved jump target after linking?!?", + insn->sec, insn->offset); + return -1; + } + ret = validate_entry(file, insn->jump_dest); + if (ret) { + if (backtrace) { + BT_FUNC("(branch%s)", insn, + insn->type == INSN_JUMP_CONDITIONAL ? "-cond" : ""); + } + return ret; + } + + if (insn->type == INSN_JUMP_UNCONDITIONAL) + return 0; + + break; + } + + /* fallthrough */ + case INSN_CALL: + dest = find_insn(file, insn->call_dest->sec, + insn->call_dest->offset); + if (!dest) { + WARN("Unresolved function after linking!?: %s", + insn->call_dest->name); + return -1; + } + + ret = validate_entry(file, dest); + if (ret) { + if (backtrace) + BT_FUNC("(call)", insn); + return ret; + } + /* + * If a call returns without error, it must have seen UNTRAIN_RET. + * Therefore any non-error return is a success. + */ + return 0; + + case INSN_RETURN: + WARN_FUNC("RET before UNTRAIN", insn->sec, insn->offset); + return 1; + + case INSN_NOP: + if (insn->retpoline_safe) + return 0; + break; + + default: + break; + } + + if (!next) { + WARN_FUNC("teh end!", insn->sec, insn->offset); + return -1; + } + insn = next; + } + + return warnings; +} + +/* + * Validate that all branches starting at 'insn->entry' encounter UNRET_END + * before RET. + */ +static int validate_unret(struct objtool_file *file) +{ + struct instruction *insn; + int ret, warnings = 0; + + for_each_insn(file, insn) { + if (!insn->entry) + continue; + + ret = validate_entry(file, insn); + if (ret < 0) { + WARN_FUNC("Failed UNRET validation", insn->sec, insn->offset); + return ret; + } + warnings += ret; + } + + return warnings; +} + static int validate_retpoline(struct objtool_file *file) { struct instruction *insn; @@ -3017,7 +3423,8 @@ for_each_insn(file, insn) { if (insn->type != INSN_JUMP_DYNAMIC && - insn->type != INSN_CALL_DYNAMIC) + insn->type != INSN_CALL_DYNAMIC && + insn->type != INSN_RETURN) continue; if (insn->retpoline_safe) @@ -3032,9 +3439,17 @@ if (!strcmp(insn->sec->name, ".init.text") && !module) continue; - WARN_FUNC("indirect %s found in RETPOLINE build", - insn->sec, insn->offset, - insn->type == INSN_JUMP_DYNAMIC ? "jump" : "call"); + if (insn->type == INSN_RETURN) { + if (rethunk) { + WARN_FUNC("'naked' return found in RETHUNK build", + insn->sec, insn->offset); + } else + continue; + } else { + WARN_FUNC("indirect %s found in RETPOLINE build", + insn->sec, insn->offset, + insn->type == INSN_JUMP_DYNAMIC ? "jump" : "call"); + } warnings++; } @@ -3060,7 +3475,7 @@ int i; struct instruction *prev_insn; - if (insn->ignore || insn->type == INSN_NOP) + if (insn->ignore || insn->type == INSN_NOP || insn->type == INSN_TRAP) return true; /* @@ -3226,10 +3641,20 @@ int ret, warnings = 0; arch_initial_func_cfi_state(&initial_func_cfi); + init_cfi_state(&init_cfi); + init_cfi_state(&func_cfi); + set_func_state(&func_cfi); + + if (!cfi_hash_alloc(1UL << (file->elf->symbol_bits - 3))) + goto out; + + cfi_hash_add(&init_cfi); + cfi_hash_add(&func_cfi); ret = decode_sections(file); if (ret < 0) goto out; + warnings += ret; if (list_empty(&file->insn_list)) @@ -3261,6 +3686,17 @@ goto out; warnings += ret; + if (unret) { + /* + * Must be after validate_branch() and friends, it plays + * further games with insn->visited. + */ + ret = validate_unret(file); + if (ret < 0) + return ret; + warnings += ret; + } + if (!warnings) { ret = validate_reachable_instructions(file); if (ret < 0) @@ -3280,6 +3716,13 @@ warnings += ret; } + if (rethunk) { + ret = create_return_sites_sections(file); + if (ret < 0) + goto out; + warnings += ret; + } + if (mcount) { ret = create_mcount_loc_sections(file); if (ret < 0) @@ -3287,6 +3730,13 @@ warnings += ret; } + if (stats) { + printf("nr_insns_visited: %ld\n", nr_insns_visited); + printf("nr_cfi: %ld\n", nr_cfi); + printf("nr_cfi_reused: %ld\n", nr_cfi_reused); + printf("nr_cfi_cache: %ld\n", nr_cfi_cache); + } + out: /* * For now, don't fail the kernel build on fatal warnings. These diff -u linux-hwe-5.15-5.15.0/tools/objtool/elf.c linux-hwe-5.15-5.15.0/tools/objtool/elf.c --- linux-hwe-5.15-5.15.0/tools/objtool/elf.c +++ linux-hwe-5.15-5.15.0/tools/objtool/elf.c @@ -314,6 +314,8 @@ struct list_head *entry; struct rb_node *pnode; + sym->alias = sym; + sym->type = GELF_ST_TYPE(sym->sym.st_info); sym->bind = GELF_ST_BIND(sym->sym.st_info); @@ -375,7 +377,6 @@ return -1; } memset(sym, 0, sizeof(*sym)); - sym->alias = sym; sym->idx = i; @@ -485,7 +486,7 @@ int reltype); int elf_add_reloc(struct elf *elf, struct section *sec, unsigned long offset, - unsigned int type, struct symbol *sym, long addend) + unsigned int type, struct symbol *sym, s64 addend) { struct reloc *reloc; @@ -539,24 +540,21 @@ } /* - * Move the first global symbol, as per sh_info, into a new, higher symbol - * index. This fees up the shndx for a new local symbol. + * The libelf API is terrible; gelf_update_sym*() takes a data block relative + * index value, *NOT* the symbol index. As such, iterate the data blocks and + * adjust index until it fits. + * + * If no data block is found, allow adding a new data block provided the index + * is only one past the end. */ -static int elf_move_global_symbol(struct elf *elf, struct section *symtab, - struct section *symtab_shndx) +static int elf_update_symbol(struct elf *elf, struct section *symtab, + struct section *symtab_shndx, struct symbol *sym) { - Elf_Data *data, *shndx_data = NULL; - Elf32_Word first_non_local; - struct symbol *sym; - Elf_Scn *s; - - first_non_local = symtab->sh.sh_info; - - sym = find_symbol_by_index(elf, first_non_local); - if (!sym) { - WARN("no non-local symbols !?"); - return first_non_local; - } + Elf32_Word shndx = sym->sec ? sym->sec->idx : SHN_UNDEF; + Elf_Data *symtab_data = NULL, *shndx_data = NULL; + Elf64_Xword entsize = symtab->sh.sh_entsize; + int max_idx, idx = sym->idx; + Elf_Scn *s, *t = NULL; s = elf_getscn(elf->elf, symtab->idx); if (!s) { @@ -564,79 +562,124 @@ return -1; } - data = elf_newdata(s); - if (!data) { - WARN_ELF("elf_newdata"); - return -1; + if (symtab_shndx) { + t = elf_getscn(elf->elf, symtab_shndx->idx); + if (!t) { + WARN_ELF("elf_getscn"); + return -1; + } } - data->d_buf = &sym->sym; - data->d_size = sizeof(sym->sym); - data->d_align = 1; - data->d_type = ELF_T_SYM; + for (;;) { + /* get next data descriptor for the relevant sections */ + symtab_data = elf_getdata(s, symtab_data); + if (t) + shndx_data = elf_getdata(t, shndx_data); + + /* end-of-list */ + if (!symtab_data) { + void *buf; + + if (idx) { + /* we don't do holes in symbol tables */ + WARN("index out of range"); + return -1; + } - sym->idx = symtab->sh.sh_size / sizeof(sym->sym); - elf_dirty_reloc_sym(elf, sym); + /* if @idx == 0, it's the next contiguous entry, create it */ + symtab_data = elf_newdata(s); + if (t) + shndx_data = elf_newdata(t); + + buf = calloc(1, entsize); + if (!buf) { + WARN("malloc"); + return -1; + } - symtab->sh.sh_info += 1; - symtab->sh.sh_size += data->d_size; - symtab->changed = true; + symtab_data->d_buf = buf; + symtab_data->d_size = entsize; + symtab_data->d_align = 1; + symtab_data->d_type = ELF_T_SYM; + + symtab->sh.sh_size += entsize; + symtab->changed = true; + + if (t) { + shndx_data->d_buf = &sym->sec->idx; + shndx_data->d_size = sizeof(Elf32_Word); + shndx_data->d_align = sizeof(Elf32_Word); + shndx_data->d_type = ELF_T_WORD; - if (symtab_shndx) { - s = elf_getscn(elf->elf, symtab_shndx->idx); - if (!s) { - WARN_ELF("elf_getscn"); + symtab_shndx->sh.sh_size += sizeof(Elf32_Word); + symtab_shndx->changed = true; + } + + break; + } + + /* empty blocks should not happen */ + if (!symtab_data->d_size) { + WARN("zero size data"); return -1; } - shndx_data = elf_newdata(s); + /* is this the right block? */ + max_idx = symtab_data->d_size / entsize; + if (idx < max_idx) + break; + + /* adjust index and try again */ + idx -= max_idx; + } + + /* something went side-ways */ + if (idx < 0) { + WARN("negative index"); + return -1; + } + + /* setup extended section index magic and write the symbol */ + if (shndx >= SHN_UNDEF && shndx < SHN_LORESERVE) { + sym->sym.st_shndx = shndx; + if (!shndx_data) + shndx = 0; + } else { + sym->sym.st_shndx = SHN_XINDEX; if (!shndx_data) { - WARN_ELF("elf_newshndx_data"); + WARN("no .symtab_shndx"); return -1; } + } - shndx_data->d_buf = &sym->sec->idx; - shndx_data->d_size = sizeof(Elf32_Word); - shndx_data->d_align = 4; - shndx_data->d_type = ELF_T_WORD; - - symtab_shndx->sh.sh_size += 4; - symtab_shndx->changed = true; + if (!gelf_update_symshndx(symtab_data, shndx_data, idx, &sym->sym, shndx)) { + WARN_ELF("gelf_update_symshndx"); + return -1; } - return first_non_local; + return 0; } static struct symbol * elf_create_section_symbol(struct elf *elf, struct section *sec) { struct section *symtab, *symtab_shndx; - Elf_Data *shndx_data = NULL; - struct symbol *sym; - Elf32_Word shndx; + Elf32_Word first_non_local, new_idx; + struct symbol *sym, *old; symtab = find_section_by_name(elf, ".symtab"); if (symtab) { symtab_shndx = find_section_by_name(elf, ".symtab_shndx"); - if (symtab_shndx) - shndx_data = symtab_shndx->data; } else { WARN("no .symtab"); return NULL; } - sym = malloc(sizeof(*sym)); + sym = calloc(1, sizeof(*sym)); if (!sym) { perror("malloc"); return NULL; } - memset(sym, 0, sizeof(*sym)); - - sym->idx = elf_move_global_symbol(elf, symtab, symtab_shndx); - if (sym->idx < 0) { - WARN("elf_move_global_symbol"); - return NULL; - } sym->name = sec->name; sym->sec = sec; @@ -646,24 +689,41 @@ // st_other 0 // st_value 0 // st_size 0 - shndx = sec->idx; - if (shndx >= SHN_UNDEF && shndx < SHN_LORESERVE) { - sym->sym.st_shndx = shndx; - if (!shndx_data) - shndx = 0; - } else { - sym->sym.st_shndx = SHN_XINDEX; - if (!shndx_data) { - WARN("no .symtab_shndx"); + + /* + * Move the first global symbol, as per sh_info, into a new, higher + * symbol index. This fees up a spot for a new local symbol. + */ + first_non_local = symtab->sh.sh_info; + new_idx = symtab->sh.sh_size / symtab->sh.sh_entsize; + old = find_symbol_by_index(elf, first_non_local); + if (old) { + old->idx = new_idx; + + hlist_del(&old->hash); + elf_hash_add(symbol, &old->hash, old->idx); + + elf_dirty_reloc_sym(elf, old); + + if (elf_update_symbol(elf, symtab, symtab_shndx, old)) { + WARN("elf_update_symbol move"); return NULL; } + + new_idx = first_non_local; } - if (!gelf_update_symshndx(symtab->data, shndx_data, sym->idx, &sym->sym, shndx)) { - WARN_ELF("gelf_update_symshndx"); + sym->idx = new_idx; + if (elf_update_symbol(elf, symtab, symtab_shndx, sym)) { + WARN("elf_update_symbol"); return NULL; } + /* + * Either way, we added a LOCAL symbol. + */ + symtab->sh.sh_info += 1; + elf_add_symbol(elf, sym); return sym; diff -u linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/arch.h linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/arch.h --- linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/arch.h +++ linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/arch.h @@ -26,6 +26,7 @@ INSN_CLAC, INSN_STD, INSN_CLD, + INSN_TRAP, INSN_OTHER, }; @@ -84,9 +85,10 @@ const char *arch_nop_insn(int len); const char *arch_ret_insn(int len); -int arch_decode_hint_reg(struct instruction *insn, u8 sp_reg); +int arch_decode_hint_reg(u8 sp_reg, int *base); bool arch_is_retpoline(struct symbol *sym); +bool arch_is_rethunk(struct symbol *sym); int arch_rewrite_retpolines(struct objtool_file *file); diff -u linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/check.h linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/check.h --- linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/check.h +++ linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/check.h @@ -47,7 +47,9 @@ unsigned long immediate; bool dead_end, ignore, ignore_alts; bool hint; + bool save, restore; bool retpoline_safe; + bool entry; s8 instr; u8 visited; struct alt_group *alt_group; @@ -59,9 +61,14 @@ struct list_head alts; struct symbol *func; struct list_head stack_ops; - struct cfi_state cfi; + struct cfi_state *cfi; }; +#define VISITED_BRANCH 0x01 +#define VISITED_BRANCH_UACCESS 0x02 +#define VISITED_BRANCH_MASK 0x03 +#define VISITED_ENTRY 0x04 + static inline bool is_static_jump(struct instruction *insn) { return insn->type == INSN_JUMP_CONDITIONAL || diff -u linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/elf.h linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/elf.h --- linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/elf.h +++ linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/elf.h @@ -57,6 +57,7 @@ u8 uaccess_safe : 1; u8 static_call_tramp : 1; u8 retpoline_thunk : 1; + u8 return_thunk : 1; u8 fentry : 1; u8 kcov : 1; }; @@ -72,7 +73,7 @@ struct symbol *sym; unsigned long offset; unsigned int type; - long addend; + s64 addend; int idx; bool jump_table_start; }; @@ -134,7 +135,7 @@ struct section *elf_create_section(struct elf *elf, const char *name, unsigned int sh_flags, size_t entsize, int nr); int elf_add_reloc(struct elf *elf, struct section *sec, unsigned long offset, - unsigned int type, struct symbol *sym, long addend); + unsigned int type, struct symbol *sym, s64 addend); int elf_add_reloc_to_insn(struct elf *elf, struct section *sec, unsigned long offset, unsigned int type, struct section *insn_sec, unsigned long insn_off); only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/Makefile +++ linux-hwe-5.15-5.15.0/arch/x86/Makefile @@ -24,7 +24,7 @@ # How to compile the 16-bit code. Note we always compile for -march=i386; # that way we can complain to the user if the CPU is insufficient. -REALMODE_CFLAGS := -m16 -g -Os -DDISABLE_BRANCH_PROFILING \ +REALMODE_CFLAGS := -m16 -g -Os -DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS \ -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \ -fno-strict-aliasing -fomit-frame-pointer -fno-pic \ -mno-mmx -mno-sse $(call cc-option,-fcf-protection=none) @@ -179,6 +179,10 @@ endif endif +ifdef CONFIG_SLS + KBUILD_CFLAGS += -mharden-sls=all +endif + KBUILD_LDFLAGS += -m elf_$(UTS_MACHINE) ifdef CONFIG_LTO_CLANG only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/boot/compressed/efi_thunk_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/boot/compressed/efi_thunk_64.S @@ -93,7 +93,7 @@ pop %rbx pop %rbp - ret + RET SYM_FUNC_END(__efi64_thunk) .code32 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/boot/compressed/head_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/boot/compressed/head_64.S @@ -813,7 +813,7 @@ 2: popl %edi // restore callee-save registers popl %ebx leave - ret + RET SYM_FUNC_END(efi32_pe_entry) .section ".rodata" @@ -868,7 +868,7 @@ pop %ecx pop %ebx - ret + RET SYM_FUNC_END(startup32_set_idt_entry) #endif @@ -884,7 +884,7 @@ movl %eax, rva(boot32_idt_desc+2)(%ebp) lidt rva(boot32_idt_desc)(%ebp) #endif - ret + RET SYM_FUNC_END(startup32_load_idt) /* @@ -954,7 +954,7 @@ popl %ebx popl %eax #endif - ret + RET SYM_FUNC_END(startup32_check_sev_cbit) /* only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/boot/compressed/mem_encrypt.S +++ linux-hwe-5.15-5.15.0/arch/x86/boot/compressed/mem_encrypt.S @@ -58,7 +58,7 @@ #endif /* CONFIG_AMD_MEM_ENCRYPT */ - ret + RET SYM_FUNC_END(get_sev_encryption_bit) /** @@ -92,7 +92,7 @@ /* All good - return success */ xorl %eax, %eax 1: - ret + RET 2: movl $-1, %eax jmp 1b @@ -221,7 +221,7 @@ #endif xor %rax, %rax - ret + RET SYM_FUNC_END(set_sev_encryption_mask) .data only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/aegis128-aesni-asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/aegis128-aesni-asm.S @@ -122,7 +122,7 @@ pxor T0, MSG .Lld_partial_8: - ret + RET SYM_FUNC_END(__load_partial) /* @@ -180,7 +180,7 @@ mov %r10b, (%r9) .Lst_partial_1: - ret + RET SYM_FUNC_END(__store_partial) /* @@ -225,7 +225,7 @@ movdqu STATE4, 0x40(STATEP) FRAME_END - ret + RET SYM_FUNC_END(crypto_aegis128_aesni_init) /* @@ -337,7 +337,7 @@ movdqu STATE3, 0x30(STATEP) movdqu STATE4, 0x40(STATEP) FRAME_END - ret + RET .Lad_out_1: movdqu STATE4, 0x00(STATEP) @@ -346,7 +346,7 @@ movdqu STATE2, 0x30(STATEP) movdqu STATE3, 0x40(STATEP) FRAME_END - ret + RET .Lad_out_2: movdqu STATE3, 0x00(STATEP) @@ -355,7 +355,7 @@ movdqu STATE1, 0x30(STATEP) movdqu STATE2, 0x40(STATEP) FRAME_END - ret + RET .Lad_out_3: movdqu STATE2, 0x00(STATEP) @@ -364,7 +364,7 @@ movdqu STATE0, 0x30(STATEP) movdqu STATE1, 0x40(STATEP) FRAME_END - ret + RET .Lad_out_4: movdqu STATE1, 0x00(STATEP) @@ -373,11 +373,11 @@ movdqu STATE4, 0x30(STATEP) movdqu STATE0, 0x40(STATEP) FRAME_END - ret + RET .Lad_out: FRAME_END - ret + RET SYM_FUNC_END(crypto_aegis128_aesni_ad) .macro encrypt_block a s0 s1 s2 s3 s4 i @@ -452,7 +452,7 @@ movdqu STATE2, 0x30(STATEP) movdqu STATE3, 0x40(STATEP) FRAME_END - ret + RET .Lenc_out_1: movdqu STATE3, 0x00(STATEP) @@ -461,7 +461,7 @@ movdqu STATE1, 0x30(STATEP) movdqu STATE2, 0x40(STATEP) FRAME_END - ret + RET .Lenc_out_2: movdqu STATE2, 0x00(STATEP) @@ -470,7 +470,7 @@ movdqu STATE0, 0x30(STATEP) movdqu STATE1, 0x40(STATEP) FRAME_END - ret + RET .Lenc_out_3: movdqu STATE1, 0x00(STATEP) @@ -479,7 +479,7 @@ movdqu STATE4, 0x30(STATEP) movdqu STATE0, 0x40(STATEP) FRAME_END - ret + RET .Lenc_out_4: movdqu STATE0, 0x00(STATEP) @@ -488,11 +488,11 @@ movdqu STATE3, 0x30(STATEP) movdqu STATE4, 0x40(STATEP) FRAME_END - ret + RET .Lenc_out: FRAME_END - ret + RET SYM_FUNC_END(crypto_aegis128_aesni_enc) /* @@ -532,7 +532,7 @@ movdqu STATE3, 0x40(STATEP) FRAME_END - ret + RET SYM_FUNC_END(crypto_aegis128_aesni_enc_tail) .macro decrypt_block a s0 s1 s2 s3 s4 i @@ -606,7 +606,7 @@ movdqu STATE2, 0x30(STATEP) movdqu STATE3, 0x40(STATEP) FRAME_END - ret + RET .Ldec_out_1: movdqu STATE3, 0x00(STATEP) @@ -615,7 +615,7 @@ movdqu STATE1, 0x30(STATEP) movdqu STATE2, 0x40(STATEP) FRAME_END - ret + RET .Ldec_out_2: movdqu STATE2, 0x00(STATEP) @@ -624,7 +624,7 @@ movdqu STATE0, 0x30(STATEP) movdqu STATE1, 0x40(STATEP) FRAME_END - ret + RET .Ldec_out_3: movdqu STATE1, 0x00(STATEP) @@ -633,7 +633,7 @@ movdqu STATE4, 0x30(STATEP) movdqu STATE0, 0x40(STATEP) FRAME_END - ret + RET .Ldec_out_4: movdqu STATE0, 0x00(STATEP) @@ -642,11 +642,11 @@ movdqu STATE3, 0x30(STATEP) movdqu STATE4, 0x40(STATEP) FRAME_END - ret + RET .Ldec_out: FRAME_END - ret + RET SYM_FUNC_END(crypto_aegis128_aesni_dec) /* @@ -696,7 +696,7 @@ movdqu STATE3, 0x40(STATEP) FRAME_END - ret + RET SYM_FUNC_END(crypto_aegis128_aesni_dec_tail) /* @@ -743,5 +743,5 @@ movdqu MSG, (%rsi) FRAME_END - ret + RET SYM_FUNC_END(crypto_aegis128_aesni_final) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/aes_ctrby8_avx-x86_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/aes_ctrby8_avx-x86_64.S @@ -525,7 +525,7 @@ /* return updated IV */ vpshufb xbyteswap, xcounter, xcounter vmovdqu xcounter, (p_iv) - ret + RET .endm /* only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/aesni-intel_asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/aesni-intel_asm.S @@ -1594,7 +1594,7 @@ GCM_ENC_DEC dec GCM_COMPLETE arg10, arg11 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_dec) @@ -1683,7 +1683,7 @@ GCM_COMPLETE arg10, arg11 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_enc) /***************************************************************************** @@ -1701,7 +1701,7 @@ FUNC_SAVE GCM_INIT %arg3, %arg4,%arg5, %arg6 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_init) /***************************************************************************** @@ -1716,7 +1716,7 @@ FUNC_SAVE GCM_ENC_DEC enc FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_enc_update) /***************************************************************************** @@ -1731,7 +1731,7 @@ FUNC_SAVE GCM_ENC_DEC dec FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_dec_update) /***************************************************************************** @@ -1746,7 +1746,7 @@ FUNC_SAVE GCM_COMPLETE %arg3 %arg4 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_finalize) #endif @@ -1762,7 +1762,7 @@ pxor %xmm1, %xmm0 movaps %xmm0, (TKEYP) add $0x10, TKEYP - ret + RET SYM_FUNC_END(_key_expansion_256a) SYM_FUNC_END_ALIAS(_key_expansion_128) @@ -1787,7 +1787,7 @@ shufps $0b01001110, %xmm2, %xmm1 movaps %xmm1, 0x10(TKEYP) add $0x20, TKEYP - ret + RET SYM_FUNC_END(_key_expansion_192a) SYM_FUNC_START_LOCAL(_key_expansion_192b) @@ -1806,7 +1806,7 @@ movaps %xmm0, (TKEYP) add $0x10, TKEYP - ret + RET SYM_FUNC_END(_key_expansion_192b) SYM_FUNC_START_LOCAL(_key_expansion_256b) @@ -1818,7 +1818,7 @@ pxor %xmm1, %xmm2 movaps %xmm2, (TKEYP) add $0x10, TKEYP - ret + RET SYM_FUNC_END(_key_expansion_256b) /* @@ -1933,7 +1933,7 @@ popl KEYP #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_set_key) /* @@ -1957,7 +1957,7 @@ popl KEYP #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_enc) /* @@ -2014,7 +2014,7 @@ aesenc KEY, STATE movaps 0x70(TKEYP), KEY aesenclast KEY, STATE - ret + RET SYM_FUNC_END(_aesni_enc1) /* @@ -2122,7 +2122,7 @@ aesenclast KEY, STATE2 aesenclast KEY, STATE3 aesenclast KEY, STATE4 - ret + RET SYM_FUNC_END(_aesni_enc4) /* @@ -2147,7 +2147,7 @@ popl KEYP #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_dec) /* @@ -2204,7 +2204,7 @@ aesdec KEY, STATE movaps 0x70(TKEYP), KEY aesdeclast KEY, STATE - ret + RET SYM_FUNC_END(_aesni_dec1) /* @@ -2312,7 +2312,7 @@ aesdeclast KEY, STATE2 aesdeclast KEY, STATE3 aesdeclast KEY, STATE4 - ret + RET SYM_FUNC_END(_aesni_dec4) /* @@ -2372,7 +2372,7 @@ popl LEN #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_ecb_enc) /* @@ -2433,7 +2433,7 @@ popl LEN #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_ecb_dec) /* @@ -2477,7 +2477,7 @@ popl IVP #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_cbc_enc) /* @@ -2570,7 +2570,7 @@ popl IVP #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_cbc_dec) /* @@ -2627,7 +2627,7 @@ popl IVP #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_cts_cbc_enc) /* @@ -2688,7 +2688,7 @@ popl IVP #endif FRAME_END - ret + RET SYM_FUNC_END(aesni_cts_cbc_dec) .pushsection .rodata @@ -2725,7 +2725,7 @@ mov $1, TCTR_LOW movq TCTR_LOW, INC movq CTR, TCTR_LOW - ret + RET SYM_FUNC_END(_aesni_inc_init) /* @@ -2753,7 +2753,7 @@ .Linc_low: movaps CTR, IV pshufb BSWAP_MASK, IV - ret + RET SYM_FUNC_END(_aesni_inc) /* @@ -2816,7 +2816,7 @@ movups IV, (IVP) .Lctr_enc_just_ret: FRAME_END - ret + RET SYM_FUNC_END(aesni_ctr_enc) #endif @@ -2932,7 +2932,7 @@ popl IVP #endif FRAME_END - ret + RET .Lxts_enc_1x: add $64, LEN @@ -3092,7 +3092,7 @@ popl IVP #endif FRAME_END - ret + RET .Lxts_dec_1x: add $64, LEN only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/aesni-intel_avx-x86_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/aesni-intel_avx-x86_64.S @@ -1767,7 +1767,7 @@ FUNC_SAVE INIT GHASH_MUL_AVX, PRECOMPUTE_AVX FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_init_avx_gen2) ############################################################################### @@ -1788,15 +1788,15 @@ # must be 192 GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, ENC, 11 FUNC_RESTORE - ret + RET key_128_enc_update: GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, ENC, 9 FUNC_RESTORE - ret + RET key_256_enc_update: GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, ENC, 13 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_enc_update_avx_gen2) ############################################################################### @@ -1817,15 +1817,15 @@ # must be 192 GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, DEC, 11 FUNC_RESTORE - ret + RET key_128_dec_update: GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, DEC, 9 FUNC_RESTORE - ret + RET key_256_dec_update: GCM_ENC_DEC INITIAL_BLOCKS_AVX, GHASH_8_ENCRYPT_8_PARALLEL_AVX, GHASH_LAST_8_AVX, GHASH_MUL_AVX, DEC, 13 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_dec_update_avx_gen2) ############################################################################### @@ -1846,15 +1846,15 @@ # must be 192 GCM_COMPLETE GHASH_MUL_AVX, 11, arg3, arg4 FUNC_RESTORE - ret + RET key_128_finalize: GCM_COMPLETE GHASH_MUL_AVX, 9, arg3, arg4 FUNC_RESTORE - ret + RET key_256_finalize: GCM_COMPLETE GHASH_MUL_AVX, 13, arg3, arg4 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_finalize_avx_gen2) ############################################################################### @@ -2735,7 +2735,7 @@ FUNC_SAVE INIT GHASH_MUL_AVX2, PRECOMPUTE_AVX2 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_init_avx_gen4) ############################################################################### @@ -2756,15 +2756,15 @@ # must be 192 GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, ENC, 11 FUNC_RESTORE - ret + RET key_128_enc_update4: GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, ENC, 9 FUNC_RESTORE - ret + RET key_256_enc_update4: GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, ENC, 13 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_enc_update_avx_gen4) ############################################################################### @@ -2785,15 +2785,15 @@ # must be 192 GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, DEC, 11 FUNC_RESTORE - ret + RET key_128_dec_update4: GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, DEC, 9 FUNC_RESTORE - ret + RET key_256_dec_update4: GCM_ENC_DEC INITIAL_BLOCKS_AVX2, GHASH_8_ENCRYPT_8_PARALLEL_AVX2, GHASH_LAST_8_AVX2, GHASH_MUL_AVX2, DEC, 13 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_dec_update_avx_gen4) ############################################################################### @@ -2814,13 +2814,13 @@ # must be 192 GCM_COMPLETE GHASH_MUL_AVX2, 11, arg3, arg4 FUNC_RESTORE - ret + RET key_128_finalize4: GCM_COMPLETE GHASH_MUL_AVX2, 9, arg3, arg4 FUNC_RESTORE - ret + RET key_256_finalize4: GCM_COMPLETE GHASH_MUL_AVX2, 13, arg3, arg4 FUNC_RESTORE - ret + RET SYM_FUNC_END(aesni_gcm_finalize_avx_gen4) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/blake2s-core.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/blake2s-core.S @@ -171,7 +171,7 @@ movdqu %xmm1,0x10(%rdi) movdqu %xmm14,0x20(%rdi) .Lendofloop: - ret + RET SYM_FUNC_END(blake2s_compress_ssse3) #ifdef CONFIG_AS_AVX512 @@ -251,6 +251,6 @@ vmovdqu %xmm1,0x10(%rdi) vmovdqu %xmm4,0x20(%rdi) vzeroupper - retq + RET SYM_FUNC_END(blake2s_compress_avx512) #endif /* CONFIG_AS_AVX512 */ only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/blowfish-x86_64-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/blowfish-x86_64-asm_64.S @@ -135,10 +135,10 @@ jnz .L__enc_xor; write_block(); - ret; + RET; .L__enc_xor: xor_block(); - ret; + RET; SYM_FUNC_END(__blowfish_enc_blk) SYM_FUNC_START(blowfish_dec_blk) @@ -170,7 +170,7 @@ movq %r11, %r12; - ret; + RET; SYM_FUNC_END(blowfish_dec_blk) /********************************************************************** @@ -322,14 +322,14 @@ popq %rbx; popq %r12; - ret; + RET; .L__enc_xor4: xor_block4(); popq %rbx; popq %r12; - ret; + RET; SYM_FUNC_END(__blowfish_enc_blk_4way) SYM_FUNC_START(blowfish_dec_blk_4way) @@ -364,5 +364,5 @@ popq %rbx; popq %r12; - ret; + RET; SYM_FUNC_END(blowfish_dec_blk_4way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/camellia-aesni-avx-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/camellia-aesni-avx-asm_64.S @@ -192,7 +192,7 @@ roundsm16(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14, %xmm15, %rcx, (%r9)); - ret; + RET; SYM_FUNC_END(roundsm16_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd) .align 8 @@ -200,7 +200,7 @@ roundsm16(%xmm4, %xmm5, %xmm6, %xmm7, %xmm0, %xmm1, %xmm2, %xmm3, %xmm12, %xmm13, %xmm14, %xmm15, %xmm8, %xmm9, %xmm10, %xmm11, %rax, (%r9)); - ret; + RET; SYM_FUNC_END(roundsm16_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab) /* @@ -778,7 +778,7 @@ %xmm15, (key_table)(CTX, %r8, 8), (%rax), 1 * 16(%rax)); FRAME_END - ret; + RET; .align 8 .Lenc_max32: @@ -865,7 +865,7 @@ %xmm15, (key_table)(CTX), (%rax), 1 * 16(%rax)); FRAME_END - ret; + RET; .align 8 .Ldec_max32: @@ -906,7 +906,7 @@ %xmm8, %rsi); FRAME_END - ret; + RET; SYM_FUNC_END(camellia_ecb_enc_16way) SYM_FUNC_START(camellia_ecb_dec_16way) @@ -936,7 +936,7 @@ %xmm8, %rsi); FRAME_END - ret; + RET; SYM_FUNC_END(camellia_ecb_dec_16way) SYM_FUNC_START(camellia_cbc_dec_16way) @@ -987,5 +987,5 @@ %xmm8, %rsi); FRAME_END - ret; + RET; SYM_FUNC_END(camellia_cbc_dec_16way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/camellia-aesni-avx2-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/camellia-aesni-avx2-asm_64.S @@ -226,7 +226,7 @@ roundsm32(%ymm0, %ymm1, %ymm2, %ymm3, %ymm4, %ymm5, %ymm6, %ymm7, %ymm8, %ymm9, %ymm10, %ymm11, %ymm12, %ymm13, %ymm14, %ymm15, %rcx, (%r9)); - ret; + RET; SYM_FUNC_END(roundsm32_x0_x1_x2_x3_x4_x5_x6_x7_y0_y1_y2_y3_y4_y5_y6_y7_cd) .align 8 @@ -234,7 +234,7 @@ roundsm32(%ymm4, %ymm5, %ymm6, %ymm7, %ymm0, %ymm1, %ymm2, %ymm3, %ymm12, %ymm13, %ymm14, %ymm15, %ymm8, %ymm9, %ymm10, %ymm11, %rax, (%r9)); - ret; + RET; SYM_FUNC_END(roundsm32_x4_x5_x6_x7_x0_x1_x2_x3_y4_y5_y6_y7_y0_y1_y2_y3_ab) /* @@ -814,7 +814,7 @@ %ymm15, (key_table)(CTX, %r8, 8), (%rax), 1 * 32(%rax)); FRAME_END - ret; + RET; .align 8 .Lenc_max32: @@ -901,7 +901,7 @@ %ymm15, (key_table)(CTX), (%rax), 1 * 32(%rax)); FRAME_END - ret; + RET; .align 8 .Ldec_max32: @@ -946,7 +946,7 @@ vzeroupper; FRAME_END - ret; + RET; SYM_FUNC_END(camellia_ecb_enc_32way) SYM_FUNC_START(camellia_ecb_dec_32way) @@ -980,7 +980,7 @@ vzeroupper; FRAME_END - ret; + RET; SYM_FUNC_END(camellia_ecb_dec_32way) SYM_FUNC_START(camellia_cbc_dec_32way) @@ -1047,5 +1047,5 @@ addq $(16 * 32), %rsp; FRAME_END - ret; + RET; SYM_FUNC_END(camellia_cbc_dec_32way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/camellia-x86_64-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/camellia-x86_64-asm_64.S @@ -213,13 +213,13 @@ enc_outunpack(mov, RT1); movq RR12, %r12; - ret; + RET; .L__enc_xor: enc_outunpack(xor, RT1); movq RR12, %r12; - ret; + RET; SYM_FUNC_END(__camellia_enc_blk) SYM_FUNC_START(camellia_dec_blk) @@ -257,7 +257,7 @@ dec_outunpack(); movq RR12, %r12; - ret; + RET; SYM_FUNC_END(camellia_dec_blk) /********************************************************************** @@ -448,14 +448,14 @@ movq RR12, %r12; popq %rbx; - ret; + RET; .L__enc2_xor: enc_outunpack2(xor, RT2); movq RR12, %r12; popq %rbx; - ret; + RET; SYM_FUNC_END(__camellia_enc_blk_2way) SYM_FUNC_START(camellia_dec_blk_2way) @@ -495,5 +495,5 @@ movq RR12, %r12; movq RXOR, %rbx; - ret; + RET; SYM_FUNC_END(camellia_dec_blk_2way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/cast5-avx-x86_64-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/cast5-avx-x86_64-asm_64.S @@ -279,7 +279,7 @@ outunpack_blocks(RR3, RL3, RTMP, RX, RKM); outunpack_blocks(RR4, RL4, RTMP, RX, RKM); - ret; + RET; SYM_FUNC_END(__cast5_enc_blk16) .align 16 @@ -352,7 +352,7 @@ outunpack_blocks(RR3, RL3, RTMP, RX, RKM); outunpack_blocks(RR4, RL4, RTMP, RX, RKM); - ret; + RET; .L__skip_dec: vpsrldq $4, RKR, RKR; @@ -393,7 +393,7 @@ popq %r15; FRAME_END - ret; + RET; SYM_FUNC_END(cast5_ecb_enc_16way) SYM_FUNC_START(cast5_ecb_dec_16way) @@ -431,7 +431,7 @@ popq %r15; FRAME_END - ret; + RET; SYM_FUNC_END(cast5_ecb_dec_16way) SYM_FUNC_START(cast5_cbc_dec_16way) @@ -483,7 +483,7 @@ popq %r15; popq %r12; FRAME_END - ret; + RET; SYM_FUNC_END(cast5_cbc_dec_16way) SYM_FUNC_START(cast5_ctr_16way) @@ -559,5 +559,5 @@ popq %r15; popq %r12; FRAME_END - ret; + RET; SYM_FUNC_END(cast5_ctr_16way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/cast6-avx-x86_64-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/cast6-avx-x86_64-asm_64.S @@ -289,7 +289,7 @@ outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM); outunpack_blocks(RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM); - ret; + RET; SYM_FUNC_END(__cast6_enc_blk8) .align 8 @@ -336,7 +336,7 @@ outunpack_blocks(RA1, RB1, RC1, RD1, RTMP, RX, RKRF, RKM); outunpack_blocks(RA2, RB2, RC2, RD2, RTMP, RX, RKRF, RKM); - ret; + RET; SYM_FUNC_END(__cast6_dec_blk8) SYM_FUNC_START(cast6_ecb_enc_8way) @@ -359,7 +359,7 @@ popq %r15; FRAME_END - ret; + RET; SYM_FUNC_END(cast6_ecb_enc_8way) SYM_FUNC_START(cast6_ecb_dec_8way) @@ -382,7 +382,7 @@ popq %r15; FRAME_END - ret; + RET; SYM_FUNC_END(cast6_ecb_dec_8way) SYM_FUNC_START(cast6_cbc_dec_8way) @@ -408,5 +408,5 @@ popq %r15; popq %r12; FRAME_END - ret; + RET; SYM_FUNC_END(cast6_cbc_dec_8way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/chacha-avx2-x86_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/chacha-avx2-x86_64.S @@ -193,7 +193,7 @@ .Ldone2: vzeroupper - ret + RET .Lxorpart2: # xor remaining bytes from partial register into output @@ -498,7 +498,7 @@ .Ldone4: vzeroupper - ret + RET .Lxorpart4: # xor remaining bytes from partial register into output @@ -992,7 +992,7 @@ .Ldone8: vzeroupper lea -8(%r10),%rsp - ret + RET .Lxorpart8: # xor remaining bytes from partial register into output only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/chacha-avx512vl-x86_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/chacha-avx512vl-x86_64.S @@ -166,7 +166,7 @@ .Ldone2: vzeroupper - ret + RET .Lxorpart2: # xor remaining bytes from partial register into output @@ -432,7 +432,7 @@ .Ldone4: vzeroupper - ret + RET .Lxorpart4: # xor remaining bytes from partial register into output @@ -812,7 +812,7 @@ .Ldone8: vzeroupper - ret + RET .Lxorpart8: # xor remaining bytes from partial register into output only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/chacha-ssse3-x86_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/chacha-ssse3-x86_64.S @@ -108,7 +108,7 @@ sub $2,%r8d jnz .Ldoubleround - ret + RET SYM_FUNC_END(chacha_permute) SYM_FUNC_START(chacha_block_xor_ssse3) @@ -166,7 +166,7 @@ .Ldone: FRAME_END - ret + RET .Lxorpart: # xor remaining bytes from partial register into output @@ -217,7 +217,7 @@ movdqu %xmm3,0x10(%rsi) FRAME_END - ret + RET SYM_FUNC_END(hchacha_block_ssse3) SYM_FUNC_START(chacha_4block_xor_ssse3) @@ -762,7 +762,7 @@ .Ldone4: lea -8(%r10),%rsp - ret + RET .Lxorpart4: # xor remaining bytes from partial register into output only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/crc32-pclmul_asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/crc32-pclmul_asm.S @@ -236,5 +236,5 @@ pxor %xmm2, %xmm1 pextrd $0x01, %xmm1, %eax - ret + RET SYM_FUNC_END(crc32_pclmul_le_16) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/crc32c-pcl-intel-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/crc32c-pcl-intel-asm_64.S @@ -306,7 +306,7 @@ popq %rsi popq %rdi popq %rbx - ret + RET SYM_FUNC_END(crc_pcl) .section .rodata, "a", @progbits only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/crct10dif-pcl-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/crct10dif-pcl-asm_64.S @@ -257,7 +257,7 @@ # Final CRC value (x^16 * M(x)) mod G(x) is in low 16 bits of xmm0. pextrw $0, %xmm0, %eax - ret + RET .align 16 .Lless_than_256_bytes: only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/des3_ede-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/des3_ede-asm_64.S @@ -243,7 +243,7 @@ popq %r12; popq %rbx; - ret; + RET; SYM_FUNC_END(des3_ede_x86_64_crypt_blk) /*********************************************************************** @@ -528,7 +528,7 @@ popq %r12; popq %rbx; - ret; + RET; SYM_FUNC_END(des3_ede_x86_64_crypt_blk_3way) .section .rodata, "a", @progbits only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/ghash-clmulni-intel_asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/ghash-clmulni-intel_asm.S @@ -85,7 +85,7 @@ psrlq $1, T2 pxor T2, T1 pxor T1, DATA - ret + RET SYM_FUNC_END(__clmul_gf128mul_ble) /* void clmul_ghash_mul(char *dst, const u128 *shash) */ @@ -99,7 +99,7 @@ pshufb BSWAP, DATA movups DATA, (%rdi) FRAME_END - ret + RET SYM_FUNC_END(clmul_ghash_mul) /* @@ -128,5 +128,5 @@ movups DATA, (%rdi) .Lupdate_just_ret: FRAME_END - ret + RET SYM_FUNC_END(clmul_ghash_update) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/nh-avx2-x86_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/nh-avx2-x86_64.S @@ -153,5 +153,5 @@ vpaddq T1, T0, T0 vpaddq T4, T0, T0 vmovdqu T0, (HASH) - ret + RET SYM_FUNC_END(nh_avx2) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/nh-sse2-x86_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/nh-sse2-x86_64.S @@ -119,5 +119,5 @@ paddq PASS2_SUMS, T1 movdqu T0, 0x00(HASH) movdqu T1, 0x10(HASH) - ret + RET SYM_FUNC_END(nh_sse2) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/poly1305-x86_64-cryptogams.pl +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/poly1305-x86_64-cryptogams.pl @@ -297,7 +297,7 @@ $code.=<<___; mov \$1,%eax .Lno_key: - ret + RET ___ &end_function("poly1305_init_x86_64"); @@ -373,7 +373,7 @@ .cfi_adjust_cfa_offset -48 .Lno_data: .Lblocks_epilogue: - ret + RET .cfi_endproc ___ &end_function("poly1305_blocks_x86_64"); @@ -399,7 +399,7 @@ mov %rax,0($mac) # write result mov %rcx,8($mac) - ret + RET ___ &end_function("poly1305_emit_x86_64"); if ($avx) { @@ -429,7 +429,7 @@ &poly1305_iteration(); $code.=<<___; pop $ctx - ret + RET .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,\@abi-omnipotent @@ -594,7 +594,7 @@ lea -48-64($ctx),$ctx # size [de-]optimization pop %rbp - ret + RET .size __poly1305_init_avx,.-__poly1305_init_avx ___ @@ -747,7 +747,7 @@ .cfi_restore %rbp .Lno_data_avx: .Lblocks_avx_epilogue: - ret + RET .cfi_endproc .align 32 @@ -1452,7 +1452,7 @@ ___ $code.=<<___; vzeroupper - ret + RET .cfi_endproc ___ &end_function("poly1305_blocks_avx"); @@ -1508,7 +1508,7 @@ mov %rax,0($mac) # write result mov %rcx,8($mac) - ret + RET ___ &end_function("poly1305_emit_avx"); @@ -1675,7 +1675,7 @@ .cfi_restore %rbp .Lno_data_avx2$suffix: .Lblocks_avx2_epilogue$suffix: - ret + RET .cfi_endproc .align 32 @@ -2201,7 +2201,7 @@ ___ $code.=<<___; vzeroupper - ret + RET .cfi_endproc ___ if($avx > 2 && $avx512) { @@ -2792,7 +2792,7 @@ .cfi_def_cfa_register %rsp ___ $code.=<<___; - ret + RET .cfi_endproc ___ @@ -2893,7 +2893,7 @@ ___ $code.=<<___; mov \$1,%eax - ret + RET .size poly1305_init_base2_44,.-poly1305_init_base2_44 ___ { @@ -3010,7 +3010,7 @@ jnz .Lblocks_vpmadd52_4x .Lno_data_vpmadd52: - ret + RET .size poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52 ___ } @@ -3451,7 +3451,7 @@ vzeroall .Lno_data_vpmadd52_4x: - ret + RET .size poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x ___ } @@ -3824,7 +3824,7 @@ vzeroall .Lno_data_vpmadd52_8x: - ret + RET .size poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x ___ } @@ -3861,7 +3861,7 @@ mov %rax,0($mac) # write result mov %rcx,8($mac) - ret + RET .size poly1305_emit_base2_44,.-poly1305_emit_base2_44 ___ } } } @@ -3916,7 +3916,7 @@ .Ldone_enc: mov $otp,%rax - ret + RET .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad @@ -3967,7 +3967,7 @@ .Ldone_dec: mov $otp,%rax - ret + RET .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad ___ } @@ -4109,7 +4109,7 @@ pop %rbx pop %rdi pop %rsi - ret + RET .size avx_handler,.-avx_handler .section .pdata only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/serpent-avx-x86_64-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/serpent-avx-x86_64-asm_64.S @@ -601,7 +601,7 @@ write_blocks(RA1, RB1, RC1, RD1, RK0, RK1, RK2); write_blocks(RA2, RB2, RC2, RD2, RK0, RK1, RK2); - ret; + RET; SYM_FUNC_END(__serpent_enc_blk8_avx) .align 8 @@ -655,7 +655,7 @@ write_blocks(RC1, RD1, RB1, RE1, RK0, RK1, RK2); write_blocks(RC2, RD2, RB2, RE2, RK0, RK1, RK2); - ret; + RET; SYM_FUNC_END(__serpent_dec_blk8_avx) SYM_FUNC_START(serpent_ecb_enc_8way_avx) @@ -673,7 +673,7 @@ store_8way(%rsi, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); FRAME_END - ret; + RET; SYM_FUNC_END(serpent_ecb_enc_8way_avx) SYM_FUNC_START(serpent_ecb_dec_8way_avx) @@ -691,7 +691,7 @@ store_8way(%rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2); FRAME_END - ret; + RET; SYM_FUNC_END(serpent_ecb_dec_8way_avx) SYM_FUNC_START(serpent_cbc_dec_8way_avx) @@ -709,5 +709,5 @@ store_cbc_8way(%rdx, %rsi, RC1, RD1, RB1, RE1, RC2, RD2, RB2, RE2); FRAME_END - ret; + RET; SYM_FUNC_END(serpent_cbc_dec_8way_avx) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/serpent-avx2-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/serpent-avx2-asm_64.S @@ -601,7 +601,7 @@ write_blocks(RA1, RB1, RC1, RD1, RK0, RK1, RK2); write_blocks(RA2, RB2, RC2, RD2, RK0, RK1, RK2); - ret; + RET; SYM_FUNC_END(__serpent_enc_blk16) .align 8 @@ -655,7 +655,7 @@ write_blocks(RC1, RD1, RB1, RE1, RK0, RK1, RK2); write_blocks(RC2, RD2, RB2, RE2, RK0, RK1, RK2); - ret; + RET; SYM_FUNC_END(__serpent_dec_blk16) SYM_FUNC_START(serpent_ecb_enc_16way) @@ -677,7 +677,7 @@ vzeroupper; FRAME_END - ret; + RET; SYM_FUNC_END(serpent_ecb_enc_16way) SYM_FUNC_START(serpent_ecb_dec_16way) @@ -699,7 +699,7 @@ vzeroupper; FRAME_END - ret; + RET; SYM_FUNC_END(serpent_ecb_dec_16way) SYM_FUNC_START(serpent_cbc_dec_16way) @@ -722,5 +722,5 @@ vzeroupper; FRAME_END - ret; + RET; SYM_FUNC_END(serpent_cbc_dec_16way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/serpent-sse2-i586-asm_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/serpent-sse2-i586-asm_32.S @@ -553,12 +553,12 @@ write_blocks(%eax, RA, RB, RC, RD, RT0, RT1, RE); - ret; + RET; .L__enc_xor4: xor_blocks(%eax, RA, RB, RC, RD, RT0, RT1, RE); - ret; + RET; SYM_FUNC_END(__serpent_enc_blk_4way) SYM_FUNC_START(serpent_dec_blk_4way) @@ -612,5 +612,5 @@ movl arg_dst(%esp), %eax; write_blocks(%eax, RC, RD, RB, RE, RT0, RT1, RA); - ret; + RET; SYM_FUNC_END(serpent_dec_blk_4way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/serpent-sse2-x86_64-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/serpent-sse2-x86_64-asm_64.S @@ -675,13 +675,13 @@ write_blocks(%rsi, RA1, RB1, RC1, RD1, RK0, RK1, RK2); write_blocks(%rax, RA2, RB2, RC2, RD2, RK0, RK1, RK2); - ret; + RET; .L__enc_xor8: xor_blocks(%rsi, RA1, RB1, RC1, RD1, RK0, RK1, RK2); xor_blocks(%rax, RA2, RB2, RC2, RD2, RK0, RK1, RK2); - ret; + RET; SYM_FUNC_END(__serpent_enc_blk_8way) SYM_FUNC_START(serpent_dec_blk_8way) @@ -735,5 +735,5 @@ write_blocks(%rsi, RC1, RD1, RB1, RE1, RK0, RK1, RK2); write_blocks(%rax, RC2, RD2, RB2, RE2, RK0, RK1, RK2); - ret; + RET; SYM_FUNC_END(serpent_dec_blk_8way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha1_avx2_x86_64_asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha1_avx2_x86_64_asm.S @@ -674,7 +674,7 @@ pop %r12 pop %rbx - ret + RET SYM_FUNC_END(\name) .endm only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha1_ni_asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha1_ni_asm.S @@ -290,7 +290,7 @@ mov %rbp, %rsp pop %rbp - ret + RET SYM_FUNC_END(sha1_ni_transform) .section .rodata.cst16.PSHUFFLE_BYTE_FLIP_MASK, "aM", @progbits, 16 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha1_ssse3_asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha1_ssse3_asm.S @@ -99,7 +99,7 @@ pop %rbp pop %r12 pop %rbx - ret + RET SYM_FUNC_END(\name) .endm only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha256-avx-asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha256-avx-asm.S @@ -458,7 +458,7 @@ popq %r13 popq %r12 popq %rbx - ret + RET SYM_FUNC_END(sha256_transform_avx) .section .rodata.cst256.K256, "aM", @progbits, 256 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha256-avx2-asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha256-avx2-asm.S @@ -710,7 +710,7 @@ popq %r13 popq %r12 popq %rbx - ret + RET SYM_FUNC_END(sha256_transform_rorx) .section .rodata.cst512.K256, "aM", @progbits, 512 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha256-ssse3-asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha256-ssse3-asm.S @@ -472,7 +472,7 @@ popq %r12 popq %rbx - ret + RET SYM_FUNC_END(sha256_transform_ssse3) .section .rodata.cst256.K256, "aM", @progbits, 256 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha256_ni_asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha256_ni_asm.S @@ -326,7 +326,7 @@ .Ldone_hash: - ret + RET SYM_FUNC_END(sha256_ni_transform) .section .rodata.cst256.K256, "aM", @progbits, 256 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha512-avx-asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha512-avx-asm.S @@ -361,7 +361,7 @@ pop %rbx nowork: - ret + RET SYM_FUNC_END(sha512_transform_avx) ######################################################################## only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha512-avx2-asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha512-avx2-asm.S @@ -679,7 +679,7 @@ pop %r12 pop %rbx - ret + RET SYM_FUNC_END(sha512_transform_rorx) ######################################################################## only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sha512-ssse3-asm.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sha512-ssse3-asm.S @@ -363,7 +363,7 @@ pop %rbx nowork: - ret + RET SYM_FUNC_END(sha512_transform_ssse3) ######################################################################## only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sm4-aesni-avx-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sm4-aesni-avx-asm_64.S @@ -246,7 +246,7 @@ .Lblk4_store_output_done: vzeroall; FRAME_END - ret; + RET; SYM_FUNC_END(sm4_aesni_avx_crypt4) .align 8 @@ -356,7 +356,7 @@ vpshufb RTMP2, RB3, RB3; FRAME_END - ret; + RET; SYM_FUNC_END(__sm4_crypt_blk8) /* @@ -412,7 +412,7 @@ .Lblk8_store_output_done: vzeroall; FRAME_END - ret; + RET; SYM_FUNC_END(sm4_aesni_avx_crypt8) /* @@ -487,7 +487,7 @@ vzeroall; FRAME_END - ret; + RET; SYM_FUNC_END(sm4_aesni_avx_ctr_enc_blk8) /* @@ -537,7 +537,7 @@ vzeroall; FRAME_END - ret; + RET; SYM_FUNC_END(sm4_aesni_avx_cbc_dec_blk8) /* @@ -590,5 +590,5 @@ vzeroall; FRAME_END - ret; + RET; SYM_FUNC_END(sm4_aesni_avx_cfb_dec_blk8) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/sm4-aesni-avx2-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/sm4-aesni-avx2-asm_64.S @@ -268,7 +268,7 @@ vpshufb RTMP2, RB3, RB3; FRAME_END - ret; + RET; SYM_FUNC_END(__sm4_crypt_blk16) #define inc_le128(x, minus_one, tmp) \ @@ -387,7 +387,7 @@ vzeroall; FRAME_END - ret; + RET; SYM_FUNC_END(sm4_aesni_avx2_ctr_enc_blk16) /* @@ -441,7 +441,7 @@ vzeroall; FRAME_END - ret; + RET; SYM_FUNC_END(sm4_aesni_avx2_cbc_dec_blk16) /* @@ -497,5 +497,5 @@ vzeroall; FRAME_END - ret; + RET; SYM_FUNC_END(sm4_aesni_avx2_cfb_dec_blk16) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/twofish-avx-x86_64-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/twofish-avx-x86_64-asm_64.S @@ -267,7 +267,7 @@ outunpack_blocks(RC1, RD1, RA1, RB1, RK1, RX0, RY0, RK2); outunpack_blocks(RC2, RD2, RA2, RB2, RK1, RX0, RY0, RK2); - ret; + RET; SYM_FUNC_END(__twofish_enc_blk8) .align 8 @@ -307,7 +307,7 @@ outunpack_blocks(RA1, RB1, RC1, RD1, RK1, RX0, RY0, RK2); outunpack_blocks(RA2, RB2, RC2, RD2, RK1, RX0, RY0, RK2); - ret; + RET; SYM_FUNC_END(__twofish_dec_blk8) SYM_FUNC_START(twofish_ecb_enc_8way) @@ -327,7 +327,7 @@ store_8way(%r11, RC1, RD1, RA1, RB1, RC2, RD2, RA2, RB2); FRAME_END - ret; + RET; SYM_FUNC_END(twofish_ecb_enc_8way) SYM_FUNC_START(twofish_ecb_dec_8way) @@ -347,7 +347,7 @@ store_8way(%r11, RA1, RB1, RC1, RD1, RA2, RB2, RC2, RD2); FRAME_END - ret; + RET; SYM_FUNC_END(twofish_ecb_dec_8way) SYM_FUNC_START(twofish_cbc_dec_8way) @@ -372,5 +372,5 @@ popq %r12; FRAME_END - ret; + RET; SYM_FUNC_END(twofish_cbc_dec_8way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/twofish-i586-asm_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/twofish-i586-asm_32.S @@ -260,7 +260,7 @@ pop %ebx pop %ebp mov $1, %eax - ret + RET SYM_FUNC_END(twofish_enc_blk) SYM_FUNC_START(twofish_dec_blk) @@ -317,5 +317,5 @@ pop %ebx pop %ebp mov $1, %eax - ret + RET SYM_FUNC_END(twofish_dec_blk) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/twofish-x86_64-asm_64-3way.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/twofish-x86_64-asm_64-3way.S @@ -258,7 +258,7 @@ popq %rbx; popq %r12; popq %r13; - ret; + RET; .L__enc_xor3: outunpack_enc3(xor); @@ -266,7 +266,7 @@ popq %rbx; popq %r12; popq %r13; - ret; + RET; SYM_FUNC_END(__twofish_enc_blk_3way) SYM_FUNC_START(twofish_dec_blk_3way) @@ -301,5 +301,5 @@ popq %rbx; popq %r12; popq %r13; - ret; + RET; SYM_FUNC_END(twofish_dec_blk_3way) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/crypto/twofish-x86_64-asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/crypto/twofish-x86_64-asm_64.S @@ -252,7 +252,7 @@ popq R1 movl $1,%eax - ret + RET SYM_FUNC_END(twofish_enc_blk) SYM_FUNC_START(twofish_dec_blk) @@ -304,5 +304,5 @@ popq R1 movl $1,%eax - ret + RET SYM_FUNC_END(twofish_dec_blk) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/entry/calling.h +++ linux-hwe-5.15-5.15.0/arch/x86/entry/calling.h @@ -7,6 +7,8 @@ #include #include #include +#include +#include /* @@ -119,27 +121,19 @@ CLEAR_REGS .endm -.macro POP_REGS pop_rdi=1 skip_r11rcx=0 +.macro POP_REGS pop_rdi=1 popq %r15 popq %r14 popq %r13 popq %r12 popq %rbp popq %rbx - .if \skip_r11rcx - popq %rsi - .else popq %r11 - .endif popq %r10 popq %r9 popq %r8 popq %rax - .if \skip_r11rcx - popq %rsi - .else popq %rcx - .endif popq %rdx popq %rsi .if \pop_rdi @@ -290,6 +284,66 @@ #endif /* + * IBRS kernel mitigation for Spectre_v2. + * + * Assumes full context is established (PUSH_REGS, CR3 and GS) and it clobbers + * the regs it uses (AX, CX, DX). Must be called before the first RET + * instruction (NOTE! UNTRAIN_RET includes a RET instruction) + * + * The optional argument is used to save/restore the current value, + * which is used on the paranoid paths. + * + * Assumes x86_spec_ctrl_{base,current} to have SPEC_CTRL_IBRS set. + */ +.macro IBRS_ENTER save_reg +#ifdef CONFIG_CPU_IBRS_ENTRY + ALTERNATIVE "jmp .Lend_\@", "", X86_FEATURE_KERNEL_IBRS + movl $MSR_IA32_SPEC_CTRL, %ecx + +.ifnb \save_reg + rdmsr + shl $32, %rdx + or %rdx, %rax + mov %rax, \save_reg + test $SPEC_CTRL_IBRS, %eax + jz .Ldo_wrmsr_\@ + lfence + jmp .Lend_\@ +.Ldo_wrmsr_\@: +.endif + + movq PER_CPU_VAR(x86_spec_ctrl_current), %rdx + movl %edx, %eax + shr $32, %rdx + wrmsr +.Lend_\@: +#endif +.endm + +/* + * Similar to IBRS_ENTER, requires KERNEL GS,CR3 and clobbers (AX, CX, DX) + * regs. Must be called after the last RET. + */ +.macro IBRS_EXIT save_reg +#ifdef CONFIG_CPU_IBRS_ENTRY + ALTERNATIVE "jmp .Lend_\@", "", X86_FEATURE_KERNEL_IBRS + movl $MSR_IA32_SPEC_CTRL, %ecx + +.ifnb \save_reg + mov \save_reg, %rdx +.else + movq PER_CPU_VAR(x86_spec_ctrl_current), %rdx + andl $(~SPEC_CTRL_IBRS), %edx +.endif + + movl %edx, %eax + shr $32, %rdx + wrmsr +.Lend_\@: +#endif +.endm + +/* * Mitigate Spectre v1 for conditional swapgs code paths. * * FENCE_SWAPGS_USER_ENTRY is used in the user entry swapgs code path, to only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/entry/entry.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/entry.S @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Common place for both 32- and 64-bit entry routines. + */ + +#include +#include +#include + +.pushsection .noinstr.text, "ax" + +SYM_FUNC_START(entry_ibpb) + movl $MSR_IA32_PRED_CMD, %ecx + movl $PRED_CMD_IBPB, %eax + xorl %edx, %edx + wrmsr + RET +SYM_FUNC_END(entry_ibpb) +/* For KVM */ +EXPORT_SYMBOL_GPL(entry_ibpb); + +.popsection only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/entry/entry_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/entry_32.S @@ -701,7 +701,6 @@ movl %ebx, PER_CPU_VAR(__stack_chk_guard) #endif -#ifdef CONFIG_RETPOLINE /* * When switching from a shallower to a deeper call stack * the RSB may either underflow or use entries populated @@ -710,7 +709,6 @@ * speculative execution to prevent attack. */ FILL_RETURN_BUFFER %ebx, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW -#endif /* Restore flags or the incoming task to restore AC state. */ popfl @@ -740,7 +738,7 @@ popl %eax FRAME_END - ret + RET SYM_FUNC_END(schedule_tail_wrapper) .popsection only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/entry/entry_64_compat.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/entry_64_compat.S @@ -4,7 +4,6 @@ * * Copyright 2000-2002 Andi Kleen, SuSE Labs. */ -#include "calling.h" #include #include #include @@ -14,9 +13,12 @@ #include #include #include +#include #include #include +#include "calling.h" + .section .entry.text, "ax" /* @@ -47,7 +49,7 @@ * 0(%ebp) arg6 */ SYM_CODE_START(entry_SYSENTER_compat) - UNWIND_HINT_EMPTY + UNWIND_HINT_ENTRY /* Interrupts are off on entry. */ SWAPGS @@ -112,6 +114,9 @@ cld + IBRS_ENTER + UNTRAIN_RET + /* * SYSENTER doesn't filter flags, so we need to clear NT and AC * ourselves. To save a few cycles, we can check whether @@ -197,7 +202,7 @@ * 0(%esp) arg6 */ SYM_CODE_START(entry_SYSCALL_compat) - UNWIND_HINT_EMPTY + UNWIND_HINT_ENTRY /* Interrupts are off on entry. */ swapgs @@ -252,6 +257,9 @@ UNWIND_HINT_REGS + IBRS_ENTER + UNTRAIN_RET + movq %rsp, %rdi call do_fast_syscall_32 /* XEN PV guests always use IRET path */ @@ -266,6 +274,8 @@ */ STACKLEAK_ERASE + IBRS_EXIT + movq RBX(%rsp), %rbx /* pt_regs->rbx */ movq RBP(%rsp), %rbp /* pt_regs->rbp */ movq EFLAGS(%rsp), %r11 /* pt_regs->flags (in r11) */ @@ -339,7 +349,7 @@ * ebp arg6 */ SYM_CODE_START(entry_INT80_compat) - UNWIND_HINT_EMPTY + UNWIND_HINT_ENTRY /* * Interrupts are off on entry. */ @@ -409,6 +419,9 @@ cld + IBRS_ENTER + UNTRAIN_RET + movq %rsp, %rdi call do_int80_syscall_32 jmp swapgs_restore_regs_and_return_to_usermode only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/entry/vdso/Makefile +++ linux-hwe-5.15-5.15.0/arch/x86/entry/vdso/Makefile @@ -92,6 +92,7 @@ endif $(vobjs): KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO) $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS)) $(CFL) +$(vobjs): KBUILD_AFLAGS += -DBUILD_VDSO # # vDSO code runs in userspace and -pg doesn't help with profiling anyway. only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/entry/vdso/vdso32/system_call.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/vdso/vdso32/system_call.S @@ -78,7 +78,7 @@ popl %ecx CFI_RESTORE ecx CFI_ADJUST_CFA_OFFSET -4 - ret + RET CFI_ENDPROC .size __kernel_vsyscall,.-__kernel_vsyscall only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/entry/vdso/vsgx.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/vdso/vsgx.S @@ -81,7 +81,7 @@ pop %rbx leave .cfi_def_cfa %rsp, 8 - ret + RET /* The out-of-line code runs with the pre-leave stack frame. */ .cfi_def_cfa %rbp, 16 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/entry/vsyscall/vsyscall_emu_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/entry/vsyscall/vsyscall_emu_64.S @@ -20,16 +20,19 @@ mov $__NR_gettimeofday, %rax syscall ret + int3 .balign 1024, 0xcc mov $__NR_time, %rax syscall ret + int3 .balign 1024, 0xcc mov $__NR_getcpu, %rax syscall ret + int3 .balign 4096, 0xcc only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/include/asm/disabled-features.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/disabled-features.h @@ -56,6 +56,25 @@ # define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31)) #endif +#ifdef CONFIG_RETPOLINE +# define DISABLE_RETPOLINE 0 +#else +# define DISABLE_RETPOLINE ((1 << (X86_FEATURE_RETPOLINE & 31)) | \ + (1 << (X86_FEATURE_RETPOLINE_LFENCE & 31))) +#endif + +#ifdef CONFIG_RETHUNK +# define DISABLE_RETHUNK 0 +#else +# define DISABLE_RETHUNK (1 << (X86_FEATURE_RETHUNK & 31)) +#endif + +#ifdef CONFIG_CPU_UNRET_ENTRY +# define DISABLE_UNRET 0 +#else +# define DISABLE_UNRET (1 << (X86_FEATURE_UNRET & 31)) +#endif + /* Force disable because it's broken beyond repair */ #define DISABLE_ENQCMD (1 << (X86_FEATURE_ENQCMD & 31)) @@ -79,7 +98,7 @@ #define DISABLED_MASK8 0 #define DISABLED_MASK9 (DISABLE_SMAP|DISABLE_SGX) #define DISABLED_MASK10 0 -#define DISABLED_MASK11 0 +#define DISABLED_MASK11 (DISABLE_RETPOLINE|DISABLE_RETHUNK|DISABLE_UNRET) #define DISABLED_MASK12 0 #define DISABLED_MASK13 0 #define DISABLED_MASK14 0 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/include/asm/linkage.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/linkage.h @@ -18,6 +18,28 @@ #define __ALIGN_STR __stringify(__ALIGN) #endif +#if defined(CONFIG_RETHUNK) && !defined(__DISABLE_EXPORTS) && !defined(BUILD_VDSO) +#define RET jmp __x86_return_thunk +#else /* CONFIG_RETPOLINE */ +#ifdef CONFIG_SLS +#define RET ret; int3 +#else +#define RET ret +#endif +#endif /* CONFIG_RETPOLINE */ + +#else /* __ASSEMBLY__ */ + +#if defined(CONFIG_RETHUNK) && !defined(__DISABLE_EXPORTS) && !defined(BUILD_VDSO) +#define ASM_RET "jmp __x86_return_thunk\n\t" +#else /* CONFIG_RETPOLINE */ +#ifdef CONFIG_SLS +#define ASM_RET "ret; int3\n\t" +#else +#define ASM_RET "ret\n\t" +#endif +#endif /* CONFIG_RETPOLINE */ + #endif /* __ASSEMBLY__ */ #endif /* _ASM_X86_LINKAGE_H */ only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/include/asm/paravirt.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/paravirt.h @@ -665,7 +665,7 @@ "call " #func ";" \ PV_RESTORE_ALL_CALLER_REGS \ FRAME_END \ - "ret;" \ + ASM_RET \ ".size " PV_THUNK_NAME(func) ", .-" PV_THUNK_NAME(func) ";" \ ".popsection") only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/include/asm/qspinlock_paravirt.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/qspinlock_paravirt.h @@ -48,7 +48,7 @@ "jne .slowpath;" "pop %rdx;" FRAME_END - "ret;" + ASM_RET ".slowpath: " "push %rsi;" "movzbl %al,%esi;" @@ -56,7 +56,7 @@ "pop %rsi;" "pop %rdx;" FRAME_END - "ret;" + ASM_RET ".size " PV_UNLOCK ", .-" PV_UNLOCK ";" ".popsection"); only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/include/asm/static_call.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/static_call.h @@ -21,6 +21,16 @@ * relative displacement across sections. */ +/* + * The trampoline is 8 bytes and of the general form: + * + * jmp.d32 \func + * ud1 %esp, %ecx + * + * That trailing #UD provides both a speculation stop and serves as a unique + * 3 byte signature identifying static call trampolines. Also see tramp_ud[] + * and __static_call_fixup(). + */ #define __ARCH_DEFINE_STATIC_CALL_TRAMP(name, insns) \ asm(".pushsection .static_call.text, \"ax\" \n" \ ".align 4 \n" \ @@ -34,8 +44,13 @@ #define ARCH_DEFINE_STATIC_CALL_TRAMP(name, func) \ __ARCH_DEFINE_STATIC_CALL_TRAMP(name, ".byte 0xe9; .long " #func " - (. + 4)") +#ifdef CONFIG_RETHUNK +#define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) \ + __ARCH_DEFINE_STATIC_CALL_TRAMP(name, "jmp __x86_return_thunk") +#else #define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP(name) \ - __ARCH_DEFINE_STATIC_CALL_TRAMP(name, "ret; nop; nop; nop; nop") + __ARCH_DEFINE_STATIC_CALL_TRAMP(name, "ret; int3; nop; nop; nop") +#endif #define ARCH_ADD_TRAMP_KEY(name) \ @@ -44,4 +59,6 @@ ".long " STATIC_CALL_KEY_STR(name) " - . \n" \ ".popsection \n") +extern bool __static_call_fixup(void *tramp, u8 op, void *dest); + #endif /* _ASM_STATIC_CALL_H */ only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/include/asm/unwind_hints.h +++ linux-hwe-5.15-5.15.0/arch/x86/include/asm/unwind_hints.h @@ -8,7 +8,11 @@ #ifdef __ASSEMBLY__ .macro UNWIND_HINT_EMPTY - UNWIND_HINT sp_reg=ORC_REG_UNDEFINED type=UNWIND_HINT_TYPE_CALL end=1 + UNWIND_HINT type=UNWIND_HINT_TYPE_CALL end=1 +.endm + +.macro UNWIND_HINT_ENTRY + UNWIND_HINT type=UNWIND_HINT_TYPE_ENTRY end=1 .endm .macro UNWIND_HINT_REGS base=%rsp offset=0 indirect=0 extra=1 partial=0 @@ -52,6 +56,14 @@ UNWIND_HINT sp_reg=ORC_REG_SP sp_offset=8 type=UNWIND_HINT_TYPE_FUNC .endm +.macro UNWIND_HINT_SAVE + UNWIND_HINT type=UNWIND_HINT_TYPE_SAVE +.endm + +.macro UNWIND_HINT_RESTORE + UNWIND_HINT type=UNWIND_HINT_TYPE_RESTORE +.endm + #endif /* __ASSEMBLY__ */ #endif /* _ASM_X86_UNWIND_HINTS_H */ only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/asm-offsets.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/asm-offsets.c @@ -18,6 +18,7 @@ #include #include #include +#include "../kvm/vmx/vmx.h" #ifdef CONFIG_XEN #include @@ -93,4 +94,9 @@ OFFSET(TSS_sp0, tss_struct, x86_tss.sp0); OFFSET(TSS_sp1, tss_struct, x86_tss.sp1); OFFSET(TSS_sp2, tss_struct, x86_tss.sp2); + + if (IS_ENABLED(CONFIG_KVM_INTEL)) { + BLANK(); + OFFSET(VMX_spec_ctrl, vcpu_vmx, spec_ctrl); + } } only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/cpu/scattered.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/cpu/scattered.c @@ -26,6 +26,7 @@ static const struct cpuid_bit cpuid_bits[] = { { X86_FEATURE_APERFMPERF, CPUID_ECX, 0, 0x00000006, 0 }, { X86_FEATURE_EPB, CPUID_ECX, 3, 0x00000006, 0 }, + { X86_FEATURE_RRSBA_CTRL, CPUID_EDX, 2, 0x00000007, 2 }, { X86_FEATURE_CQM_LLC, CPUID_EDX, 1, 0x0000000f, 0 }, { X86_FEATURE_CQM_OCCUP_LLC, CPUID_EDX, 0, 0x0000000f, 1 }, { X86_FEATURE_CQM_MBM_TOTAL, CPUID_EDX, 1, 0x0000000f, 1 }, only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/ftrace.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/ftrace.c @@ -308,7 +308,7 @@ } __attribute__((packed)); }; -#define RET_SIZE 1 +#define RET_SIZE (IS_ENABLED(CONFIG_RETPOLINE) ? 5 : 1 + IS_ENABLED(CONFIG_SLS)) static unsigned long create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) @@ -321,12 +321,12 @@ unsigned long offset; unsigned long npages; unsigned long size; - unsigned long retq; unsigned long *ptr; void *trampoline; void *ip; /* 48 8b 15 is movq (%rip), %rdx */ unsigned const char op_ref[] = { 0x48, 0x8b, 0x15 }; + unsigned const char retq[] = { RET_INSN_OPCODE, INT3_INSN_OPCODE }; union ftrace_op_code_union op_ptr; int ret; @@ -364,12 +364,10 @@ goto fail; ip = trampoline + size; - - /* The trampoline ends with ret(q) */ - retq = (unsigned long)ftrace_stub; - ret = copy_from_kernel_nofault(ip, (void *)retq, RET_SIZE); - if (WARN_ON(ret < 0)) - goto fail; + if (cpu_feature_enabled(X86_FEATURE_RETHUNK)) + memcpy(ip, text_gen_insn(JMP32_INSN_OPCODE, ip, &__x86_return_thunk), JMP32_INSN_SIZE); + else + memcpy(ip, retq, sizeof(retq)); /* No need to test direct calls on created trampolines */ if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) { only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/ftrace_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/ftrace_32.S @@ -19,7 +19,7 @@ #endif SYM_FUNC_START(__fentry__) - ret + RET SYM_FUNC_END(__fentry__) EXPORT_SYMBOL(__fentry__) @@ -84,7 +84,7 @@ /* This is weak to keep gas from relaxing the jumps */ SYM_INNER_LABEL_ALIGN(ftrace_stub, SYM_L_WEAK) - ret + RET SYM_CODE_END(ftrace_caller) SYM_CODE_START(ftrace_regs_caller) @@ -177,7 +177,7 @@ popl %edx popl %ecx popl %eax - ret + RET SYM_CODE_END(ftrace_graph_caller) .globl return_to_handler only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/ftrace_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/ftrace_64.S @@ -132,7 +132,7 @@ #ifdef CONFIG_DYNAMIC_FTRACE SYM_FUNC_START(__fentry__) - retq + RET SYM_FUNC_END(__fentry__) EXPORT_SYMBOL(__fentry__) @@ -181,11 +181,10 @@ /* * This is weak to keep gas from relaxing the jumps. - * It is also used to copy the retq for trampolines. */ SYM_INNER_LABEL_ALIGN(ftrace_stub, SYM_L_WEAK) UNWIND_HINT_FUNC - retq + RET SYM_FUNC_END(ftrace_epilogue) SYM_FUNC_START(ftrace_regs_caller) @@ -299,7 +298,7 @@ #endif SYM_INNER_LABEL(ftrace_stub, SYM_L_GLOBAL) - retq + RET trace: /* save_mcount_regs fills in first two parameters */ @@ -331,11 +330,11 @@ restore_mcount_regs - retq + RET SYM_FUNC_END(ftrace_graph_caller) SYM_FUNC_START(return_to_handler) - subq $24, %rsp + subq $16, %rsp /* Save the return values */ movq %rax, (%rsp) @@ -347,7 +346,19 @@ movq %rax, %rdi movq 8(%rsp), %rdx movq (%rsp), %rax - addq $24, %rsp - JMP_NOSPEC rdi + + addq $16, %rsp + /* + * Jump back to the old return address. This cannot be JMP_NOSPEC rdi + * since IBT would demand that contain ENDBR, which simply isn't so for + * return addresses. Use a retpoline here to keep the RSB balanced. + */ + ANNOTATE_INTRA_FUNCTION_CALL + call .Ldo_rop + int3 +.Ldo_rop: + mov %rdi, (%rsp) + UNWIND_HINT_FUNC + RET SYM_FUNC_END(return_to_handler) #endif only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/head_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/head_64.S @@ -312,6 +312,8 @@ SYM_CODE_START_NOALIGN(vc_boot_ghcb) UNWIND_HINT_IRET_REGS offset=8 + ANNOTATE_UNRET_END + /* Build pt_regs */ PUSH_AND_CLEAR_REGS @@ -369,6 +371,7 @@ SYM_CODE_END(early_idt_handler_array) SYM_CODE_START_LOCAL(early_idt_handler_common) + ANNOTATE_UNRET_END /* * The stack is the hardware frame, an error code or zero, and the * vector number. @@ -415,6 +418,8 @@ SYM_CODE_START_NOALIGN(vc_no_ghcb) UNWIND_HINT_IRET_REGS offset=8 + ANNOTATE_UNRET_END + /* Build pt_regs */ PUSH_AND_CLEAR_REGS only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/irqflags.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/irqflags.S @@ -10,6 +10,6 @@ SYM_FUNC_START(native_save_fl) pushf pop %_ASM_AX - ret + RET SYM_FUNC_END(native_save_fl) EXPORT_SYMBOL(native_save_fl) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/kprobes/core.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/kprobes/core.c @@ -1044,7 +1044,7 @@ RESTORE_REGS_STRING " popfl\n" #endif - " ret\n" + ASM_RET ".size kretprobe_trampoline, .-kretprobe_trampoline\n" ); NOKPROBE_SYMBOL(kretprobe_trampoline); only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/paravirt.c +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/paravirt.c @@ -41,7 +41,7 @@ asm (".pushsection .entry.text, \"ax\"\n" ".global _paravirt_nop\n" "_paravirt_nop:\n\t" - "ret\n\t" + ASM_RET ".size _paravirt_nop, . - _paravirt_nop\n\t" ".type _paravirt_nop, @function\n\t" ".popsection"); only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/relocate_kernel_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/relocate_kernel_64.S @@ -13,7 +13,8 @@ #include /* - * Must be relocatable PIC code callable as a C function + * Must be relocatable PIC code callable as a C function, in particular + * there must be a plain RET and not jump to return thunk. */ #define PTR(x) (x << 3) @@ -104,7 +105,9 @@ /* jump to identity mapped page */ addq $(identity_mapped - relocate_kernel), %r8 pushq %r8 + ANNOTATE_UNRET_SAFE ret + int3 SYM_CODE_END(relocate_kernel) SYM_CODE_START_LOCAL_NOALIGN(identity_mapped) @@ -191,7 +194,9 @@ xorl %r14d, %r14d xorl %r15d, %r15d + ANNOTATE_UNRET_SAFE ret + int3 1: popq %rdx @@ -210,7 +215,9 @@ call swap_pages movq $virtual_mapped, %rax pushq %rax + ANNOTATE_UNRET_SAFE ret + int3 SYM_CODE_END(identity_mapped) SYM_CODE_START_LOCAL_NOALIGN(virtual_mapped) @@ -231,7 +238,9 @@ popq %r12 popq %rbp popq %rbx + ANNOTATE_UNRET_SAFE ret + int3 SYM_CODE_END(virtual_mapped) /* Do the copies */ @@ -288,7 +297,9 @@ lea PAGE_SIZE(%rax), %rsi jmp 0b 3: + ANNOTATE_UNRET_SAFE ret + int3 SYM_CODE_END(swap_pages) .globl kexec_control_code_size only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/sev_verify_cbit.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/sev_verify_cbit.S @@ -85,5 +85,5 @@ #endif /* Return page-table pointer */ movq %rdi, %rax - ret + RET SYM_FUNC_END(sev_verify_cbit) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kernel/verify_cpu.S +++ linux-hwe-5.15-5.15.0/arch/x86/kernel/verify_cpu.S @@ -132,9 +132,9 @@ .Lverify_cpu_no_longmode: popf # Restore caller passed flags movl $1,%eax - ret + RET .Lverify_cpu_sse_ok: popf # Restore caller passed flags xorl %eax, %eax - ret + RET SYM_FUNC_END(verify_cpu) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kvm/svm/vmenter.S +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/svm/vmenter.S @@ -111,6 +111,15 @@ #endif /* + * Mitigate RETBleed for AMD/Hygon Zen uarch. RET should be + * untrained as soon as we exit the VM and are back to the + * kernel. This should be done before re-enabling interrupts + * because interrupt handlers won't sanitize 'ret' if the return is + * from the kernel. + */ + UNTRAIN_RET + + /* * Clear all general purpose registers except RSP and RAX to prevent * speculative use of the guest's values, even those that are reloaded * via the stack. In theory, an L1 cache miss when restoring registers @@ -148,7 +157,7 @@ pop %edi #endif pop %_ASM_BP - ret + RET 3: cmpb $0, kvm_rebooting jne 2b @@ -190,6 +199,15 @@ FILL_RETURN_BUFFER %_ASM_AX, RSB_CLEAR_LOOPS, X86_FEATURE_RETPOLINE #endif + /* + * Mitigate RETBleed for AMD/Hygon Zen uarch. RET should be + * untrained as soon as we exit the VM and are back to the + * kernel. This should be done before re-enabling interrupts + * because interrupt handlers won't sanitize RET if the return is + * from the kernel. + */ + UNTRAIN_RET + pop %_ASM_BX #ifdef CONFIG_X86_64 @@ -202,7 +220,7 @@ pop %edi #endif pop %_ASM_BP - ret + RET 3: cmpb $0, kvm_rebooting jne 2b only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kvm/vmx/capabilities.h +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/capabilities.h @@ -4,7 +4,7 @@ #include -#include "lapic.h" +#include "../lapic.h" extern bool __read_mostly enable_vpid; extern bool __read_mostly flexpriority_enabled; only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kvm/vmx/run_flags.h +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/run_flags.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __KVM_X86_VMX_RUN_FLAGS_H +#define __KVM_X86_VMX_RUN_FLAGS_H + +#define VMX_RUN_VMRESUME (1 << 0) +#define VMX_RUN_SAVE_SPEC_CTRL (1 << 1) + +#endif /* __KVM_X86_VMX_RUN_FLAGS_H */ only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kvm/vmx/vmenter.S +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmenter.S @@ -1,10 +1,13 @@ /* SPDX-License-Identifier: GPL-2.0 */ #include #include +#include #include #include #include +#include #include +#include "run_flags.h" #define WORD_SIZE (BITS_PER_LONG / 8) @@ -31,72 +34,11 @@ .section .noinstr.text, "ax" /** - * vmx_vmenter - VM-Enter the current loaded VMCS - * - * %RFLAGS.ZF: !VMCS.LAUNCHED, i.e. controls VMLAUNCH vs. VMRESUME - * - * Returns: - * %RFLAGS.CF is set on VM-Fail Invalid - * %RFLAGS.ZF is set on VM-Fail Valid - * %RFLAGS.{CF,ZF} are cleared on VM-Success, i.e. VM-Exit - * - * Note that VMRESUME/VMLAUNCH fall-through and return directly if - * they VM-Fail, whereas a successful VM-Enter + VM-Exit will jump - * to vmx_vmexit. - */ -SYM_FUNC_START_LOCAL(vmx_vmenter) - /* EFLAGS.ZF is set if VMCS.LAUNCHED == 0 */ - je 2f - -1: vmresume - ret - -2: vmlaunch - ret - -3: cmpb $0, kvm_rebooting - je 4f - ret -4: ud2 - - _ASM_EXTABLE(1b, 3b) - _ASM_EXTABLE(2b, 3b) - -SYM_FUNC_END(vmx_vmenter) - -/** - * vmx_vmexit - Handle a VMX VM-Exit - * - * Returns: - * %RFLAGS.{CF,ZF} are cleared on VM-Success, i.e. VM-Exit - * - * This is vmx_vmenter's partner in crime. On a VM-Exit, control will jump - * here after hardware loads the host's state, i.e. this is the destination - * referred to by VMCS.HOST_RIP. - */ -SYM_FUNC_START(vmx_vmexit) -#ifdef CONFIG_RETPOLINE - ALTERNATIVE "jmp .Lvmexit_skip_rsb", "", X86_FEATURE_RETPOLINE - /* Preserve guest's RAX, it's used to stuff the RSB. */ - push %_ASM_AX - - /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */ - FILL_RETURN_BUFFER %_ASM_AX, RSB_CLEAR_LOOPS, X86_FEATURE_RETPOLINE - - /* Clear RFLAGS.CF and RFLAGS.ZF to preserve VM-Exit, i.e. !VM-Fail. */ - or $1, %_ASM_AX - - pop %_ASM_AX -.Lvmexit_skip_rsb: -#endif - ret -SYM_FUNC_END(vmx_vmexit) - -/** * __vmx_vcpu_run - Run a vCPU via a transition to VMX guest mode - * @vmx: struct vcpu_vmx * (forwarded to vmx_update_host_rsp) + * @vmx: struct vcpu_vmx * * @regs: unsigned long * (to guest registers) - * @launched: %true if the VMCS has been launched + * @flags: VMX_RUN_VMRESUME: use VMRESUME instead of VMLAUNCH + * VMX_RUN_SAVE_SPEC_CTRL: save guest SPEC_CTRL into vmx->spec_ctrl * * Returns: * 0 on VM-Exit, 1 on VM-Fail @@ -115,24 +57,56 @@ #endif push %_ASM_BX + /* Save @vmx for SPEC_CTRL handling */ + push %_ASM_ARG1 + + /* Save @flags for SPEC_CTRL handling */ + push %_ASM_ARG3 + /* * Save @regs, _ASM_ARG2 may be modified by vmx_update_host_rsp() and * @regs is needed after VM-Exit to save the guest's register values. */ push %_ASM_ARG2 - /* Copy @launched to BL, _ASM_ARG3 is volatile. */ + /* Copy @flags to BL, _ASM_ARG3 is volatile. */ mov %_ASM_ARG3B, %bl - /* Adjust RSP to account for the CALL to vmx_vmenter(). */ - lea -WORD_SIZE(%_ASM_SP), %_ASM_ARG2 + lea (%_ASM_SP), %_ASM_ARG2 call vmx_update_host_rsp + ALTERNATIVE "jmp .Lspec_ctrl_done", "", X86_FEATURE_MSR_SPEC_CTRL + + /* + * SPEC_CTRL handling: if the guest's SPEC_CTRL value differs from the + * host's, write the MSR. + * + * IMPORTANT: To avoid RSB underflow attacks and any other nastiness, + * there must not be any returns or indirect branches between this code + * and vmentry. + */ + mov 2*WORD_SIZE(%_ASM_SP), %_ASM_DI + movl VMX_spec_ctrl(%_ASM_DI), %edi + movl PER_CPU_VAR(x86_spec_ctrl_current), %esi + cmp %edi, %esi + je .Lspec_ctrl_done + mov $MSR_IA32_SPEC_CTRL, %ecx + xor %edx, %edx + mov %edi, %eax + wrmsr + +.Lspec_ctrl_done: + + /* + * Since vmentry is serializing on affected CPUs, there's no need for + * an LFENCE to stop speculation from skipping the wrmsr. + */ + /* Load @regs to RAX. */ mov (%_ASM_SP), %_ASM_AX /* Check if vmlaunch or vmresume is needed */ - testb %bl, %bl + testb $VMX_RUN_VMRESUME, %bl /* Load guest registers. Don't clobber flags. */ mov VCPU_RCX(%_ASM_AX), %_ASM_CX @@ -154,11 +128,36 @@ /* Load guest RAX. This kills the @regs pointer! */ mov VCPU_RAX(%_ASM_AX), %_ASM_AX - /* Enter guest mode */ - call vmx_vmenter + /* Check EFLAGS.ZF from 'testb' above */ + jz .Lvmlaunch + + /* + * After a successful VMRESUME/VMLAUNCH, control flow "magically" + * resumes below at 'vmx_vmexit' due to the VMCS HOST_RIP setting. + * So this isn't a typical function and objtool needs to be told to + * save the unwind state here and restore it below. + */ + UNWIND_HINT_SAVE + +/* + * If VMRESUME/VMLAUNCH and corresponding vmexit succeed, execution resumes at + * the 'vmx_vmexit' label below. + */ +.Lvmresume: + vmresume + jmp .Lvmfail + +.Lvmlaunch: + vmlaunch + jmp .Lvmfail + + _ASM_EXTABLE(.Lvmresume, .Lfixup) + _ASM_EXTABLE(.Lvmlaunch, .Lfixup) - /* Jump on VM-Fail. */ - jbe 2f +SYM_INNER_LABEL(vmx_vmexit, SYM_L_GLOBAL) + + /* Restore unwind state from before the VMRESUME/VMLAUNCH. */ + UNWIND_HINT_RESTORE /* Temporarily save guest's RAX. */ push %_ASM_AX @@ -185,21 +184,23 @@ mov %r15, VCPU_R15(%_ASM_AX) #endif - /* Clear RAX to indicate VM-Exit (as opposed to VM-Fail). */ - xor %eax, %eax + /* Clear return value to indicate VM-Exit (as opposed to VM-Fail). */ + xor %ebx, %ebx +.Lclear_regs: /* - * Clear all general purpose registers except RSP and RAX to prevent + * Clear all general purpose registers except RSP and RBX to prevent * speculative use of the guest's values, even those that are reloaded * via the stack. In theory, an L1 cache miss when restoring registers * could lead to speculative execution with the guest's values. * Zeroing XORs are dirt cheap, i.e. the extra paranoia is essentially * free. RSP and RAX are exempt as RSP is restored by hardware during - * VM-Exit and RAX is explicitly loaded with 0 or 1 to return VM-Fail. + * VM-Exit and RBX is explicitly loaded with 0 or 1 to hold the return + * value. */ -1: xor %ecx, %ecx + xor %eax, %eax + xor %ecx, %ecx xor %edx, %edx - xor %ebx, %ebx xor %ebp, %ebp xor %esi, %esi xor %edi, %edi @@ -216,8 +217,30 @@ /* "POP" @regs. */ add $WORD_SIZE, %_ASM_SP - pop %_ASM_BX + /* + * IMPORTANT: RSB filling and SPEC_CTRL handling must be done before + * the first unbalanced RET after vmexit! + * + * For retpoline or IBRS, RSB filling is needed to prevent poisoned RSB + * entries and (in some cases) RSB underflow. + * + * eIBRS has its own protection against poisoned RSB, so it doesn't + * need the RSB filling sequence. But it does need to be enabled + * before the first unbalanced RET. + */ + + FILL_RETURN_BUFFER %_ASM_CX, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_VMEXIT + + pop %_ASM_ARG2 /* @flags */ + pop %_ASM_ARG1 /* @vmx */ + + call vmx_spec_ctrl_restore_host + + /* Put return value in AX */ + mov %_ASM_BX, %_ASM_AX + + pop %_ASM_BX #ifdef CONFIG_X86_64 pop %r12 pop %r13 @@ -228,11 +251,17 @@ pop %edi #endif pop %_ASM_BP - ret + RET + +.Lfixup: + cmpb $0, kvm_rebooting + jne .Lvmfail + ud2 +.Lvmfail: + /* VM-Fail: set return value to 1 */ + mov $1, %_ASM_BX + jmp .Lclear_regs - /* VM-Fail. Out-of-line to avoid a taken Jcc after VM-Exit. */ -2: mov $1, %eax - jmp 1b SYM_FUNC_END(__vmx_vcpu_run) @@ -293,7 +322,7 @@ pop %_ASM_AX pop %_ASM_BP - ret + RET SYM_FUNC_END(vmread_error_trampoline) SYM_FUNC_START(vmx_do_interrupt_nmi_irqoff) @@ -326,5 +355,5 @@ */ mov %_ASM_BP, %_ASM_SP pop %_ASM_BP - ret + RET SYM_FUNC_END(vmx_do_interrupt_nmi_irqoff) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/kvm/vmx/vmx_ops.h +++ linux-hwe-5.15-5.15.0/arch/x86/kvm/vmx/vmx_ops.h @@ -8,7 +8,7 @@ #include "evmcs.h" #include "vmcs.h" -#include "x86.h" +#include "../x86.h" asmlinkage void vmread_error(unsigned long field, bool fault); __attribute__((regparm(0))) void vmread_error_trampoline(unsigned long field, only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/atomic64_386_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/atomic64_386_32.S @@ -9,81 +9,83 @@ #include /* if you want SMP support, implement these with real spinlocks */ -.macro LOCK reg +.macro IRQ_SAVE reg pushfl cli .endm -.macro UNLOCK reg +.macro IRQ_RESTORE reg popfl .endm -#define BEGIN(op) \ +#define BEGIN_IRQ_SAVE(op) \ .macro endp; \ SYM_FUNC_END(atomic64_##op##_386); \ .purgem endp; \ .endm; \ SYM_FUNC_START(atomic64_##op##_386); \ - LOCK v; + IRQ_SAVE v; #define ENDP endp -#define RET \ - UNLOCK v; \ - ret - -#define RET_ENDP \ - RET; \ - ENDP +#define RET_IRQ_RESTORE \ + IRQ_RESTORE v; \ + RET #define v %ecx -BEGIN(read) +BEGIN_IRQ_SAVE(read) movl (v), %eax movl 4(v), %edx -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %esi -BEGIN(set) +BEGIN_IRQ_SAVE(set) movl %ebx, (v) movl %ecx, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %esi -BEGIN(xchg) +BEGIN_IRQ_SAVE(xchg) movl (v), %eax movl 4(v), %edx movl %ebx, (v) movl %ecx, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %ecx -BEGIN(add) +BEGIN_IRQ_SAVE(add) addl %eax, (v) adcl %edx, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %ecx -BEGIN(add_return) +BEGIN_IRQ_SAVE(add_return) addl (v), %eax adcl 4(v), %edx movl %eax, (v) movl %edx, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %ecx -BEGIN(sub) +BEGIN_IRQ_SAVE(sub) subl %eax, (v) sbbl %edx, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %ecx -BEGIN(sub_return) +BEGIN_IRQ_SAVE(sub_return) negl %edx negl %eax sbbl $0, %edx @@ -91,47 +93,52 @@ adcl 4(v), %edx movl %eax, (v) movl %edx, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %esi -BEGIN(inc) +BEGIN_IRQ_SAVE(inc) addl $1, (v) adcl $0, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %esi -BEGIN(inc_return) +BEGIN_IRQ_SAVE(inc_return) movl (v), %eax movl 4(v), %edx addl $1, %eax adcl $0, %edx movl %eax, (v) movl %edx, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %esi -BEGIN(dec) +BEGIN_IRQ_SAVE(dec) subl $1, (v) sbbl $0, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %esi -BEGIN(dec_return) +BEGIN_IRQ_SAVE(dec_return) movl (v), %eax movl 4(v), %edx subl $1, %eax sbbl $0, %edx movl %eax, (v) movl %edx, 4(v) -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v #define v %esi -BEGIN(add_unless) +BEGIN_IRQ_SAVE(add_unless) addl %eax, %ecx adcl %edx, %edi addl (v), %eax @@ -143,7 +150,7 @@ movl %edx, 4(v) movl $1, %eax 2: - RET + RET_IRQ_RESTORE 3: cmpl %edx, %edi jne 1b @@ -153,7 +160,7 @@ #undef v #define v %esi -BEGIN(inc_not_zero) +BEGIN_IRQ_SAVE(inc_not_zero) movl (v), %eax movl 4(v), %edx testl %eax, %eax @@ -165,7 +172,7 @@ movl %edx, 4(v) movl $1, %eax 2: - RET + RET_IRQ_RESTORE 3: testl %edx, %edx jne 1b @@ -174,7 +181,7 @@ #undef v #define v %esi -BEGIN(dec_if_positive) +BEGIN_IRQ_SAVE(dec_if_positive) movl (v), %eax movl 4(v), %edx subl $1, %eax @@ -183,5 +190,6 @@ movl %eax, (v) movl %edx, 4(v) 1: -RET_ENDP + RET_IRQ_RESTORE +ENDP #undef v only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/atomic64_cx8_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/atomic64_cx8_32.S @@ -18,7 +18,7 @@ SYM_FUNC_START(atomic64_read_cx8) read64 %ecx - ret + RET SYM_FUNC_END(atomic64_read_cx8) SYM_FUNC_START(atomic64_set_cx8) @@ -28,7 +28,7 @@ cmpxchg8b (%esi) jne 1b - ret + RET SYM_FUNC_END(atomic64_set_cx8) SYM_FUNC_START(atomic64_xchg_cx8) @@ -37,7 +37,7 @@ cmpxchg8b (%esi) jne 1b - ret + RET SYM_FUNC_END(atomic64_xchg_cx8) .macro addsub_return func ins insc @@ -68,7 +68,7 @@ popl %esi popl %ebx popl %ebp - ret + RET SYM_FUNC_END(atomic64_\func\()_return_cx8) .endm @@ -93,7 +93,7 @@ movl %ebx, %eax movl %ecx, %edx popl %ebx - ret + RET SYM_FUNC_END(atomic64_\func\()_return_cx8) .endm @@ -118,7 +118,7 @@ movl %ebx, %eax movl %ecx, %edx popl %ebx - ret + RET SYM_FUNC_END(atomic64_dec_if_positive_cx8) SYM_FUNC_START(atomic64_add_unless_cx8) @@ -149,7 +149,7 @@ addl $8, %esp popl %ebx popl %ebp - ret + RET 4: cmpl %edx, 4(%esp) jne 2b @@ -176,5 +176,5 @@ movl $1, %eax 3: popl %ebx - ret + RET SYM_FUNC_END(atomic64_inc_not_zero_cx8) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/checksum_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/checksum_32.S @@ -127,7 +127,7 @@ 8: popl %ebx popl %esi - ret + RET SYM_FUNC_END(csum_partial) #else @@ -245,7 +245,7 @@ 90: popl %ebx popl %esi - ret + RET SYM_FUNC_END(csum_partial) #endif @@ -371,7 +371,7 @@ popl %esi popl %edi popl %ecx # equivalent to addl $4,%esp - ret + RET SYM_FUNC_END(csum_partial_copy_generic) #else @@ -447,7 +447,7 @@ popl %esi popl %edi popl %ebx - ret + RET SYM_FUNC_END(csum_partial_copy_generic) #undef ROUND only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/clear_page_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/clear_page_64.S @@ -17,7 +17,7 @@ movl $4096/8,%ecx xorl %eax,%eax rep stosq - ret + RET SYM_FUNC_END(clear_page_rep) EXPORT_SYMBOL_GPL(clear_page_rep) @@ -39,7 +39,7 @@ leaq 64(%rdi),%rdi jnz .Lloop nop - ret + RET SYM_FUNC_END(clear_page_orig) EXPORT_SYMBOL_GPL(clear_page_orig) @@ -47,6 +47,6 @@ movl $4096,%ecx xorl %eax,%eax rep stosb - ret + RET SYM_FUNC_END(clear_page_erms) EXPORT_SYMBOL_GPL(clear_page_erms) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/cmpxchg16b_emu.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/cmpxchg16b_emu.S @@ -37,11 +37,11 @@ popfq mov $1, %al - ret + RET .Lnot_same: popfq xor %al,%al - ret + RET SYM_FUNC_END(this_cpu_cmpxchg16b_emu) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/cmpxchg8b_emu.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/cmpxchg8b_emu.S @@ -32,7 +32,7 @@ movl %ecx, 4(%esi) popfl - ret + RET .Lnot_same: movl (%esi), %eax @@ -40,7 +40,7 @@ movl 4(%esi), %edx popfl - ret + RET SYM_FUNC_END(cmpxchg8b_emu) EXPORT_SYMBOL(cmpxchg8b_emu) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/copy_page_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/copy_page_64.S @@ -17,7 +17,7 @@ ALTERNATIVE "jmp copy_page_regs", "", X86_FEATURE_REP_GOOD movl $4096/8, %ecx rep movsq - ret + RET SYM_FUNC_END(copy_page) EXPORT_SYMBOL(copy_page) @@ -85,5 +85,5 @@ movq (%rsp), %rbx movq 1*8(%rsp), %r12 addq $2*8, %rsp - ret + RET SYM_FUNC_END(copy_page_regs) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/copy_user_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/copy_user_64.S @@ -105,7 +105,7 @@ jnz 21b 23: xor %eax,%eax ASM_CLAC - ret + RET .section .fixup,"ax" 30: shll $6,%ecx @@ -173,7 +173,7 @@ movsb xorl %eax,%eax ASM_CLAC - ret + RET .section .fixup,"ax" 11: leal (%rdx,%rcx,8),%ecx @@ -207,7 +207,7 @@ movsb xorl %eax,%eax ASM_CLAC - ret + RET .section .fixup,"ax" 12: movl %ecx,%edx /* ecx is zerorest also */ @@ -239,7 +239,7 @@ 1: rep movsb 2: mov %ecx,%eax ASM_CLAC - ret + RET /* * Return zero to pretend that this copy succeeded. This @@ -250,7 +250,7 @@ */ 3: xorl %eax,%eax ASM_CLAC - ret + RET _ASM_EXTABLE_CPY(1b, 2b) SYM_CODE_END(.Lcopy_user_handle_tail) @@ -361,7 +361,7 @@ xorl %eax,%eax ASM_CLAC sfence - ret + RET .section .fixup,"ax" .L_fixup_4x8b_copy: only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/csum-copy_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/csum-copy_64.S @@ -201,7 +201,7 @@ movq 3*8(%rsp), %r13 movq 4*8(%rsp), %r15 addq $5*8, %rsp - ret + RET .Lshort: movl %ecx, %r10d jmp .L1 only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/error-inject.c +++ linux-hwe-5.15-5.15.0/arch/x86/lib/error-inject.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 +#include #include #include @@ -10,7 +11,7 @@ ".type just_return_func, @function\n" ".globl just_return_func\n" "just_return_func:\n" - " ret\n" + ASM_RET ".size just_return_func, .-just_return_func\n" ); only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/getuser.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/getuser.S @@ -57,7 +57,7 @@ 1: movzbl (%_ASM_AX),%edx xor %eax,%eax ASM_CLAC - ret + RET SYM_FUNC_END(__get_user_1) EXPORT_SYMBOL(__get_user_1) @@ -71,7 +71,7 @@ 2: movzwl (%_ASM_AX),%edx xor %eax,%eax ASM_CLAC - ret + RET SYM_FUNC_END(__get_user_2) EXPORT_SYMBOL(__get_user_2) @@ -85,7 +85,7 @@ 3: movl (%_ASM_AX),%edx xor %eax,%eax ASM_CLAC - ret + RET SYM_FUNC_END(__get_user_4) EXPORT_SYMBOL(__get_user_4) @@ -100,7 +100,7 @@ 4: movq (%_ASM_AX),%rdx xor %eax,%eax ASM_CLAC - ret + RET #else LOAD_TASK_SIZE_MINUS_N(7) cmp %_ASM_DX,%_ASM_AX @@ -112,7 +112,7 @@ 5: movl 4(%_ASM_AX),%ecx xor %eax,%eax ASM_CLAC - ret + RET #endif SYM_FUNC_END(__get_user_8) EXPORT_SYMBOL(__get_user_8) @@ -124,7 +124,7 @@ 6: movzbl (%_ASM_AX),%edx xor %eax,%eax ASM_CLAC - ret + RET SYM_FUNC_END(__get_user_nocheck_1) EXPORT_SYMBOL(__get_user_nocheck_1) @@ -134,7 +134,7 @@ 7: movzwl (%_ASM_AX),%edx xor %eax,%eax ASM_CLAC - ret + RET SYM_FUNC_END(__get_user_nocheck_2) EXPORT_SYMBOL(__get_user_nocheck_2) @@ -144,7 +144,7 @@ 8: movl (%_ASM_AX),%edx xor %eax,%eax ASM_CLAC - ret + RET SYM_FUNC_END(__get_user_nocheck_4) EXPORT_SYMBOL(__get_user_nocheck_4) @@ -159,7 +159,7 @@ #endif xor %eax,%eax ASM_CLAC - ret + RET SYM_FUNC_END(__get_user_nocheck_8) EXPORT_SYMBOL(__get_user_nocheck_8) @@ -169,7 +169,7 @@ bad_get_user: xor %edx,%edx mov $(-EFAULT),%_ASM_AX - ret + RET SYM_CODE_END(.Lbad_get_user_clac) #ifdef CONFIG_X86_32 @@ -179,7 +179,7 @@ xor %edx,%edx xor %ecx,%ecx mov $(-EFAULT),%_ASM_AX - ret + RET SYM_CODE_END(.Lbad_get_user_8_clac) #endif only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/hweight.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/hweight.S @@ -32,7 +32,7 @@ imull $0x01010101, %eax, %eax # w_tmp *= 0x01010101 shrl $24, %eax # w = w_tmp >> 24 __ASM_SIZE(pop,) %__ASM_REG(dx) - ret + RET SYM_FUNC_END(__sw_hweight32) EXPORT_SYMBOL(__sw_hweight32) @@ -65,7 +65,7 @@ popq %rdx popq %rdi - ret + RET #else /* CONFIG_X86_32 */ /* We're getting an u64 arg in (%eax,%edx): unsigned long hweight64(__u64 w) */ pushl %ecx @@ -77,7 +77,7 @@ addl %ecx, %eax # result popl %ecx - ret + RET #endif SYM_FUNC_END(__sw_hweight64) EXPORT_SYMBOL(__sw_hweight64) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/iomap_copy_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/iomap_copy_64.S @@ -11,5 +11,5 @@ SYM_FUNC_START(__iowrite32_copy) movl %edx,%ecx rep movsd - ret + RET SYM_FUNC_END(__iowrite32_copy) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/memcpy_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/memcpy_64.S @@ -39,7 +39,7 @@ rep movsq movl %edx, %ecx rep movsb - ret + RET SYM_FUNC_END(memcpy) SYM_FUNC_END_ALIAS(__memcpy) EXPORT_SYMBOL(memcpy) @@ -53,7 +53,7 @@ movq %rdi, %rax movq %rdx, %rcx rep movsb - ret + RET SYM_FUNC_END(memcpy_erms) SYM_FUNC_START_LOCAL(memcpy_orig) @@ -137,7 +137,7 @@ movq %r9, 1*8(%rdi) movq %r10, -2*8(%rdi, %rdx) movq %r11, -1*8(%rdi, %rdx) - retq + RET .p2align 4 .Lless_16bytes: cmpl $8, %edx @@ -149,7 +149,7 @@ movq -1*8(%rsi, %rdx), %r9 movq %r8, 0*8(%rdi) movq %r9, -1*8(%rdi, %rdx) - retq + RET .p2align 4 .Lless_8bytes: cmpl $4, %edx @@ -162,7 +162,7 @@ movl -4(%rsi, %rdx), %r8d movl %ecx, (%rdi) movl %r8d, -4(%rdi, %rdx) - retq + RET .p2align 4 .Lless_3bytes: subl $1, %edx @@ -180,7 +180,7 @@ movb %cl, (%rdi) .Lend: - retq + RET SYM_FUNC_END(memcpy_orig) .popsection only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/memmove_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/memmove_64.S @@ -40,7 +40,7 @@ /* FSRM implies ERMS => no length checks, do the copy directly */ .Lmemmove_begin_forward: ALTERNATIVE "cmp $0x20, %rdx; jb 1f", "", X86_FEATURE_FSRM - ALTERNATIVE "", "movq %rdx, %rcx; rep movsb; retq", X86_FEATURE_ERMS + ALTERNATIVE "", "jmp .Lmemmove_erms", X86_FEATURE_ERMS /* * movsq instruction have many startup latency @@ -205,7 +205,12 @@ movb (%rsi), %r11b movb %r11b, (%rdi) 13: - retq + RET + +.Lmemmove_erms: + movq %rdx, %rcx + rep movsb + RET SYM_FUNC_END(__memmove) SYM_FUNC_END_ALIAS(memmove) EXPORT_SYMBOL(__memmove) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/memset_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/memset_64.S @@ -40,7 +40,7 @@ movl %edx,%ecx rep stosb movq %r9,%rax - ret + RET SYM_FUNC_END(__memset) SYM_FUNC_END_ALIAS(memset) EXPORT_SYMBOL(memset) @@ -63,7 +63,7 @@ movq %rdx,%rcx rep stosb movq %r9,%rax - ret + RET SYM_FUNC_END(memset_erms) SYM_FUNC_START_LOCAL(memset_orig) @@ -125,7 +125,7 @@ .Lende: movq %r10,%rax - ret + RET .Lbad_alignment: cmpq $7,%rdx only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/msr-reg.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/msr-reg.S @@ -35,7 +35,7 @@ movl %edi, 28(%r10) popq %r12 popq %rbx - ret + RET 3: movl $-EIO, %r11d jmp 2b @@ -77,7 +77,7 @@ popl %esi popl %ebp popl %ebx - ret + RET 3: movl $-EIO, 4(%esp) jmp 2b only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/lib/putuser.S +++ linux-hwe-5.15-5.15.0/arch/x86/lib/putuser.S @@ -52,7 +52,7 @@ 1: movb %al,(%_ASM_CX) xor %ecx,%ecx ASM_CLAC - ret + RET SYM_FUNC_END(__put_user_1) EXPORT_SYMBOL(__put_user_1) EXPORT_SYMBOL(__put_user_nocheck_1) @@ -66,7 +66,7 @@ 2: movw %ax,(%_ASM_CX) xor %ecx,%ecx ASM_CLAC - ret + RET SYM_FUNC_END(__put_user_2) EXPORT_SYMBOL(__put_user_2) EXPORT_SYMBOL(__put_user_nocheck_2) @@ -80,7 +80,7 @@ 3: movl %eax,(%_ASM_CX) xor %ecx,%ecx ASM_CLAC - ret + RET SYM_FUNC_END(__put_user_4) EXPORT_SYMBOL(__put_user_4) EXPORT_SYMBOL(__put_user_nocheck_4) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/div_Xsig.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/div_Xsig.S @@ -341,7 +341,7 @@ popl %esi leave - ret + RET #ifdef PARANOID only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/div_small.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/div_small.S @@ -44,5 +44,5 @@ popl %esi leave - ret + RET SYM_FUNC_END(FPU_div_small) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/mul_Xsig.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/mul_Xsig.S @@ -62,7 +62,7 @@ popl %esi leave - ret + RET SYM_FUNC_END(mul32_Xsig) @@ -115,7 +115,7 @@ popl %esi leave - ret + RET SYM_FUNC_END(mul64_Xsig) @@ -175,5 +175,5 @@ popl %esi leave - ret + RET SYM_FUNC_END(mul_Xsig_Xsig) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/polynom_Xsig.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/polynom_Xsig.S @@ -133,5 +133,5 @@ popl %edi popl %esi leave - ret + RET SYM_FUNC_END(polynomial_Xsig) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/reg_norm.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/reg_norm.S @@ -72,7 +72,7 @@ L_exit: popl %ebx leave - ret + RET L_zero: @@ -138,7 +138,7 @@ popl %ebx leave - ret + RET L_exit_nuo_zero: movl TAG_Zero,%eax @@ -146,5 +146,5 @@ popl %ebx leave - ret + RET SYM_FUNC_END(FPU_normalize_nuo) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/reg_round.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/reg_round.S @@ -437,7 +437,7 @@ popl %edi popl %esi leave - ret + RET /* only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/reg_u_add.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/reg_u_add.S @@ -164,6 +164,6 @@ popl %edi popl %esi leave - ret + RET #endif /* PARANOID */ SYM_FUNC_END(FPU_u_add) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/reg_u_div.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/reg_u_div.S @@ -468,7 +468,7 @@ popl %esi leave - ret + RET #endif /* PARANOID */ SYM_FUNC_END(FPU_u_div) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/reg_u_mul.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/reg_u_mul.S @@ -144,7 +144,7 @@ popl %edi popl %esi leave - ret + RET #endif /* PARANOID */ SYM_FUNC_END(FPU_u_mul) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/reg_u_sub.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/reg_u_sub.S @@ -270,5 +270,5 @@ popl %edi popl %esi leave - ret + RET SYM_FUNC_END(FPU_u_sub) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/round_Xsig.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/round_Xsig.S @@ -78,7 +78,7 @@ popl %esi popl %ebx leave - ret + RET SYM_FUNC_END(round_Xsig) @@ -138,5 +138,5 @@ popl %esi popl %ebx leave - ret + RET SYM_FUNC_END(norm_Xsig) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/shr_Xsig.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/shr_Xsig.S @@ -45,7 +45,7 @@ popl %ebx popl %esi leave - ret + RET L_more_than_31: cmpl $64,%ecx @@ -61,7 +61,7 @@ movl $0,8(%esi) popl %esi leave - ret + RET L_more_than_63: cmpl $96,%ecx @@ -76,7 +76,7 @@ movl %edx,8(%esi) popl %esi leave - ret + RET L_more_than_95: xorl %eax,%eax @@ -85,5 +85,5 @@ movl %eax,8(%esi) popl %esi leave - ret + RET SYM_FUNC_END(shr_Xsig) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/math-emu/wm_shrx.S +++ linux-hwe-5.15-5.15.0/arch/x86/math-emu/wm_shrx.S @@ -55,7 +55,7 @@ popl %ebx popl %esi leave - ret + RET L_more_than_31: cmpl $64,%ecx @@ -70,7 +70,7 @@ movl $0,4(%esi) popl %esi leave - ret + RET L_more_than_63: cmpl $96,%ecx @@ -84,7 +84,7 @@ movl %edx,4(%esi) popl %esi leave - ret + RET L_more_than_95: xorl %eax,%eax @@ -92,7 +92,7 @@ movl %eax,4(%esi) popl %esi leave - ret + RET SYM_FUNC_END(FPU_shrx) @@ -146,7 +146,7 @@ popl %ebx popl %esi leave - ret + RET /* Shift by [0..31] bits */ Ls_less_than_32: @@ -163,7 +163,7 @@ popl %ebx popl %esi leave - ret + RET /* Shift by [64..95] bits */ Ls_more_than_63: @@ -189,7 +189,7 @@ popl %ebx popl %esi leave - ret + RET Ls_more_than_95: /* Shift by [96..inf) bits */ @@ -203,5 +203,5 @@ popl %ebx popl %esi leave - ret + RET SYM_FUNC_END(FPU_shrxs) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/mm/mem_encrypt_boot.S +++ linux-hwe-5.15-5.15.0/arch/x86/mm/mem_encrypt_boot.S @@ -65,7 +65,10 @@ movq %rbp, %rsp /* Restore original stack pointer */ pop %rbp + /* Offset to __x86_return_thunk would be wrong here */ + ANNOTATE_UNRET_SAFE ret + int3 SYM_FUNC_END(sme_encrypt_execute) SYM_FUNC_START(__enc_copy) @@ -151,6 +154,9 @@ pop %r12 pop %r15 + /* Offset to __x86_return_thunk would be wrong here */ + ANNOTATE_UNRET_SAFE ret + int3 .L__enc_copy_end: SYM_FUNC_END(__enc_copy) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/platform/efi/efi_stub_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/platform/efi/efi_stub_32.S @@ -56,5 +56,5 @@ movl 16(%esp), %ebx leave - ret + RET SYM_FUNC_END(efi_call_svam) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/platform/efi/efi_stub_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/platform/efi/efi_stub_64.S @@ -23,5 +23,5 @@ mov %rsi, %rcx CALL_NOSPEC rdi leave - ret + RET SYM_FUNC_END(__efi_call) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/platform/efi/efi_thunk_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/platform/efi/efi_thunk_64.S @@ -22,6 +22,7 @@ #include #include #include +#include .text .code64 @@ -63,7 +64,9 @@ 1: movq 24(%rsp), %rsp pop %rbx pop %rbp - retq + ANNOTATE_UNRET_SAFE + ret + int3 .code32 2: pushl $__KERNEL_CS only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/platform/olpc/xo1-wakeup.S +++ linux-hwe-5.15-5.15.0/arch/x86/platform/olpc/xo1-wakeup.S @@ -77,7 +77,7 @@ pushfl popl saved_context_eflags - ret + RET restore_registers: movl saved_context_ebp, %ebp @@ -88,7 +88,7 @@ pushl saved_context_eflags popfl - ret + RET SYM_CODE_START(do_olpc_suspend_lowlevel) call save_processor_state @@ -109,7 +109,7 @@ call restore_registers call restore_processor_state - ret + RET SYM_CODE_END(do_olpc_suspend_lowlevel) .data only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/power/hibernate_asm_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/power/hibernate_asm_32.S @@ -32,7 +32,7 @@ FRAME_BEGIN call swsusp_save FRAME_END - ret + RET SYM_FUNC_END(swsusp_arch_suspend) SYM_CODE_START(restore_image) @@ -108,5 +108,5 @@ /* tell the hibernation core that we've just restored the memory */ movl %eax, in_suspend - ret + RET SYM_FUNC_END(restore_registers) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/power/hibernate_asm_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/power/hibernate_asm_64.S @@ -66,7 +66,7 @@ /* tell the hibernation core that we've just restored the memory */ movq %rax, in_suspend(%rip) - ret + RET SYM_FUNC_END(restore_registers) SYM_FUNC_START(swsusp_arch_suspend) @@ -96,7 +96,7 @@ FRAME_BEGIN call swsusp_save FRAME_END - ret + RET SYM_FUNC_END(swsusp_arch_suspend) SYM_FUNC_START(restore_image) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/um/checksum_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/um/checksum_32.S @@ -110,7 +110,7 @@ 7: popl %ebx popl %esi - ret + RET #else @@ -208,7 +208,7 @@ 80: popl %ebx popl %esi - ret + RET #endif EXPORT_SYMBOL(csum_partial) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/um/setjmp_32.S +++ linux-hwe-5.15-5.15.0/arch/x86/um/setjmp_32.S @@ -34,7 +34,7 @@ movl %esi,12(%edx) movl %edi,16(%edx) movl %ecx,20(%edx) # Return address - ret + RET .size kernel_setjmp,.-kernel_setjmp only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/um/setjmp_64.S +++ linux-hwe-5.15-5.15.0/arch/x86/um/setjmp_64.S @@ -33,7 +33,7 @@ movq %r14,40(%rdi) movq %r15,48(%rdi) movq %rsi,56(%rdi) # Return address - ret + RET .size kernel_setjmp,.-kernel_setjmp only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/xen/setup.c +++ linux-hwe-5.15-5.15.0/arch/x86/xen/setup.c @@ -922,7 +922,7 @@ if (!boot_cpu_has(sysenter_feature)) return; - ret = register_callback(CALLBACKTYPE_sysenter, xen_sysenter_target); + ret = register_callback(CALLBACKTYPE_sysenter, xen_entry_SYSENTER_compat); if(ret != 0) setup_clear_cpu_cap(sysenter_feature); } @@ -931,7 +931,7 @@ { int ret; - ret = register_callback(CALLBACKTYPE_syscall, xen_syscall_target); + ret = register_callback(CALLBACKTYPE_syscall, xen_entry_SYSCALL_64); if (ret != 0) { printk(KERN_ERR "Failed to set syscall callback: %d\n", ret); /* Pretty fatal; 64-bit userspace has no other @@ -940,7 +940,7 @@ if (boot_cpu_has(X86_FEATURE_SYSCALL32)) { ret = register_callback(CALLBACKTYPE_syscall32, - xen_syscall32_target); + xen_entry_SYSCALL_compat); if (ret != 0) setup_clear_cpu_cap(X86_FEATURE_SYSCALL32); } only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/xen/xen-head.S +++ linux-hwe-5.15-5.15.0/arch/x86/xen/xen-head.S @@ -70,7 +70,8 @@ .rept (PAGE_SIZE / 32) UNWIND_HINT_FUNC .skip 31, 0x90 - ret + ANNOTATE_UNRET_SAFE + RET .endr #define HYPERCALL(n) \ only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/arch/x86/xen/xen-ops.h +++ linux-hwe-5.15-5.15.0/arch/x86/xen/xen-ops.h @@ -10,10 +10,10 @@ /* These are code, but not functions. Defined in entry.S */ extern const char xen_failsafe_callback[]; -void xen_sysenter_target(void); +void xen_entry_SYSENTER_compat(void); #ifdef CONFIG_X86_64 -void xen_syscall_target(void); -void xen_syscall32_target(void); +void xen_entry_SYSCALL_64(void); +void xen_entry_SYSCALL_compat(void); #endif extern void *xen_initial_gdt; only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/drivers/idle/intel_idle.c +++ linux-hwe-5.15-5.15.0/drivers/idle/intel_idle.c @@ -47,11 +47,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include @@ -94,6 +96,12 @@ #define CPUIDLE_FLAG_ALWAYS_ENABLE BIT(15) /* + * Disable IBRS across idle (when KERNEL_IBRS), is exclusive vs IRQ_ENABLE + * above. + */ +#define CPUIDLE_FLAG_IBRS BIT(16) + +/* * MWAIT takes an 8-bit "hint" in EAX "suggesting" * the C-state (top nibble) and sub-state (bottom nibble) * 0x00 means "MWAIT(C1)", 0x10 means "MWAIT(C2)" etc. @@ -132,6 +140,24 @@ return index; } +static __cpuidle int intel_idle_ibrs(struct cpuidle_device *dev, + struct cpuidle_driver *drv, int index) +{ + bool smt_active = sched_smt_active(); + u64 spec_ctrl = spec_ctrl_current(); + int ret; + + if (smt_active) + wrmsrl(MSR_IA32_SPEC_CTRL, 0); + + ret = intel_idle(dev, drv, index); + + if (smt_active) + wrmsrl(MSR_IA32_SPEC_CTRL, spec_ctrl); + + return ret; +} + /** * intel_idle_s2idle - Ask the processor to enter the given idle state. * @dev: cpuidle device of the target CPU. @@ -653,7 +679,7 @@ { .name = "C6", .desc = "MWAIT 0x20", - .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED | CPUIDLE_FLAG_IBRS, .exit_latency = 85, .target_residency = 200, .enter = &intel_idle, @@ -661,7 +687,7 @@ { .name = "C7s", .desc = "MWAIT 0x33", - .flags = MWAIT2flg(0x33) | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x33) | CPUIDLE_FLAG_TLB_FLUSHED | CPUIDLE_FLAG_IBRS, .exit_latency = 124, .target_residency = 800, .enter = &intel_idle, @@ -669,7 +695,7 @@ { .name = "C8", .desc = "MWAIT 0x40", - .flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED | CPUIDLE_FLAG_IBRS, .exit_latency = 200, .target_residency = 800, .enter = &intel_idle, @@ -677,7 +703,7 @@ { .name = "C9", .desc = "MWAIT 0x50", - .flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED | CPUIDLE_FLAG_IBRS, .exit_latency = 480, .target_residency = 5000, .enter = &intel_idle, @@ -685,7 +711,7 @@ { .name = "C10", .desc = "MWAIT 0x60", - .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED | CPUIDLE_FLAG_IBRS, .exit_latency = 890, .target_residency = 5000, .enter = &intel_idle, @@ -714,7 +740,7 @@ { .name = "C6", .desc = "MWAIT 0x20", - .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED | CPUIDLE_FLAG_IBRS, .exit_latency = 133, .target_residency = 600, .enter = &intel_idle, @@ -1574,6 +1600,11 @@ /* Structure copy. */ drv->states[drv->state_count] = cpuidle_state_table[cstate]; + if (cpu_feature_enabled(X86_FEATURE_KERNEL_IBRS) && + cpuidle_state_table[cstate].flags & CPUIDLE_FLAG_IBRS) { + drv->states[drv->state_count].enter = intel_idle_ibrs; + } + if ((disabled_states_mask & BIT(drv->state_count)) || ((icpu->use_acpi || force_use_acpi) && intel_idle_off_by_default(mwait_hint) && only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/include/linux/objtool.h +++ linux-hwe-5.15-5.15.0/include/linux/objtool.h @@ -32,11 +32,16 @@ * * UNWIND_HINT_FUNC: Generate the unwind metadata of a callable function. * Useful for code which doesn't have an ELF function annotation. + * + * UNWIND_HINT_ENTRY: machine entry without stack, SYSCALL/SYSENTER etc. */ #define UNWIND_HINT_TYPE_CALL 0 #define UNWIND_HINT_TYPE_REGS 1 #define UNWIND_HINT_TYPE_REGS_PARTIAL 2 #define UNWIND_HINT_TYPE_FUNC 3 +#define UNWIND_HINT_TYPE_ENTRY 4 +#define UNWIND_HINT_TYPE_SAVE 5 +#define UNWIND_HINT_TYPE_RESTORE 6 #ifdef CONFIG_STACK_VALIDATION @@ -99,7 +104,7 @@ * the debuginfo as necessary. It will also warn if it sees any * inconsistencies. */ -.macro UNWIND_HINT sp_reg:req sp_offset=0 type:req end=0 +.macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 end=0 .Lunwind_hint_ip_\@: .pushsection .discard.unwind_hints /* struct unwind_hint */ @@ -129,7 +134,7 @@ #define STACK_FRAME_NON_STANDARD(func) #else #define ANNOTATE_INTRA_FUNCTION_CALL -.macro UNWIND_HINT sp_reg:req sp_offset=0 type:req end=0 +.macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 end=0 .endm .macro STACK_FRAME_NON_STANDARD func:req .endm only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/scripts/Makefile.lib +++ linux-hwe-5.15-5.15.0/scripts/Makefile.lib @@ -232,17 +232,6 @@ mod-prelink-ext := .lto endif -# Objtool arguments are also needed for modfinal with LTO, so we define -# then here to avoid duplication. -objtool_args = \ - $(if $(CONFIG_UNWINDER_ORC),orc generate,check) \ - $(if $(part-of-module), --module) \ - $(if $(CONFIG_FRAME_POINTER),, --no-fp) \ - $(if $(CONFIG_GCOV_KERNEL)$(CONFIG_LTO_CLANG), --no-unreachable)\ - $(if $(CONFIG_RETPOLINE), --retpoline) \ - $(if $(CONFIG_X86_SMAP), --uaccess) \ - $(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount) - # Useful for describing the dependency of composite objects # Usage: # $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add) only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/tools/include/linux/objtool.h +++ linux-hwe-5.15-5.15.0/tools/include/linux/objtool.h @@ -32,11 +32,16 @@ * * UNWIND_HINT_FUNC: Generate the unwind metadata of a callable function. * Useful for code which doesn't have an ELF function annotation. + * + * UNWIND_HINT_ENTRY: machine entry without stack, SYSCALL/SYSENTER etc. */ #define UNWIND_HINT_TYPE_CALL 0 #define UNWIND_HINT_TYPE_REGS 1 #define UNWIND_HINT_TYPE_REGS_PARTIAL 2 #define UNWIND_HINT_TYPE_FUNC 3 +#define UNWIND_HINT_TYPE_ENTRY 4 +#define UNWIND_HINT_TYPE_SAVE 5 +#define UNWIND_HINT_TYPE_RESTORE 6 #ifdef CONFIG_STACK_VALIDATION @@ -99,7 +104,7 @@ * the debuginfo as necessary. It will also warn if it sees any * inconsistencies. */ -.macro UNWIND_HINT sp_reg:req sp_offset=0 type:req end=0 +.macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 end=0 .Lunwind_hint_ip_\@: .pushsection .discard.unwind_hints /* struct unwind_hint */ @@ -129,7 +134,7 @@ #define STACK_FRAME_NON_STANDARD(func) #else #define ANNOTATE_INTRA_FUNCTION_CALL -.macro UNWIND_HINT sp_reg:req sp_offset=0 type:req end=0 +.macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 end=0 .endm .macro STACK_FRAME_NON_STANDARD func:req .endm only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/tools/objtool/builtin-check.c +++ linux-hwe-5.15-5.15.0/tools/objtool/builtin-check.c @@ -20,7 +20,7 @@ #include bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, - validate_dup, vmlinux, mcount, noinstr, backup; + validate_dup, vmlinux, mcount, noinstr, backup, sls, unret, rethunk; static const char * const check_usage[] = { "objtool check [] file.o", @@ -36,6 +36,8 @@ OPT_BOOLEAN('f', "no-fp", &no_fp, "Skip frame pointer validation"), OPT_BOOLEAN('u', "no-unreachable", &no_unreachable, "Skip 'unreachable instruction' warnings"), OPT_BOOLEAN('r', "retpoline", &retpoline, "Validate retpoline assumptions"), + OPT_BOOLEAN(0, "rethunk", &rethunk, "validate and annotate rethunk usage"), + OPT_BOOLEAN(0, "unret", &unret, "validate entry unret placement"), OPT_BOOLEAN('m', "module", &module, "Indicates the object will be part of a kernel module"), OPT_BOOLEAN('b', "backtrace", &backtrace, "unwind on error"), OPT_BOOLEAN('a', "uaccess", &uaccess, "enable uaccess checking"), @@ -45,6 +47,7 @@ OPT_BOOLEAN('l', "vmlinux", &vmlinux, "vmlinux.o validation"), OPT_BOOLEAN('M', "mcount", &mcount, "generate __mcount_loc"), OPT_BOOLEAN('B', "backup", &backup, "create .orig files before modification"), + OPT_BOOLEAN('S', "sls", &sls, "validate straight-line-speculation"), OPT_END(), }; only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/tools/objtool/include/objtool/builtin.h +++ linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/builtin.h @@ -9,7 +9,7 @@ extern const struct option check_options[]; extern bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, - validate_dup, vmlinux, mcount, noinstr, backup; + validate_dup, vmlinux, mcount, noinstr, backup, sls, unret, rethunk; extern int cmd_parse_options(int argc, const char **argv, const char * const usage[]); only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/tools/objtool/include/objtool/cfi.h +++ linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/cfi.h @@ -7,6 +7,7 @@ #define _OBJTOOL_CFI_H #include +#include #define CFI_UNDEFINED -1 #define CFI_CFA -2 @@ -24,6 +25,7 @@ }; struct cfi_state { + struct hlist_node hash; /* must be first, cficmp() */ struct cfi_reg regs[CFI_NUM_REGS]; struct cfi_reg vals[CFI_NUM_REGS]; struct cfi_reg cfa; only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/tools/objtool/include/objtool/objtool.h +++ linux-hwe-5.15-5.15.0/tools/objtool/include/objtool/objtool.h @@ -19,6 +19,7 @@ struct list_head insn_list; DECLARE_HASHTABLE(insn_hash, 20); struct list_head retpoline_call_list; + struct list_head return_thunk_list; struct list_head static_call_list; struct list_head mcount_loc_list; bool ignore_unreachables, c_file, hints, rodata; only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/tools/objtool/objtool.c +++ linux-hwe-5.15-5.15.0/tools/objtool/objtool.c @@ -126,6 +126,7 @@ INIT_LIST_HEAD(&file.insn_list); hash_init(file.insn_hash); INIT_LIST_HEAD(&file.retpoline_call_list); + INIT_LIST_HEAD(&file.return_thunk_list); INIT_LIST_HEAD(&file.static_call_list); INIT_LIST_HEAD(&file.mcount_loc_list); file.c_file = !vmlinux && find_section_by_name(file.elf, ".comment"); only in patch2: unchanged: --- linux-hwe-5.15-5.15.0.orig/tools/objtool/orc_gen.c +++ linux-hwe-5.15-5.15.0/tools/objtool/orc_gen.c @@ -13,13 +13,19 @@ #include #include -static int init_orc_entry(struct orc_entry *orc, struct cfi_state *cfi) +static int init_orc_entry(struct orc_entry *orc, struct cfi_state *cfi, + struct instruction *insn) { - struct instruction *insn = container_of(cfi, struct instruction, cfi); struct cfi_reg *bp = &cfi->regs[CFI_BP]; memset(orc, 0, sizeof(*orc)); + if (!cfi) { + orc->end = 0; + orc->sp_reg = ORC_REG_UNDEFINED; + return 0; + } + orc->end = cfi->end; if (cfi->cfa.base == CFI_UNDEFINED) { @@ -162,7 +168,7 @@ int i; if (!alt_group) { - if (init_orc_entry(&orc, &insn->cfi)) + if (init_orc_entry(&orc, insn->cfi, insn)) return -1; if (!memcmp(&prev_orc, &orc, sizeof(orc))) continue; @@ -186,7 +192,8 @@ struct cfi_state *cfi = alt_group->cfi[i]; if (!cfi) continue; - if (init_orc_entry(&orc, cfi)) + /* errors are reported on the original insn */ + if (init_orc_entry(&orc, cfi, insn)) return -1; if (!memcmp(&prev_orc, &orc, sizeof(orc))) continue;