Import of kernel-4.18.0-553.159.1.el8_10
This commit is contained in:
parent
57e502d298
commit
a72a9f015d
@ -12,7 +12,7 @@ RHEL_MINOR = 10
|
|||||||
#
|
#
|
||||||
# Use this spot to avoid future merge conflicts.
|
# Use this spot to avoid future merge conflicts.
|
||||||
# Do not trim this comment.
|
# Do not trim this comment.
|
||||||
RHEL_RELEASE = 553.158.1
|
RHEL_RELEASE = 553.159.1
|
||||||
|
|
||||||
#
|
#
|
||||||
# ZSTREAM
|
# ZSTREAM
|
||||||
|
|||||||
@ -636,8 +636,7 @@ static ssize_t update_mpp(u64 *entitlement, u8 *weight)
|
|||||||
static ssize_t lparcfg_write(struct file *file, const char __user * buf,
|
static ssize_t lparcfg_write(struct file *file, const char __user * buf,
|
||||||
size_t count, loff_t * off)
|
size_t count, loff_t * off)
|
||||||
{
|
{
|
||||||
int kbuf_sz = 64;
|
char kbuf[64];
|
||||||
char kbuf[kbuf_sz];
|
|
||||||
char *tmp;
|
char *tmp;
|
||||||
u64 new_entitled, *new_entitled_ptr = &new_entitled;
|
u64 new_entitled, *new_entitled_ptr = &new_entitled;
|
||||||
u8 new_weight, *new_weight_ptr = &new_weight;
|
u8 new_weight, *new_weight_ptr = &new_weight;
|
||||||
@ -646,7 +645,7 @@ static ssize_t lparcfg_write(struct file *file, const char __user * buf,
|
|||||||
if (!firmware_has_feature(FW_FEATURE_SPLPAR))
|
if (!firmware_has_feature(FW_FEATURE_SPLPAR))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (count > kbuf_sz)
|
if (count == 0 || count > sizeof(kbuf))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (copy_from_user(kbuf, buf, count))
|
if (copy_from_user(kbuf, buf, count))
|
||||||
|
|||||||
@ -1759,7 +1759,9 @@ static void cpumsf_pmu_stop(struct perf_event *event, int flags)
|
|||||||
event->hw.state |= PERF_HES_STOPPED;
|
event->hw.state |= PERF_HES_STOPPED;
|
||||||
|
|
||||||
if ((flags & PERF_EF_UPDATE) && !(event->hw.state & PERF_HES_UPTODATE)) {
|
if ((flags & PERF_EF_UPDATE) && !(event->hw.state & PERF_HES_UPTODATE)) {
|
||||||
hw_perf_event_update(event, 1);
|
/* CPU hotplug off removes SDBs. No samples to extract. */
|
||||||
|
if (cpuhw->flags & PMU_F_RESERVED)
|
||||||
|
hw_perf_event_update(event, 1);
|
||||||
event->hw.state |= PERF_HES_UPTODATE;
|
event->hw.state |= PERF_HES_UPTODATE;
|
||||||
}
|
}
|
||||||
perf_pmu_enable(event->pmu);
|
perf_pmu_enable(event->pmu);
|
||||||
|
|||||||
@ -805,7 +805,7 @@ _partial_block_done_\@:
|
|||||||
|
|
||||||
.if (\i == 5) || (\i == 6) || (\i == 7)
|
.if (\i == 5) || (\i == 6) || (\i == 7)
|
||||||
|
|
||||||
MOVADQ ONE(%RIP),\TMP1
|
MOVADQ ONE(%rip),\TMP1
|
||||||
MOVADQ 0(%arg1),\TMP2
|
MOVADQ 0(%arg1),\TMP2
|
||||||
.irpc index, \i_seq
|
.irpc index, \i_seq
|
||||||
paddd \TMP1, \XMM0 # INCR Y0
|
paddd \TMP1, \XMM0 # INCR Y0
|
||||||
@ -877,7 +877,7 @@ aes_loop_initial_\@:
|
|||||||
* Precomputations for HashKey parallel with encryption of first 4 blocks.
|
* Precomputations for HashKey parallel with encryption of first 4 blocks.
|
||||||
* Haskey_i_k holds XORed values of the low and high parts of the Haskey_i
|
* Haskey_i_k holds XORed values of the low and high parts of the Haskey_i
|
||||||
*/
|
*/
|
||||||
MOVADQ ONE(%RIP),\TMP1
|
MOVADQ ONE(%rip),\TMP1
|
||||||
paddd \TMP1, \XMM0 # INCR Y0
|
paddd \TMP1, \XMM0 # INCR Y0
|
||||||
MOVADQ \XMM0, \XMM1
|
MOVADQ \XMM0, \XMM1
|
||||||
PSHUFB_XMM %xmm14, \XMM1 # perform a 16 byte swap
|
PSHUFB_XMM %xmm14, \XMM1 # perform a 16 byte swap
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
#include <asm/percpu.h>
|
#include <asm/percpu.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/processor-flags.h>
|
#include <asm/processor-flags.h>
|
||||||
|
#include <asm/ptrace-abi.h>
|
||||||
#include <asm/msr.h>
|
#include <asm/msr.h>
|
||||||
#include <asm/nospec-branch.h>
|
#include <asm/nospec-branch.h>
|
||||||
|
|
||||||
@ -64,41 +65,6 @@ For 32-bit we have the following conventions - kernel is built with
|
|||||||
* for assembly code:
|
* for assembly code:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* The layout forms the "struct pt_regs" on the stack: */
|
|
||||||
/*
|
|
||||||
* C ABI says these regs are callee-preserved. They aren't saved on kernel entry
|
|
||||||
* unless syscall needs a complete, fully filled "struct pt_regs".
|
|
||||||
*/
|
|
||||||
#define R15 0*8
|
|
||||||
#define R14 1*8
|
|
||||||
#define R13 2*8
|
|
||||||
#define R12 3*8
|
|
||||||
#define RBP 4*8
|
|
||||||
#define RBX 5*8
|
|
||||||
/* These regs are callee-clobbered. Always saved on kernel entry. */
|
|
||||||
#define R11 6*8
|
|
||||||
#define R10 7*8
|
|
||||||
#define R9 8*8
|
|
||||||
#define R8 9*8
|
|
||||||
#define RAX 10*8
|
|
||||||
#define RCX 11*8
|
|
||||||
#define RDX 12*8
|
|
||||||
#define RSI 13*8
|
|
||||||
#define RDI 14*8
|
|
||||||
/*
|
|
||||||
* On syscall entry, this is syscall#. On CPU exception, this is error code.
|
|
||||||
* On hw interrupt, it's IRQ number:
|
|
||||||
*/
|
|
||||||
#define ORIG_RAX 15*8
|
|
||||||
/* Return frame for iretq */
|
|
||||||
#define RIP 16*8
|
|
||||||
#define CS 17*8
|
|
||||||
#define EFLAGS 18*8
|
|
||||||
#define RSP 19*8
|
|
||||||
#define SS 20*8
|
|
||||||
|
|
||||||
#define SIZEOF_PTREGS 21*8
|
|
||||||
|
|
||||||
.macro PUSH_AND_CLEAR_REGS rdx=%rdx rax=%rax save_ret=0
|
.macro PUSH_AND_CLEAR_REGS rdx=%rdx rax=%rax save_ret=0
|
||||||
.if \save_ret
|
.if \save_ret
|
||||||
pushq %rsi /* pt_regs->si */
|
pushq %rsi /* pt_regs->si */
|
||||||
|
|||||||
@ -1324,6 +1324,8 @@ SYM_CODE_START_LOCAL(paranoid_entry)
|
|||||||
IBRS_ENTER save_reg=%r15
|
IBRS_ENTER save_reg=%r15
|
||||||
UNTRAIN_RET
|
UNTRAIN_RET
|
||||||
|
|
||||||
|
HANDLE_INTR_SAFERET 8(%rsp)
|
||||||
|
|
||||||
RET
|
RET
|
||||||
SYM_CODE_END(paranoid_entry)
|
SYM_CODE_END(paranoid_entry)
|
||||||
|
|
||||||
@ -1448,6 +1450,9 @@ SYM_CODE_START_LOCAL(error_entry)
|
|||||||
movl %ecx, %eax /* zero extend */
|
movl %ecx, %eax /* zero extend */
|
||||||
cmpq %rax, RIP+8(%rsp)
|
cmpq %rax, RIP+8(%rsp)
|
||||||
je .Lbstep_iret
|
je .Lbstep_iret
|
||||||
|
|
||||||
|
HANDLE_INTR_SAFERET 8(%rsp)
|
||||||
|
|
||||||
cmpq $.Lgs_change, RIP+8(%rsp)
|
cmpq $.Lgs_change, RIP+8(%rsp)
|
||||||
jne .Lerror_entry_done_lfence
|
jne .Lerror_entry_done_lfence
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
#include <asm/msr-index.h>
|
#include <asm/msr-index.h>
|
||||||
#include <asm/unwind_hints.h>
|
#include <asm/unwind_hints.h>
|
||||||
#include <asm/percpu.h>
|
#include <asm/percpu.h>
|
||||||
|
#include <asm/ptrace-abi.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This should be used immediately before a retpoline alternative. It tells
|
* This should be used immediately before a retpoline alternative. It tells
|
||||||
@ -71,6 +72,50 @@
|
|||||||
/* barrier for jnz misprediction */ \
|
/* barrier for jnz misprediction */ \
|
||||||
lfence;
|
lfence;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Helper for detecting if an interrupt occurred at an unsafe location within
|
||||||
|
* Safe-RET. If Safe-RET is interrupted after the CALL or LEA the RSB may get
|
||||||
|
* poisoned by the interrupt handler.
|
||||||
|
*
|
||||||
|
* The Safe-RET sequence is:
|
||||||
|
*
|
||||||
|
* CALL
|
||||||
|
* LEA 8(%RSP), %RSP
|
||||||
|
* RET
|
||||||
|
*
|
||||||
|
* The two CMPs below check whether RIP points to after the CALL or after the
|
||||||
|
* LEA.
|
||||||
|
*
|
||||||
|
* The LFENCE below is to address this particular speculation case:
|
||||||
|
*
|
||||||
|
* 1. Userspace runs and poisons the BTB around the safe-RET routine
|
||||||
|
*
|
||||||
|
* 2. Userspace triggers some kind of exception
|
||||||
|
*
|
||||||
|
* 3. Kernel executes error_entry() and mis-speculates the branch into thinking
|
||||||
|
* it actually came from kernel space
|
||||||
|
*
|
||||||
|
* 4. The kernel then further mis-speculates that the exception occurred due
|
||||||
|
* to an interrupted safe-RET
|
||||||
|
*
|
||||||
|
* 5. The handle_interrupted_saferet() routine speculatively executes and
|
||||||
|
* speculatively does a safe-RET. But this is unsafe since it was never
|
||||||
|
* untrained.
|
||||||
|
*
|
||||||
|
* The LFENCE fixes this by ensuring step 5 is never reached speculatively.
|
||||||
|
* Note that this LFENCE only occurs if safe-RET was actually interrupted (so
|
||||||
|
* it's outside of the normal path).
|
||||||
|
*/
|
||||||
|
#define __HANDLE_INTR_SAFERET(name, pt_regs) \
|
||||||
|
cmpq $(name), RIP+pt_regs; \
|
||||||
|
jb 1f; \
|
||||||
|
cmpq $(name)+5, RIP+pt_regs; \
|
||||||
|
ja 1f; \
|
||||||
|
lfence; \
|
||||||
|
leaq pt_regs, %rdi; \
|
||||||
|
call handle_interrupted_saferet; \
|
||||||
|
1:
|
||||||
|
|
||||||
#ifdef __ASSEMBLY__
|
#ifdef __ASSEMBLY__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -204,6 +249,15 @@
|
|||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro HANDLE_INTR_SAFERET pt_regs
|
||||||
|
#ifdef CONFIG_MITIGATION_SRSO
|
||||||
|
ALTERNATIVE_2 "", \
|
||||||
|
__stringify(__HANDLE_INTR_SAFERET(srso_safe_ret, \pt_regs)), X86_FEATURE_SRSO, \
|
||||||
|
__stringify(__HANDLE_INTR_SAFERET(srso_alias_safe_ret, \pt_regs)), X86_FEATURE_SRSO_ALIAS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Macro to execute VERW instruction that mitigate transient data sampling
|
* Macro to execute VERW instruction that mitigate transient data sampling
|
||||||
* attacks such as MDS. On affected systems a microcode update overloaded VERW
|
* attacks such as MDS. On affected systems a microcode update overloaded VERW
|
||||||
@ -454,6 +508,11 @@ static inline void mds_idle_clear_cpu_buffers(void)
|
|||||||
mds_clear_cpu_buffers();
|
mds_clear_cpu_buffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct pt_regs;
|
||||||
|
void srso_safe_ret(void);
|
||||||
|
void srso_alias_safe_ret(void);
|
||||||
|
void handle_interrupted_saferet(struct pt_regs *regs);
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -3200,3 +3200,42 @@ ssize_t cpu_show_vmscape(struct device *dev, struct device_attribute *attr, char
|
|||||||
return cpu_show_common(dev, attr, buf, X86_BUG_VMSCAPE);
|
return cpu_show_common(dev, attr, buf, X86_BUG_VMSCAPE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_MITIGATION_SRSO
|
||||||
|
/*
|
||||||
|
* Called during exception/interrupt entry if interrupted during the
|
||||||
|
* safe-RET sequence. The safe-RET sequence consists of 3 instructions:
|
||||||
|
*
|
||||||
|
* CALL
|
||||||
|
* LEA 8(%RSP), %RSP
|
||||||
|
* RET
|
||||||
|
*
|
||||||
|
* An interrupt after the CALL or after the LEA could potentially lead
|
||||||
|
* to branch predictor poisoning and results in the sequence not being
|
||||||
|
* able to be safely resumed.
|
||||||
|
*
|
||||||
|
* Therefore, modify the regs state as if the remaining part of the
|
||||||
|
* safe-RET sequence executed so the interrupt returns back to the
|
||||||
|
* desired return target, instead of the to the safe-RET sequence.
|
||||||
|
*/
|
||||||
|
void noinstr handle_interrupted_saferet(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
unsigned long rip = regs->ip;
|
||||||
|
|
||||||
|
if (rip == (unsigned long) srso_safe_ret ||
|
||||||
|
rip == (unsigned long) srso_alias_safe_ret) {
|
||||||
|
/* Modify stack pointer as if LEA executed: */
|
||||||
|
regs->sp += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adjust registers as if RET executed:
|
||||||
|
*
|
||||||
|
* 1. Read the return address off the stack and into rIP:
|
||||||
|
*/
|
||||||
|
regs->ip = *(unsigned long *)(regs->sp);
|
||||||
|
|
||||||
|
/* 2. Pop rIP off the stack: */
|
||||||
|
regs->sp += 8;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_MITIGATION_SRSO */
|
||||||
|
|||||||
@ -75,7 +75,7 @@ SYM_CODE_START_NOALIGN(startup_64)
|
|||||||
mov %rsi, %r15
|
mov %rsi, %r15
|
||||||
|
|
||||||
/* Set up the stack for verify_cpu(), similar to initial_stack below */
|
/* Set up the stack for verify_cpu(), similar to initial_stack below */
|
||||||
leaq (__end_init_task - SIZEOF_PTREGS)(%rip), %rsp
|
leaq (__end_init_task - FRAME_SIZE)(%rip), %rsp
|
||||||
|
|
||||||
leaq _text(%rip), %rdi
|
leaq _text(%rip), %rdi
|
||||||
|
|
||||||
@ -402,10 +402,10 @@ SYM_DATA(initial_vc_handler, .quad handle_vc_boot_ghcb)
|
|||||||
#endif
|
#endif
|
||||||
GLOBAL(initial_stack)
|
GLOBAL(initial_stack)
|
||||||
/*
|
/*
|
||||||
* The SIZEOF_PTREGS gap is a convention which helps the in-kernel
|
* The FRAME_SIZE gap is a convention which helps the in-kernel
|
||||||
* unwinder reliably detect the end of the stack.
|
* unwinder reliably detect the end of the stack.
|
||||||
*/
|
*/
|
||||||
.quad init_thread_union + THREAD_SIZE - SIZEOF_PTREGS
|
.quad init_thread_union + THREAD_SIZE - FRAME_SIZE
|
||||||
__FINITDATA
|
__FINITDATA
|
||||||
|
|
||||||
__INIT
|
__INIT
|
||||||
|
|||||||
@ -14,6 +14,8 @@
|
|||||||
#include <asm/nospec-branch.h>
|
#include <asm/nospec-branch.h>
|
||||||
#include <asm/unwind_hints.h>
|
#include <asm/unwind_hints.h>
|
||||||
|
|
||||||
|
#undef RSP
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Must be relocatable PIC code callable as a C function, in particular
|
* Must be relocatable PIC code callable as a C function, in particular
|
||||||
* there must be a plain RET and not jump to return thunk.
|
* there must be a plain RET and not jump to return thunk.
|
||||||
|
|||||||
@ -91,10 +91,24 @@ SYM_FUNC_END(srso_alias_untrain_ret)
|
|||||||
|
|
||||||
.pushsection .text..__x86.rethunk_safe
|
.pushsection .text..__x86.rethunk_safe
|
||||||
SYM_CODE_START_NOALIGN(srso_alias_safe_ret)
|
SYM_CODE_START_NOALIGN(srso_alias_safe_ret)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tell objtool that those are not function pointers referenced by
|
||||||
|
* __HANDLE_INTR_SAFERET(). Below too.
|
||||||
|
*/
|
||||||
|
ANNOTATE_NOENDBR
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Safe-RET sequence. If you need to change it, adjust
|
||||||
|
* handle_interrupted_saferet() too.
|
||||||
|
*/
|
||||||
lea 8(%_ASM_SP), %_ASM_SP
|
lea 8(%_ASM_SP), %_ASM_SP
|
||||||
UNWIND_HINT_FUNC
|
UNWIND_HINT_FUNC
|
||||||
|
|
||||||
|
ANNOTATE_NOENDBR
|
||||||
ANNOTATE_UNRET_SAFE
|
ANNOTATE_UNRET_SAFE
|
||||||
ret
|
ret
|
||||||
|
/* End of Safe-RET sequence */
|
||||||
int3
|
int3
|
||||||
SYM_FUNC_END(srso_alias_safe_ret)
|
SYM_FUNC_END(srso_alias_safe_ret)
|
||||||
|
|
||||||
@ -129,8 +143,14 @@ SYM_CODE_START_LOCAL_NOALIGN(srso_untrain_ret)
|
|||||||
* the stack.
|
* the stack.
|
||||||
*/
|
*/
|
||||||
SYM_INNER_LABEL(srso_safe_ret, SYM_L_GLOBAL)
|
SYM_INNER_LABEL(srso_safe_ret, SYM_L_GLOBAL)
|
||||||
|
/*
|
||||||
|
* Safe-RET sequence. If you need to change it, adjust
|
||||||
|
* handle_interrupted_saferet() too.
|
||||||
|
*/
|
||||||
lea 8(%_ASM_SP), %_ASM_SP
|
lea 8(%_ASM_SP), %_ASM_SP
|
||||||
ret
|
ret
|
||||||
|
/* End of Safe-RET sequence */
|
||||||
|
|
||||||
int3
|
int3
|
||||||
int3
|
int3
|
||||||
/* end of movabs */
|
/* end of movabs */
|
||||||
|
|||||||
@ -1764,7 +1764,7 @@ CONFIG_BLK_DEV_NULL_BLK=m
|
|||||||
CONFIG_CDROM=m
|
CONFIG_CDROM=m
|
||||||
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
||||||
CONFIG_ZRAM=m
|
CONFIG_ZRAM=m
|
||||||
CONFIG_ZRAM_WRITEBACK=y
|
# CONFIG_ZRAM_WRITEBACK is not set
|
||||||
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
||||||
# CONFIG_BLK_DEV_DAC960 is not set
|
# CONFIG_BLK_DEV_DAC960 is not set
|
||||||
# CONFIG_BLK_DEV_UMEM is not set
|
# CONFIG_BLK_DEV_UMEM is not set
|
||||||
|
|||||||
@ -1782,7 +1782,7 @@ CONFIG_BLK_DEV_NULL_BLK=m
|
|||||||
CONFIG_CDROM=m
|
CONFIG_CDROM=m
|
||||||
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
||||||
CONFIG_ZRAM=m
|
CONFIG_ZRAM=m
|
||||||
CONFIG_ZRAM_WRITEBACK=y
|
# CONFIG_ZRAM_WRITEBACK is not set
|
||||||
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
||||||
# CONFIG_BLK_DEV_DAC960 is not set
|
# CONFIG_BLK_DEV_DAC960 is not set
|
||||||
# CONFIG_BLK_DEV_UMEM is not set
|
# CONFIG_BLK_DEV_UMEM is not set
|
||||||
|
|||||||
@ -1721,7 +1721,7 @@ CONFIG_CDROM=m
|
|||||||
# CONFIG_PARIDE is not set
|
# CONFIG_PARIDE is not set
|
||||||
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
||||||
CONFIG_ZRAM=m
|
CONFIG_ZRAM=m
|
||||||
CONFIG_ZRAM_WRITEBACK=y
|
# CONFIG_ZRAM_WRITEBACK is not set
|
||||||
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
||||||
# CONFIG_BLK_DEV_DAC960 is not set
|
# CONFIG_BLK_DEV_DAC960 is not set
|
||||||
# CONFIG_BLK_DEV_UMEM is not set
|
# CONFIG_BLK_DEV_UMEM is not set
|
||||||
|
|||||||
@ -1722,7 +1722,7 @@ CONFIG_CDROM=m
|
|||||||
# CONFIG_PARIDE is not set
|
# CONFIG_PARIDE is not set
|
||||||
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
||||||
CONFIG_ZRAM=m
|
CONFIG_ZRAM=m
|
||||||
CONFIG_ZRAM_WRITEBACK=y
|
# CONFIG_ZRAM_WRITEBACK is not set
|
||||||
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
||||||
# CONFIG_BLK_DEV_DAC960 is not set
|
# CONFIG_BLK_DEV_DAC960 is not set
|
||||||
# CONFIG_BLK_DEV_UMEM is not set
|
# CONFIG_BLK_DEV_UMEM is not set
|
||||||
|
|||||||
@ -848,6 +848,15 @@ int siw_proc_rresp(struct siw_qp *qp)
|
|||||||
}
|
}
|
||||||
mem_p = *mem;
|
mem_p = *mem;
|
||||||
|
|
||||||
|
if (unlikely(wqe->processed + srx->fpdu_part_rem > wqe->bytes)) {
|
||||||
|
siw_dbg_qp(qp, "rresp len: %d + %d > %d\n",
|
||||||
|
wqe->processed, srx->fpdu_part_rem, wqe->bytes);
|
||||||
|
wqe->wc_status = SIW_WC_LOC_LEN_ERR;
|
||||||
|
siw_init_terminate(qp, TERM_ERROR_LAYER_DDP,
|
||||||
|
DDP_ETYPE_TAGGED_BUF,
|
||||||
|
DDP_ECODE_T_BASE_BOUNDS, 0);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
bytes = min(srx->fpdu_part_rem, srx->skb_new);
|
bytes = min(srx->fpdu_part_rem, srx->skb_new);
|
||||||
|
|
||||||
if (mem_p->mem_obj == NULL)
|
if (mem_p->mem_obj == NULL)
|
||||||
|
|||||||
@ -3912,9 +3912,13 @@ static int bond_close(struct net_device *bond_dev)
|
|||||||
|
|
||||||
bond_work_cancel_all(bond);
|
bond_work_cancel_all(bond);
|
||||||
bond->send_peer_notif = 0;
|
bond->send_peer_notif = 0;
|
||||||
|
WRITE_ONCE(bond->recv_probe, NULL);
|
||||||
|
|
||||||
|
/* Wait for any in-flight RX handlers */
|
||||||
|
synchronize_net();
|
||||||
|
|
||||||
if (bond_is_lb(bond))
|
if (bond_is_lb(bond))
|
||||||
bond_alb_deinitialize(bond);
|
bond_alb_deinitialize(bond);
|
||||||
bond->recv_probe = NULL;
|
|
||||||
|
|
||||||
if (bond_uses_primary(bond)) {
|
if (bond_uses_primary(bond)) {
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
|
|||||||
@ -225,6 +225,12 @@ static void mana_hwc_rx_event_handler(void *ctx, u32 gdma_rxq_id,
|
|||||||
rq_base_addr = hwc_rxq->msg_buf->mem_info.dma_handle;
|
rq_base_addr = hwc_rxq->msg_buf->mem_info.dma_handle;
|
||||||
rx_req_idx = (sge->address - rq_base_addr) / hwc->max_req_msg_size;
|
rx_req_idx = (sge->address - rq_base_addr) / hwc->max_req_msg_size;
|
||||||
|
|
||||||
|
if (rx_req_idx >= hwc_rxq->msg_buf->num_reqs) {
|
||||||
|
dev_err(hwc->dev, "HWC RX: wrong rx_req_idx=%llu, num_reqs=%u\n",
|
||||||
|
rx_req_idx, hwc_rxq->msg_buf->num_reqs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
rx_req = &hwc_rxq->msg_buf->reqs[rx_req_idx];
|
rx_req = &hwc_rxq->msg_buf->reqs[rx_req_idx];
|
||||||
resp = (struct gdma_resp_hdr *)rx_req->buf_va;
|
resp = (struct gdma_resp_hdr *)rx_req->buf_va;
|
||||||
|
|
||||||
|
|||||||
@ -764,6 +764,9 @@ qede_tpa_rx_build_skb(struct qede_dev *edev,
|
|||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
|
||||||
skb = qede_build_skb(rxq, bd, len, pad);
|
skb = qede_build_skb(rxq, bd, len, pad);
|
||||||
|
if (unlikely(!skb))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
bd->page_offset += rxq->rx_buf_seg_size;
|
bd->page_offset += rxq->rx_buf_seg_size;
|
||||||
|
|
||||||
if (bd->page_offset == PAGE_SIZE) {
|
if (bd->page_offset == PAGE_SIZE) {
|
||||||
@ -811,6 +814,8 @@ qede_rx_build_skb(struct qede_dev *edev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
skb = qede_build_skb(rxq, bd, len, pad);
|
skb = qede_build_skb(rxq, bd, len, pad);
|
||||||
|
if (unlikely(!skb))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (unlikely(qede_realloc_rx_buffer(rxq, bd))) {
|
if (unlikely(qede_realloc_rx_buffer(rxq, bd))) {
|
||||||
/* Incr page ref count to reuse on allocation failure so
|
/* Incr page ref count to reuse on allocation failure so
|
||||||
|
|||||||
@ -528,15 +528,7 @@ static inline void smc_rcv(struct net_device *dev)
|
|||||||
* any other concurrent access and C would always interrupt B. But life
|
* any other concurrent access and C would always interrupt B. But life
|
||||||
* isn't that easy in a SMP world...
|
* isn't that easy in a SMP world...
|
||||||
*/
|
*/
|
||||||
#define smc_special_trylock(lock, flags) \
|
#define smc_special_trylock(lock, flags) spin_trylock_irqsave(lock, flags)
|
||||||
({ \
|
|
||||||
int __ret; \
|
|
||||||
local_irq_save(flags); \
|
|
||||||
__ret = spin_trylock(lock); \
|
|
||||||
if (!__ret) \
|
|
||||||
local_irq_restore(flags); \
|
|
||||||
__ret; \
|
|
||||||
})
|
|
||||||
#define smc_special_lock(lock, flags) spin_lock_irqsave(lock, flags)
|
#define smc_special_lock(lock, flags) spin_lock_irqsave(lock, flags)
|
||||||
#define smc_special_unlock(lock, flags) spin_unlock_irqrestore(lock, flags)
|
#define smc_special_unlock(lock, flags) spin_unlock_irqrestore(lock, flags)
|
||||||
#else
|
#else
|
||||||
@ -2293,7 +2285,7 @@ static int smc_drv_probe(struct platform_device *pdev)
|
|||||||
ret = try_toggle_control_gpio(&pdev->dev, &lp->power_gpio,
|
ret = try_toggle_control_gpio(&pdev->dev, &lp->power_gpio,
|
||||||
"power", 0, 0, 100);
|
"power", 0, 0, 100);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto out_free_netdev;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Optional reset GPIO configured? Minimum 100 ns reset needed
|
* Optional reset GPIO configured? Minimum 100 ns reset needed
|
||||||
@ -2302,7 +2294,7 @@ static int smc_drv_probe(struct platform_device *pdev)
|
|||||||
ret = try_toggle_control_gpio(&pdev->dev, &lp->reset_gpio,
|
ret = try_toggle_control_gpio(&pdev->dev, &lp->reset_gpio,
|
||||||
"reset", 0, 0, 100);
|
"reset", 0, 0, 100);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto out_free_netdev;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Need to wait for optional EEPROM to load, max 750 us according
|
* Need to wait for optional EEPROM to load, max 750 us according
|
||||||
|
|||||||
@ -3161,6 +3161,8 @@ static int nfs_open_permission_mask(int openflags)
|
|||||||
mask |= MAY_READ;
|
mask |= MAY_READ;
|
||||||
if ((openflags & O_ACCMODE) != O_RDONLY)
|
if ((openflags & O_ACCMODE) != O_RDONLY)
|
||||||
mask |= MAY_WRITE;
|
mask |= MAY_WRITE;
|
||||||
|
if (openflags & O_TRUNC)
|
||||||
|
mask |= MAY_WRITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
|
|||||||
@ -459,6 +459,10 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh,
|
|||||||
if (!p)
|
if (!p)
|
||||||
goto out_err_free;
|
goto out_err_free;
|
||||||
fh_count = be32_to_cpup(p);
|
fh_count = be32_to_cpup(p);
|
||||||
|
if (fh_count == 0) {
|
||||||
|
rc = -EINVAL;
|
||||||
|
goto out_err_free;
|
||||||
|
}
|
||||||
|
|
||||||
fls->mirror_array[i]->fh_versions =
|
fls->mirror_array[i]->fh_versions =
|
||||||
kcalloc(fh_count, sizeof(struct nfs_fh),
|
kcalloc(fh_count, sizeof(struct nfs_fh),
|
||||||
|
|||||||
@ -2063,11 +2063,11 @@ lookup_again:
|
|||||||
dprintk("%s wait for layoutreturn\n", __func__);
|
dprintk("%s wait for layoutreturn\n", __func__);
|
||||||
lseg = ERR_PTR(pnfs_prepare_to_retry_layoutget(lo));
|
lseg = ERR_PTR(pnfs_prepare_to_retry_layoutget(lo));
|
||||||
if (!IS_ERR(lseg)) {
|
if (!IS_ERR(lseg)) {
|
||||||
pnfs_put_layout_hdr(lo);
|
|
||||||
dprintk("%s retrying\n", __func__);
|
dprintk("%s retrying\n", __func__);
|
||||||
trace_pnfs_update_layout(ino, pos, count, iomode, lo,
|
trace_pnfs_update_layout(ino, pos, count, iomode, lo,
|
||||||
lseg,
|
lseg,
|
||||||
PNFS_UPDATE_LAYOUT_RETRY);
|
PNFS_UPDATE_LAYOUT_RETRY);
|
||||||
|
pnfs_put_layout_hdr(lo);
|
||||||
goto lookup_again;
|
goto lookup_again;
|
||||||
}
|
}
|
||||||
trace_pnfs_update_layout(ino, pos, count, iomode, lo, lseg,
|
trace_pnfs_update_layout(ino, pos, count, iomode, lo, lseg,
|
||||||
|
|||||||
@ -1058,14 +1058,14 @@ nfs4_decode_mp_ds_addr(struct net *net, struct xdr_stream *xdr, gfp_t gfp_flags)
|
|||||||
/* r_netid */
|
/* r_netid */
|
||||||
nlen = xdr_stream_decode_string_dup(xdr, &netid, XDR_MAX_NETOBJ,
|
nlen = xdr_stream_decode_string_dup(xdr, &netid, XDR_MAX_NETOBJ,
|
||||||
gfp_flags);
|
gfp_flags);
|
||||||
if (unlikely(nlen < 0))
|
if (unlikely(nlen <= 0))
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
/* r_addr: ip/ip6addr with port in dec octets - see RFC 5665 */
|
/* r_addr: ip/ip6addr with port in dec octets - see RFC 5665 */
|
||||||
/* port is ".ABC.DEF", 8 chars max */
|
/* port is ".ABC.DEF", 8 chars max */
|
||||||
rlen = xdr_stream_decode_string_dup(xdr, &buf, INET6_ADDRSTRLEN +
|
rlen = xdr_stream_decode_string_dup(xdr, &buf, INET6_ADDRSTRLEN +
|
||||||
IPV6_SCOPE_ID_LEN + 8, gfp_flags);
|
IPV6_SCOPE_ID_LEN + 8, gfp_flags);
|
||||||
if (unlikely(rlen < 0))
|
if (unlikely(rlen <= 0))
|
||||||
goto out_free_netid;
|
goto out_free_netid;
|
||||||
|
|
||||||
/* replace port '.' with '-' */
|
/* replace port '.' with '-' */
|
||||||
|
|||||||
@ -127,10 +127,7 @@ static __be32 nfsacld_proc_setacl(struct svc_rqst *rqstp)
|
|||||||
resp->status = fh_getattr(fh, &resp->stat);
|
resp->status = fh_getattr(fh, &resp->stat);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
/* argp->acl_{access,default} may have been allocated in
|
/* argp->acl_{access,default} are released in nfsaclsvc_release_setacl. */
|
||||||
nfssvc_decode_setaclargs. */
|
|
||||||
posix_acl_release(argp->acl_access);
|
|
||||||
posix_acl_release(argp->acl_default);
|
|
||||||
return rpc_success;
|
return rpc_success;
|
||||||
|
|
||||||
out_drop_lock:
|
out_drop_lock:
|
||||||
@ -308,6 +305,16 @@ static void nfsaclsvc_release_access(struct svc_rqst *rqstp)
|
|||||||
|
|
||||||
struct nfsd3_voidargs { int dummy; };
|
struct nfsd3_voidargs { int dummy; };
|
||||||
|
|
||||||
|
static void nfsaclsvc_release_setacl(struct svc_rqst *rqstp)
|
||||||
|
{
|
||||||
|
struct nfsd3_setaclargs *argp = rqstp->rq_argp;
|
||||||
|
struct nfsd_attrstat *resp = rqstp->rq_resp;
|
||||||
|
|
||||||
|
fh_put(&resp->fh);
|
||||||
|
posix_acl_release(argp->acl_access);
|
||||||
|
posix_acl_release(argp->acl_default);
|
||||||
|
}
|
||||||
|
|
||||||
#define ST 1 /* status*/
|
#define ST 1 /* status*/
|
||||||
#define AT 21 /* attributes */
|
#define AT 21 /* attributes */
|
||||||
#define pAT (1+AT) /* post attributes - conditional */
|
#define pAT (1+AT) /* post attributes - conditional */
|
||||||
@ -339,7 +346,7 @@ static const struct svc_procedure nfsd_acl_procedures2[5] = {
|
|||||||
.pc_func = nfsacld_proc_setacl,
|
.pc_func = nfsacld_proc_setacl,
|
||||||
.pc_decode = nfsaclsvc_decode_setaclargs,
|
.pc_decode = nfsaclsvc_decode_setaclargs,
|
||||||
.pc_encode = nfssvc_encode_attrstatres,
|
.pc_encode = nfssvc_encode_attrstatres,
|
||||||
.pc_release = nfssvc_release_attrstat,
|
.pc_release = nfsaclsvc_release_setacl,
|
||||||
.pc_argsize = sizeof(struct nfsd3_setaclargs),
|
.pc_argsize = sizeof(struct nfsd3_setaclargs),
|
||||||
.pc_ressize = sizeof(struct nfsd_attrstat),
|
.pc_ressize = sizeof(struct nfsd_attrstat),
|
||||||
.pc_cachetype = RC_NOCACHE,
|
.pc_cachetype = RC_NOCACHE,
|
||||||
|
|||||||
@ -114,10 +114,7 @@ out_drop_lock:
|
|||||||
out_errno:
|
out_errno:
|
||||||
resp->status = nfserrno(error);
|
resp->status = nfserrno(error);
|
||||||
out:
|
out:
|
||||||
/* argp->acl_{access,default} may have been allocated in
|
/* argp->acl_{access,default} are released in nfs3svc_release_setacl. */
|
||||||
nfs3svc_decode_setaclargs. */
|
|
||||||
posix_acl_release(argp->acl_access);
|
|
||||||
posix_acl_release(argp->acl_default);
|
|
||||||
return rpc_success;
|
return rpc_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,6 +218,16 @@ static void nfs3svc_release_getacl(struct svc_rqst *rqstp)
|
|||||||
|
|
||||||
struct nfsd3_voidargs { int dummy; };
|
struct nfsd3_voidargs { int dummy; };
|
||||||
|
|
||||||
|
static void nfs3svc_release_setacl(struct svc_rqst *rqstp)
|
||||||
|
{
|
||||||
|
struct nfsd3_setaclargs *argp = rqstp->rq_argp;
|
||||||
|
struct nfsd3_attrstat *resp = rqstp->rq_resp;
|
||||||
|
|
||||||
|
fh_put(&resp->fh);
|
||||||
|
posix_acl_release(argp->acl_access);
|
||||||
|
posix_acl_release(argp->acl_default);
|
||||||
|
}
|
||||||
|
|
||||||
#define ST 1 /* status*/
|
#define ST 1 /* status*/
|
||||||
#define AT 21 /* attributes */
|
#define AT 21 /* attributes */
|
||||||
#define pAT (1+AT) /* post attributes - conditional */
|
#define pAT (1+AT) /* post attributes - conditional */
|
||||||
@ -252,7 +259,7 @@ static const struct svc_procedure nfsd_acl_procedures3[3] = {
|
|||||||
.pc_func = nfsd3_proc_setacl,
|
.pc_func = nfsd3_proc_setacl,
|
||||||
.pc_decode = nfs3svc_decode_setaclargs,
|
.pc_decode = nfs3svc_decode_setaclargs,
|
||||||
.pc_encode = nfs3svc_encode_setaclres,
|
.pc_encode = nfs3svc_encode_setaclres,
|
||||||
.pc_release = nfs3svc_release_fhandle,
|
.pc_release = nfs3svc_release_setacl,
|
||||||
.pc_argsize = sizeof(struct nfsd3_setaclargs),
|
.pc_argsize = sizeof(struct nfsd3_setaclargs),
|
||||||
.pc_ressize = sizeof(struct nfsd3_attrstat),
|
.pc_ressize = sizeof(struct nfsd3_attrstat),
|
||||||
.pc_cachetype = RC_NOCACHE,
|
.pc_cachetype = RC_NOCACHE,
|
||||||
|
|||||||
@ -242,9 +242,7 @@ nfsd4_alloc_layout_stateid(struct nfsd4_compound_state *cstate,
|
|||||||
BUG_ON(!ls->ls_file);
|
BUG_ON(!ls->ls_file);
|
||||||
|
|
||||||
if (nfsd4_layout_setlease(ls)) {
|
if (nfsd4_layout_setlease(ls)) {
|
||||||
fput(ls->ls_file);
|
nfs4_put_stid(stp);
|
||||||
put_nfs4_file(fp);
|
|
||||||
kmem_cache_free(nfs4_layout_stateid_cache, ls);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md
|
sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md
|
||||||
kernel.centos,1,Red Hat,kernel-core,4.18.0-553.158.1.el8.x86_64,mailto:secalert@redhat.com
|
kernel.centos,1,Red Hat,kernel-core,4.18.0-553.159.1.el8.x86_64,mailto:secalert@redhat.com
|
||||||
|
|||||||
@ -296,6 +296,7 @@ static bool fib6_rule_suppress(struct fib_rule *rule, struct fib_lookup_arg *arg
|
|||||||
|
|
||||||
suppress_route:
|
suppress_route:
|
||||||
ip6_rt_put(rt);
|
ip6_rt_put(rt);
|
||||||
|
arg->result = NULL;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user