Linux 6.5.1
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.5.1 kernel.
All users of the 6.5 kernel series must upgrade.
The updated 6.5.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.5.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/admin-guide/kernel-parameters.txt | 4 -- Makefile | 2 - arch/arm/kernel/module-plts.c | 2 - arch/arm64/kernel/module-plts.c | 2 - arch/x86/include/asm/sections.h | 18 ------------ drivers/acpi/thermal.c | 6 ---- include/linux/ipv6.h | 15 ++-------- include/linux/moduleloader.h | 5 +++ include/net/sock.h | 1 kernel/kallsyms.c | 17 ++++------- kernel/kallsyms_selftest.c | 23 --------------- kernel/locking/lockdep.c | 36 +++++++++--------------- kernel/module/decompress.c | 4 +- kernel/module/main.c | 2 - net/dccp/ipv6.c | 1 net/dccp/ipv6.h | 4 -- net/ipv6/af_inet6.c | 4 +- net/ipv6/ping.c | 1 net/ipv6/raw.c | 1 net/ipv6/tcp_ipv6.c | 1 net/ipv6/udp.c | 1 net/ipv6/udplite.c | 1 net/l2tp/l2tp_ip6.c | 4 -- net/mptcp/protocol.c | 1 net/sctp/socket.c | 1 25 files changed, 50 insertions(+), 107 deletions(-)
Andrea Righi (1):
module/decompress: use vmalloc() for zstd decompression workspace
Eric Dumazet (1):
ipv6: remove hard coded limitation on ipv6_pinfo
Greg Kroah-Hartman (1):
Linux 6.5.1
Helge Deller (1):
lockdep: fix static memory detection even more
James Morse (3):
module: Expose module_init_layout_section()
arm64: module: Use module_init_layout_section() to spot init sections
ARM: module: Use module_init_layout_section() to spot init sections
Mario Limonciello (1):
ACPI: thermal: Drop nocrt parameter
Yonghong Song (1):
kallsyms: Fix kallsyms_selftest failure
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +0 -4
@@ -6275,10 +6275,6 @@ -1: disable all critical trip points in all thermal zones <degrees C>: override all critical trip points - thermal.nocrt= [HW,ACPI] - Set to disable actions on ACPI thermal zone - critical and hot trip points. - thermal.off= [HW,ACPI] 1: disable ACPI thermal control
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 5 -SUBLEVEL = 0 +SUBLEVEL = 1 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm/kernel/module-plts.c +1 -1
@@ -251,7 +251,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,/* sort by type and symbol index */ sort (rels, numrels,sizeof (Elf32_Rel), cmp_rel,NULL ); -if (strncmp (secstrings + dstsec->sh_name,".init" ,5 ) !=0 ) +if (!module_init_layout_section (secstrings + dstsec->sh_name)) core_plts +=count_plts (syms, dstsec->sh_addr, rels, numrels, s->sh_info);else
arch/arm64/kernel/module-plts.c +1 -1
@@ -339,7 +339,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,if (nents)sort (rels, nents,sizeof (Elf64_Rela), cmp_rela,NULL ); -if (!str_has_prefix (secstrings + dstsec->sh_name,".init" )) +if (!module_init_layout_section (secstrings + dstsec->sh_name)) core_plts +=count_plts (syms, rels, numrels, sechdrs[i].sh_info, dstsec);else
arch/x86/include/asm/sections.h +0 -18
@@ -2,8 +2,6 @@#ifndef _ASM_X86_SECTIONS_H#define _ASM_X86_SECTIONS_H -#define arch_is_kernel_initmem_freed arch_is_kernel_initmem_freed -#include <asm-generic/sections.h> #include <asm/extable.h>
@@ -18,20 +16,4 @@ extern char __end_of_kernel_reserve[];extern unsigned long _brk_start, _brk_end; -static inline bool arch_is_kernel_initmem_freed (unsigned long addr) -{ -/* -* If _brk_start has not been cleared, brk allocation is incomplete, -* and we can not make assumptions about its use. -*/ -if (_brk_start) -return 0 ; - -/* -* After brk allocation is complete, space between _brk_end and _end -* is available for allocation. -*/ -return addr >= _brk_end && addr < (unsigned long )&_end; -} -#endif /* _ASM_X86_SECTIONS_H */
drivers/acpi/thermal.c +1 -5
@@ -82,10 +82,6 @@ static int tzp;module_param (tzp, int,0444 );MODULE_PARM_DESC (tzp,"Thermal zone polling frequency, in 1/10 seconds." ); -static int nocrt; -module_param (nocrt, int,0 ); -MODULE_PARM_DESC (nocrt,"Set to take no action upon ACPI thermal zone critical trips points." ); -static int off;module_param (off, int,0 );MODULE_PARM_DESC (off,"Set to disable ACPI thermal support." );
@@ -1094,7 +1090,7 @@ static int thermal_act(const struct dmi_system_id *d) {static int thermal_nocrt (const struct dmi_system_id *d) {pr_notice ("%s detected: disabling all critical thermal trip point actions.\n" , d->ident); - nocrt =1 ; + crt =-1 ;return 0 ; }static int thermal_tzp (const struct dmi_system_id *d) {
include/linux/ipv6.h +4 -11
@@ -199,14 +199,7 @@ struct inet6_cork {u8 tclass; }; -/** -* struct ipv6_pinfo - ipv6 private area -* -* In the struct sock hierarchy (tcp6_sock, upd6_sock, etc) -* this _must_ be the last member, so that inet6_sk_generic -* is able to calculate its offset from the base struct sock -* by using the struct proto->slab_obj_size member. -acme -*/ +/* struct ipv6_pinfo - ipv6 private area */ struct ipv6_pinfo {struct in6_addr saddr;struct in6_pktinfo sticky_pktinfo;
@@ -306,19 +299,19 @@ struct raw6_sock {__u32 offset;/* checksum offset */ struct icmp6_filter filter;__u32 ip6mr_table; -/* ipv6_pinfo has to be the last member of raw6_sock, see inet6_sk_generic */ +struct ipv6_pinfo inet6; };struct udp6_sock {struct udp_sock udp; -/* ipv6_pinfo has to be the last member of udp6_sock, see inet6_sk_generic */ +struct ipv6_pinfo inet6; };struct tcp6_sock {struct tcp_sock tcp; -/* ipv6_pinfo has to be the last member of tcp6_sock, see inet6_sk_generic */ +struct ipv6_pinfo inet6; };
include/linux/moduleloader.h +5 -0
@@ -42,6 +42,11 @@ bool module_init_section(const char *name);*/ bool module_exit_section (const char *name); +/* Describes whether within_module_init() will consider this an init section +* or not. This behaviour changes with CONFIG_MODULE_UNLOAD. +*/ +bool module_init_layout_section (const char *sname); +/* * Apply the given relocation to the (simplified) ELF. Return -error * or 0.
include/net/sock.h +1 -0
@@ -1340,6 +1340,7 @@ struct proto {struct kmem_cache *slab;unsigned int obj_size; +unsigned int ipv6_pinfo_offset;slab_flags_t slab_flags;unsigned int useroffset;/* Usercopy region offset */ unsigned int usersize;/* Usercopy region size */
kernel/kallsyms.c +7 -10
@@ -188,16 +188,13 @@ static bool cleanup_symbol_name(char *s)static int compare_symbol_name (const char *name,char *namebuf) { -int ret; - - ret =strcmp (name, namebuf); -if (!ret) -return ret; - -if (cleanup_symbol_name (namebuf) && !strcmp (name, namebuf)) -return 0 ; - -return ret; +/* The kallsyms_seqs_of_names is sorted based on names after +* cleanup_symbol_name() (see scripts/kallsyms.c) if clang lto is enabled. +* To ensure correct bisection in kallsyms_lookup_names(), do +* cleanup_symbol_name(namebuf) before comparing name and namebuf. +*/ +cleanup_symbol_name (namebuf); +return strcmp (name, namebuf); }static unsigned int get_symbol_seq (int index)
kernel/kallsyms_selftest.c +1 -22
@@ -196,7 +196,7 @@ static bool match_cleanup_name(const char *s, const char *name)if (!IS_ENABLED (CONFIG_LTO_CLANG ))return false; - p =strchr (s,'.' ); + p =strstr (s,".llvm." );if (!p)return false;
@@ -344,27 +344,6 @@ static int test_kallsyms_basic_function(void) goto failed; } -/* -* The first '.' may be the initial letter, in which case the -* entire symbol name will be truncated to an empty string in -* cleanup_symbol_name(). Do not test these symbols. -* -* For example: -* cat /proc/kallsyms | awk '{print $3}' | grep -E "^\." | head -* .E_read_words -* .E_leading_bytes -* .E_trailing_bytes -* .E_write_words -* .E_copy -* .str.292.llvm.12122243386960820698 -* .str.24.llvm.12122243386960820698 -* .str.29.llvm.12122243386960820698 -* .str.75.llvm.12122243386960820698 -* .str.99.llvm.12122243386960820698 -*/ -if (IS_ENABLED (CONFIG_LTO_CLANG ) && !namebuf[0 ]) -continue ; - lookup_addr =kallsyms_lookup_name (namebuf);memset (stat,0 ,sizeof (*stat));
kernel/locking/lockdep.c +14 -22
@@ -819,34 +819,26 @@ static int very_verbose(struct lock_class *class)* Is this the address of a static object: */ #ifdef __KERNEL__ -/* -* Check if an address is part of freed initmem. After initmem is freed, -* memory can be allocated from it, and such allocations would then have -* addresses within the range [_stext, _end]. -*/ -#ifndef arch_is_kernel_initmem_freed -static int arch_is_kernel_initmem_freed (unsigned long addr) -{ -if (system_state <SYSTEM_FREEING_INITMEM ) -return 0 ; - -return init_section_contains ((void *)addr,1 ); -} -#endif -static int static_obj (const void *obj) { -unsigned long start = (unsigned long ) &_stext, - end = (unsigned long ) &_end, - addr = (unsigned long ) obj; +unsigned long addr = (unsigned long ) obj; -if (arch_is_kernel_initmem_freed (addr)) -return 0 ; +if (is_kernel_core_data (addr)) +return 1 ; + +/* +* keys are allowed in the __ro_after_init section. +*/ +if (is_kernel_rodata (addr)) +return 1 ;/* -* static variable? +* in initdata section and used during bootup only? +* NOTE: On some platforms the initdata section is +* outside of the _stext ... _end range. */ -if ((addr >= start) && (addr < end)) +if (system_state <SYSTEM_FREEING_INITMEM && +init_section_contains ((void *)addr,1 ))return 1 ;/*
kernel/module/decompress.c +2 -2
@@ -241,7 +241,7 @@ static ssize_t module_zstd_decompress(struct load_info *info, } wksp_size =zstd_dstream_workspace_bound (header.windowSize); - wksp =kmalloc (wksp_size,GFP_KERNEL ); + wksp =vmalloc (wksp_size);if (!wksp) { retval = -ENOMEM ; goto out;
@@ -284,7 +284,7 @@ static ssize_t module_zstd_decompress(struct load_info *info, retval = new_size; out: -kfree (wksp); +vfree (wksp); return retval; }#else
kernel/module/main.c +1 -1
@@ -1484,7 +1484,7 @@ long module_get_offset_and_type(struct module *mod, enum mod_mem_type type,return offset | mask; } -static bool module_init_layout_section (const char *sname) +bool module_init_layout_section (const char *sname) {#ifndef CONFIG_MODULE_UNLOAD if (module_exit_section (sname))
net/dccp/ipv6.c +1 -0
@@ -1056,6 +1056,7 @@ static struct proto dccp_v6_prot = { .orphan_count = &dccp_orphan_count, .max_header = MAX_DCCP_HEADER, .obj_size = sizeof(struct dccp6_sock), + .ipv6_pinfo_offset = offsetof(struct dccp6_sock, inet6), .slab_flags = SLAB_TYPESAFE_BY_RCU, .rsk_prot = &dccp6_request_sock_ops, .twsk_prot = &dccp6_timewait_sock_ops,
net/dccp/ipv6.h +0 -4
@@ -13,10 +13,6 @@struct dccp6_sock {struct dccp_sock dccp; -/* -* ipv6_pinfo has to be the last member of dccp6_sock, -* see inet6_sk_generic. -*/ struct ipv6_pinfo inet6; };
net/ipv6/af_inet6.c +2 -2
@@ -102,9 +102,9 @@ bool ipv6_mod_enabled(void) }EXPORT_SYMBOL_GPL (ipv6_mod_enabled); -static __inline__struct ipv6_pinfo *inet6_sk_generic (struct sock *sk) +static struct ipv6_pinfo *inet6_sk_generic (struct sock *sk) { -const int offset = sk->sk_prot->obj_size -sizeof (struct ipv6_pinfo ); +const int offset = sk->sk_prot->ipv6_pinfo_offset;return (struct ipv6_pinfo *)(((u8 *)sk) + offset); }
net/ipv6/ping.c +1 -0
@@ -215,6 +215,7 @@ struct proto pingv6_prot = { .get_port = ping_get_port, .put_port = ping_unhash, .obj_size = sizeof(struct raw6_sock), + .ipv6_pinfo_offset = offsetof(struct raw6_sock, inet6), };EXPORT_SYMBOL_GPL (pingv6_prot);
net/ipv6/raw.c +1 -0
@@ -1216,6 +1216,7 @@ struct proto rawv6_prot = { .hash = raw_hash_sk, .unhash = raw_unhash_sk, .obj_size = sizeof(struct raw6_sock), + .ipv6_pinfo_offset = offsetof(struct raw6_sock, inet6), .useroffset = offsetof(struct raw6_sock, filter), .usersize = sizeof_field(struct raw6_sock, filter), .h.raw_hash = &raw_v6_hashinfo,
net/ipv6/tcp_ipv6.c +1 -0
@@ -2176,6 +2176,7 @@ struct proto tcpv6_prot = { .sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_tcp_rmem), .max_header = MAX_TCP_HEADER, .obj_size = sizeof(struct tcp6_sock), + .ipv6_pinfo_offset = offsetof(struct tcp6_sock, inet6), .slab_flags = SLAB_TYPESAFE_BY_RCU, .twsk_prot = &tcp6_timewait_sock_ops, .rsk_prot = &tcp6_request_sock_ops,
net/ipv6/udp.c +1 -0
@@ -1802,6 +1802,7 @@ struct proto udpv6_prot = { .sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_udp_wmem_min), .sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_udp_rmem_min), .obj_size = sizeof(struct udp6_sock), + .ipv6_pinfo_offset = offsetof(struct udp6_sock, inet6), .h.udp_table = NULL, .diag_destroy = udp_abort, };
net/ipv6/udplite.c +1 -0
@@ -67,6 +67,7 @@ struct proto udplitev6_prot = { .sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_udp_wmem_min), .sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_udp_rmem_min), .obj_size = sizeof(struct udp6_sock), + .ipv6_pinfo_offset = offsetof(struct udp6_sock, inet6), .h.udp_table = &udplite_table, };
net/l2tp/l2tp_ip6.c +1 -3
@@ -36,9 +36,6 @@ struct l2tp_ip6_sock {u32 conn_id;u32 peer_conn_id; -/* ipv6_pinfo has to be the last member of l2tp_ip6_sock, see -* inet6_sk_generic -*/ struct ipv6_pinfo inet6; };
@@ -730,6 +727,7 @@ static struct proto l2tp_ip6_prot = { .hash = l2tp_ip6_hash, .unhash = l2tp_ip6_unhash, .obj_size = sizeof(struct l2tp_ip6_sock), + .ipv6_pinfo_offset = offsetof(struct l2tp_ip6_sock, inet6), };static const struct proto_ops l2tp_ip6_ops = {
net/mptcp/protocol.c +1 -0
@@ -3987,6 +3987,7 @@ int __init mptcp_proto_v6_init(void)strcpy (mptcp_v6_prot.name,"MPTCPv6" ); mptcp_v6_prot.slab =NULL ; mptcp_v6_prot.obj_size =sizeof (struct mptcp6_sock ); + mptcp_v6_prot.ipv6_pinfo_offset = offsetof(struct mptcp6_sock , np); err =proto_register (&mptcp_v6_prot,1 );if (err)
net/sctp/socket.c +1 -0
@@ -9732,6 +9732,7 @@ struct proto sctpv6_prot = { .unhash = sctp_unhash, .no_autobind = true, .obj_size = sizeof(struct sctp6_sock), + .ipv6_pinfo_offset = offsetof(struct sctp6_sock, inet6), .useroffset = offsetof(struct sctp6_sock, sctp.subscribe), .usersize = offsetof(struct sctp6_sock, sctp.initmsg) - offsetof(struct sctp6_sock, sctp.subscribe) +