commit:     85da7abb9dc4fd9a0f16d42dd530a7134eba7f67
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sat Sep  2 09:53:56 2023 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sat Sep  2 09:53:56 2023 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=85da7abb

Linux patch 6.5.1

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README            |   4 +
 1000_linux-6.5.1.patch | 489 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 493 insertions(+)

diff --git a/0000_README b/0000_README
index 1efa027c..f7da0ce2 100644
--- a/0000_README
+++ b/0000_README
@@ -43,6 +43,10 @@ EXPERIMENTAL
 Individual Patch Descriptions:
 --------------------------------------------------------------------------
 
+Patch:  1000_linux-6.5.1.patch
+From:   https://www.kernel.org
+Desc:   Linux 6.5.1
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1000_linux-6.5.1.patch b/1000_linux-6.5.1.patch
new file mode 100644
index 00000000..0323b844
--- /dev/null
+++ b/1000_linux-6.5.1.patch
@@ -0,0 +1,489 @@
+diff --git a/Documentation/admin-guide/kernel-parameters.txt 
b/Documentation/admin-guide/kernel-parameters.txt
+index 722b6eca2e938..23ebe34ff901e 100644
+--- a/Documentation/admin-guide/kernel-parameters.txt
++++ b/Documentation/admin-guide/kernel-parameters.txt
+@@ -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
+ 
+diff --git a/Makefile b/Makefile
+index 2fdd8b40b7e04..062b9694e0547 100644
+--- a/Makefile
++++ b/Makefile
+@@ -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
+ 
+diff --git a/arch/arm/kernel/module-plts.c b/arch/arm/kernel/module-plts.c
+index f5a43fd8c1639..da2ee8d6ef1a7 100644
+--- a/arch/arm/kernel/module-plts.c
++++ b/arch/arm/kernel/module-plts.c
+@@ -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
+diff --git a/arch/arm64/kernel/module-plts.c b/arch/arm64/kernel/module-plts.c
+index ad02058756b50..bd69a4e7cd605 100644
+--- a/arch/arm64/kernel/module-plts.c
++++ b/arch/arm64/kernel/module-plts.c
+@@ -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
+diff --git a/arch/x86/include/asm/sections.h b/arch/x86/include/asm/sections.h
+index a6e8373a5170f..3fa87e5e11aba 100644
+--- a/arch/x86/include/asm/sections.h
++++ b/arch/x86/include/asm/sections.h
+@@ -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 */
+diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
+index f9f6ebb08fdb7..3163a40f02e30 100644
+--- a/drivers/acpi/thermal.c
++++ b/drivers/acpi/thermal.c
+@@ -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) {
+diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
+index 839247a4f48ea..660012997f54c 100644
+--- a/include/linux/ipv6.h
++++ b/include/linux/ipv6.h
+@@ -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;
+ };
+ 
+diff --git a/include/linux/moduleloader.h b/include/linux/moduleloader.h
+index 03be088fb4396..001b2ce83832e 100644
+--- a/include/linux/moduleloader.h
++++ b/include/linux/moduleloader.h
+@@ -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.
+diff --git a/include/net/sock.h b/include/net/sock.h
+index 690e22139543f..e8927f2d47a3c 100644
+--- a/include/net/sock.h
++++ b/include/net/sock.h
+@@ -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 */
+diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
+index 016d997131d43..e12d26c10dbab 100644
+--- a/kernel/kallsyms.c
++++ b/kernel/kallsyms.c
+@@ -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)
+diff --git a/kernel/kallsyms_selftest.c b/kernel/kallsyms_selftest.c
+index a2e3745d15c47..e05ddc33a7529 100644
+--- a/kernel/kallsyms_selftest.c
++++ b/kernel/kallsyms_selftest.c
+@@ -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));
+diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
+index 111607d91489c..e85b5ad3e2069 100644
+--- a/kernel/locking/lockdep.c
++++ b/kernel/locking/lockdep.c
+@@ -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;
+ 
+       /*
+diff --git a/kernel/module/decompress.c b/kernel/module/decompress.c
+index 8a5d6d63b06cb..87440f714c0ca 100644
+--- a/kernel/module/decompress.c
++++ b/kernel/module/decompress.c
+@@ -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
+diff --git a/kernel/module/main.c b/kernel/module/main.c
+index 59b1d067e5289..ff7cc4e292990 100644
+--- a/kernel/module/main.c
++++ b/kernel/module/main.c
+@@ -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))
+diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
+index d29d1163203d9..686090bc59451 100644
+--- a/net/dccp/ipv6.c
++++ b/net/dccp/ipv6.c
+@@ -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,
+diff --git a/net/dccp/ipv6.h b/net/dccp/ipv6.h
+index 7e4c2a3b322b5..c5d14c48def17 100644
+--- a/net/dccp/ipv6.h
++++ b/net/dccp/ipv6.h
+@@ -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;
+ };
+ 
+diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
+index 5d593ddc0347e..9f9c4b838664a 100644
+--- a/net/ipv6/af_inet6.c
++++ b/net/ipv6/af_inet6.c
+@@ -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);
+ }
+diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
+index c2c291827a2ce..1b27728349725 100644
+--- a/net/ipv6/ping.c
++++ b/net/ipv6/ping.c
+@@ -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);
+ 
+diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
+index 49381f35b623c..ea16734f5e1f7 100644
+--- a/net/ipv6/raw.c
++++ b/net/ipv6/raw.c
+@@ -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,
+diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
+index 6e86721e1cdbb..3a88545a265d6 100644
+--- a/net/ipv6/tcp_ipv6.c
++++ b/net/ipv6/tcp_ipv6.c
+@@ -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,
+diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
+index f787e6b8424c7..486d893b8e3ca 100644
+--- a/net/ipv6/udp.c
++++ b/net/ipv6/udp.c
+@@ -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,
+ };
+diff --git a/net/ipv6/udplite.c b/net/ipv6/udplite.c
+index 8e010d07917a7..267d491e97075 100644
+--- a/net/ipv6/udplite.c
++++ b/net/ipv6/udplite.c
+@@ -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,
+ };
+ 
+diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
+index ff78217f0cb12..ed8ebb6f59097 100644
+--- a/net/l2tp/l2tp_ip6.c
++++ b/net/l2tp/l2tp_ip6.c
+@@ -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 = {
+diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
+index d80658547836f..0efc52c640b59 100644
+--- a/net/mptcp/protocol.c
++++ b/net/mptcp/protocol.c
+@@ -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)
+diff --git a/net/sctp/socket.c b/net/sctp/socket.c
+index 76f1bce49a8e7..423dc400992ba 100644
+--- a/net/sctp/socket.c
++++ b/net/sctp/socket.c
+@@ -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) +

Reply via email to