Skip to content

Commit a618205

Browse files
authored
Merge pull request #241 from truenas/merge-upstream-6.18.13
NAS-139953 / 26.0.0-BETA.1 / Update Linux kernel to v6.18.13
2 parents 5d580e0 + d1b81fd commit a618205

File tree

348 files changed

+3543
-1636
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

348 files changed

+3543
-1636
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 6
33
PATCHLEVEL = 18
4-
SUBLEVEL = 9
4+
SUBLEVEL = 13
55
NAME = Baby Opossum Posse
66

77
ifndef EXTRAVERSION

arch/arm/include/asm/string.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ static inline void *memset32(uint32_t *p, uint32_t v, __kernel_size_t n)
4242
extern void *__memset64(uint64_t *, uint32_t low, __kernel_size_t, uint32_t hi);
4343
static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n)
4444
{
45-
return __memset64(p, v, n * 8, v >> 32);
45+
if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
46+
return __memset64(p, v, n * 8, v >> 32);
47+
else
48+
return __memset64(p, v >> 32, n * 8, v);
4649
}
4750

4851
/*

arch/arm64/boot/dts/mediatek/mt8183.dtsi

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1812,15 +1812,23 @@
18121812
#size-cells = <0>;
18131813

18141814
port@0 {
1815+
#address-cells = <1>;
1816+
#size-cells = <0>;
18151817
reg = <0>;
1816-
ovl_2l1_in: endpoint {
1818+
1819+
ovl_2l1_in: endpoint@1 {
1820+
reg = <1>;
18171821
remote-endpoint = <&mmsys_ep_ext>;
18181822
};
18191823
};
18201824

18211825
port@1 {
1826+
#address-cells = <1>;
1827+
#size-cells = <0>;
18221828
reg = <1>;
1823-
ovl_2l1_out: endpoint {
1829+
1830+
ovl_2l1_out: endpoint@1 {
1831+
reg = <1>;
18241832
remote-endpoint = <&rdma1_in>;
18251833
};
18261834
};
@@ -1872,15 +1880,23 @@
18721880
#size-cells = <0>;
18731881

18741882
port@0 {
1883+
#address-cells = <1>;
1884+
#size-cells = <0>;
18751885
reg = <0>;
1876-
rdma1_in: endpoint {
1886+
1887+
rdma1_in: endpoint@1 {
1888+
reg = <1>;
18771889
remote-endpoint = <&ovl_2l1_out>;
18781890
};
18791891
};
18801892

18811893
port@1 {
1894+
#address-cells = <1>;
1895+
#size-cells = <0>;
18821896
reg = <1>;
1883-
rdma1_out: endpoint {
1897+
1898+
rdma1_out: endpoint@1 {
1899+
reg = <1>;
18841900
remote-endpoint = <&dpi_in>;
18851901
};
18861902
};
@@ -2076,15 +2092,24 @@
20762092
#size-cells = <0>;
20772093

20782094
port@0 {
2095+
#address-cells = <1>;
2096+
#size-cells = <0>;
20792097
reg = <0>;
2080-
dpi_in: endpoint {
2098+
2099+
dpi_in: endpoint@1 {
2100+
reg = <1>;
20812101
remote-endpoint = <&rdma1_out>;
20822102
};
20832103
};
20842104

20852105
port@1 {
2106+
#address-cells = <1>;
2107+
#size-cells = <0>;
20862108
reg = <1>;
2087-
dpi_out: endpoint { };
2109+
2110+
dpi_out: endpoint@1 {
2111+
reg = <1>;
2112+
};
20882113
};
20892114
};
20902115
};

arch/loongarch/kernel/traps.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,10 +535,15 @@ asmlinkage void noinstr do_fpe(struct pt_regs *regs, unsigned long fcsr)
535535
asmlinkage void noinstr do_ade(struct pt_regs *regs)
536536
{
537537
irqentry_state_t state = irqentry_enter(regs);
538+
unsigned int esubcode = FIELD_GET(CSR_ESTAT_ESUBCODE, regs->csr_estat);
539+
540+
if ((esubcode == EXSUBCODE_ADEM) && fixup_exception(regs))
541+
goto out;
538542

539543
die_if_kernel("Kernel ade access", regs);
540544
force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *)regs->csr_badvaddr);
541545

546+
out:
542547
irqentry_exit(regs, state);
543548
}
544549

arch/loongarch/mm/cache.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ void cpu_cache_init(void)
160160

161161
static const pgprot_t protection_map[16] = {
162162
[VM_NONE] = __pgprot(_CACHE_CC | _PAGE_USER |
163-
_PAGE_PROTNONE | _PAGE_NO_EXEC |
164-
_PAGE_NO_READ),
163+
_PAGE_NO_EXEC | _PAGE_NO_READ |
164+
(_PAGE_PROTNONE ? : _PAGE_PRESENT)),
165165
[VM_READ] = __pgprot(_CACHE_CC | _PAGE_VALID |
166166
_PAGE_USER | _PAGE_PRESENT |
167167
_PAGE_NO_EXEC),
@@ -180,8 +180,8 @@ static const pgprot_t protection_map[16] = {
180180
[VM_EXEC | VM_WRITE | VM_READ] = __pgprot(_CACHE_CC | _PAGE_VALID |
181181
_PAGE_USER | _PAGE_PRESENT),
182182
[VM_SHARED] = __pgprot(_CACHE_CC | _PAGE_USER |
183-
_PAGE_PROTNONE | _PAGE_NO_EXEC |
184-
_PAGE_NO_READ),
183+
_PAGE_NO_EXEC | _PAGE_NO_READ |
184+
(_PAGE_PROTNONE ? : _PAGE_PRESENT)),
185185
[VM_SHARED | VM_READ] = __pgprot(_CACHE_CC | _PAGE_VALID |
186186
_PAGE_USER | _PAGE_PRESENT |
187187
_PAGE_NO_EXEC),

arch/loongarch/mm/kasan_init.c

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -40,39 +40,43 @@ static pgd_t kasan_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE);
4040
#define __pte_none(early, pte) (early ? pte_none(pte) : \
4141
((pte_val(pte) & _PFN_MASK) == (unsigned long)__pa(kasan_early_shadow_page)))
4242

43-
void *kasan_mem_to_shadow(const void *addr)
43+
static void *mem_to_shadow(const void *addr)
4444
{
45-
if (!kasan_enabled()) {
45+
unsigned long offset = 0;
46+
unsigned long maddr = (unsigned long)addr;
47+
unsigned long xrange = (maddr >> XRANGE_SHIFT) & 0xffff;
48+
49+
if (maddr >= FIXADDR_START)
4650
return (void *)(kasan_early_shadow_page);
47-
} else {
48-
unsigned long maddr = (unsigned long)addr;
49-
unsigned long xrange = (maddr >> XRANGE_SHIFT) & 0xffff;
50-
unsigned long offset = 0;
51-
52-
if (maddr >= FIXADDR_START)
53-
return (void *)(kasan_early_shadow_page);
54-
55-
maddr &= XRANGE_SHADOW_MASK;
56-
switch (xrange) {
57-
case XKPRANGE_CC_SEG:
58-
offset = XKPRANGE_CC_SHADOW_OFFSET;
59-
break;
60-
case XKPRANGE_UC_SEG:
61-
offset = XKPRANGE_UC_SHADOW_OFFSET;
62-
break;
63-
case XKPRANGE_WC_SEG:
64-
offset = XKPRANGE_WC_SHADOW_OFFSET;
65-
break;
66-
case XKVRANGE_VC_SEG:
67-
offset = XKVRANGE_VC_SHADOW_OFFSET;
68-
break;
69-
default:
70-
WARN_ON(1);
71-
return NULL;
72-
}
7351

74-
return (void *)((maddr >> KASAN_SHADOW_SCALE_SHIFT) + offset);
52+
maddr &= XRANGE_SHADOW_MASK;
53+
switch (xrange) {
54+
case XKPRANGE_CC_SEG:
55+
offset = XKPRANGE_CC_SHADOW_OFFSET;
56+
break;
57+
case XKPRANGE_UC_SEG:
58+
offset = XKPRANGE_UC_SHADOW_OFFSET;
59+
break;
60+
case XKPRANGE_WC_SEG:
61+
offset = XKPRANGE_WC_SHADOW_OFFSET;
62+
break;
63+
case XKVRANGE_VC_SEG:
64+
offset = XKVRANGE_VC_SHADOW_OFFSET;
65+
break;
66+
default:
67+
WARN_ON(1);
68+
return NULL;
7569
}
70+
71+
return (void *)((maddr >> KASAN_SHADOW_SCALE_SHIFT) + offset);
72+
}
73+
74+
void *kasan_mem_to_shadow(const void *addr)
75+
{
76+
if (kasan_enabled())
77+
return mem_to_shadow(addr);
78+
else
79+
return (void *)(kasan_early_shadow_page);
7680
}
7781

7882
const void *kasan_shadow_to_mem(const void *shadow_addr)
@@ -293,11 +297,8 @@ void __init kasan_init(void)
293297
/* Maps everything to a single page of zeroes */
294298
kasan_pgd_populate(KASAN_SHADOW_START, KASAN_SHADOW_END, NUMA_NO_NODE, true);
295299

296-
kasan_populate_early_shadow(kasan_mem_to_shadow((void *)VMALLOC_START),
297-
kasan_mem_to_shadow((void *)KFENCE_AREA_END));
298-
299-
/* Enable KASAN here before kasan_mem_to_shadow(). */
300-
kasan_init_generic();
300+
kasan_populate_early_shadow(mem_to_shadow((void *)VMALLOC_START),
301+
mem_to_shadow((void *)KFENCE_AREA_END));
301302

302303
/* Populate the linear mapping */
303304
for_each_mem_range(i, &pa_start, &pa_end) {
@@ -307,13 +308,13 @@ void __init kasan_init(void)
307308
if (start >= end)
308309
break;
309310

310-
kasan_map_populate((unsigned long)kasan_mem_to_shadow(start),
311-
(unsigned long)kasan_mem_to_shadow(end), NUMA_NO_NODE);
311+
kasan_map_populate((unsigned long)mem_to_shadow(start),
312+
(unsigned long)mem_to_shadow(end), NUMA_NO_NODE);
312313
}
313314

314315
/* Populate modules mapping */
315-
kasan_map_populate((unsigned long)kasan_mem_to_shadow((void *)MODULES_VADDR),
316-
(unsigned long)kasan_mem_to_shadow((void *)MODULES_END), NUMA_NO_NODE);
316+
kasan_map_populate((unsigned long)mem_to_shadow((void *)MODULES_VADDR),
317+
(unsigned long)mem_to_shadow((void *)MODULES_END), NUMA_NO_NODE);
317318
/*
318319
* KAsan may reuse the contents of kasan_early_shadow_pte directly, so we
319320
* should make sure that it maps the zero page read-only.
@@ -328,4 +329,5 @@ void __init kasan_init(void)
328329

329330
/* At this point kasan is fully initialized. Enable error messages */
330331
init_task.kasan_depth = 0;
332+
kasan_init_generic();
331333
}

arch/riscv/include/asm/uaccess.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,23 @@ static inline unsigned long __untagged_addr_remote(struct mm_struct *mm, unsigne
9797
*/
9898

9999
#ifdef CONFIG_CC_HAS_ASM_GOTO_OUTPUT
100+
/*
101+
* Use a temporary variable for the output of the asm goto to avoid a
102+
* triggering an LLVM assertion due to sign extending the output when
103+
* it is used in later function calls:
104+
* https://github.com/llvm/llvm-project/issues/143795
105+
*/
100106
#define __get_user_asm(insn, x, ptr, label) \
107+
do { \
108+
u64 __tmp; \
101109
asm_goto_output( \
102110
"1:\n" \
103111
" " insn " %0, %1\n" \
104112
_ASM_EXTABLE_UACCESS_ERR(1b, %l2, %0) \
105-
: "=&r" (x) \
106-
: "m" (*(ptr)) : : label)
113+
: "=&r" (__tmp) \
114+
: "m" (*(ptr)) : : label); \
115+
(x) = (__typeof__(x))(unsigned long)__tmp; \
116+
} while (0)
107117
#else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */
108118
#define __get_user_asm(insn, x, ptr, label) \
109119
do { \

arch/riscv/kernel/Makefile

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@
33
# Makefile for the RISC-V Linux kernel
44
#
55

6-
ifdef CONFIG_FTRACE
7-
CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE)
8-
CFLAGS_REMOVE_patch.o = $(CC_FLAGS_FTRACE)
9-
CFLAGS_REMOVE_sbi.o = $(CC_FLAGS_FTRACE)
10-
CFLAGS_REMOVE_return_address.o = $(CC_FLAGS_FTRACE)
11-
endif
126
CFLAGS_syscall_table.o += $(call cc-disable-warning, override-init)
137
CFLAGS_compat_syscall_table.o += $(call cc-disable-warning, override-init)
148

@@ -24,7 +18,6 @@ CFLAGS_sbi_ecall.o := -mcmodel=medany
2418
ifdef CONFIG_FTRACE
2519
CFLAGS_REMOVE_alternative.o = $(CC_FLAGS_FTRACE)
2620
CFLAGS_REMOVE_cpufeature.o = $(CC_FLAGS_FTRACE)
27-
CFLAGS_REMOVE_sbi_ecall.o = $(CC_FLAGS_FTRACE)
2821
endif
2922
ifdef CONFIG_RELOCATABLE
3023
CFLAGS_alternative.o += -fno-pie
@@ -43,6 +36,14 @@ CFLAGS_sbi_ecall.o += -D__NO_FORTIFY
4336
endif
4437
endif
4538

39+
ifdef CONFIG_FTRACE
40+
CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE)
41+
CFLAGS_REMOVE_patch.o = $(CC_FLAGS_FTRACE)
42+
CFLAGS_REMOVE_sbi.o = $(CC_FLAGS_FTRACE)
43+
CFLAGS_REMOVE_return_address.o = $(CC_FLAGS_FTRACE)
44+
CFLAGS_REMOVE_sbi_ecall.o = $(CC_FLAGS_FTRACE)
45+
endif
46+
4647
always-$(KBUILD_BUILTIN) += vmlinux.lds
4748

4849
obj-y += head.o

arch/riscv/kernel/traps.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,10 @@ void do_trap_ecall_u(struct pt_regs *regs)
339339

340340
add_random_kstack_offset();
341341

342-
if (syscall >= 0 && syscall < NR_syscalls)
342+
if (syscall >= 0 && syscall < NR_syscalls) {
343+
syscall = array_index_nospec(syscall, NR_syscalls);
343344
syscall_handler(regs, syscall);
345+
}
344346

345347
/*
346348
* Ultimately, this value will get limited by KSTACK_OFFSET_MAX(),

arch/x86/coco/sev/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ UBSAN_SANITIZE_noinstr.o := n
88
# GCC may fail to respect __no_sanitize_address or __no_kcsan when inlining
99
KASAN_SANITIZE_noinstr.o := n
1010
KCSAN_SANITIZE_noinstr.o := n
11+
12+
GCOV_PROFILE_noinstr.o := n

0 commit comments

Comments
 (0)