summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys-kernel/linux-image-redcore/Manifest2
-rw-r--r--sys-kernel/linux-image-redcore/files/5.11-amd_iommu_init_info.patch13
-rw-r--r--sys-kernel/linux-image-redcore/files/5.11-linux-hardened.patch145
-rw-r--r--sys-kernel/linux-image-redcore/linux-image-redcore-5.11.22.ebuild (renamed from sys-kernel/linux-image-redcore/linux-image-redcore-5.11.17.ebuild)1
-rw-r--r--sys-kernel/linux-sources-redcore/Manifest2
-rw-r--r--sys-kernel/linux-sources-redcore/files/5.11-amd_iommu_init_info.patch13
-rw-r--r--sys-kernel/linux-sources-redcore/files/5.11-linux-hardened.patch145
-rw-r--r--sys-kernel/linux-sources-redcore/linux-sources-redcore-5.11.22.ebuild (renamed from sys-kernel/linux-sources-redcore/linux-sources-redcore-5.11.17.ebuild)1
8 files changed, 160 insertions, 162 deletions
diff --git a/sys-kernel/linux-image-redcore/Manifest b/sys-kernel/linux-image-redcore/Manifest
index 5a30db60..49b4a78a 100644
--- a/sys-kernel/linux-image-redcore/Manifest
+++ b/sys-kernel/linux-image-redcore/Manifest
@@ -1 +1 @@
-DIST linux-5.11.17.tar.xz 117653736 BLAKE2B 76226bb9e071620929fbdb4bc5ca08be1dab748dc337505ce9a377df0cf0612f6e57d0003bde3d312506a354d02fbc9f4e4be12269daa576969d52fabca13403 SHA512 105e7be115a50524f4bc535ae47ab556aff57e2c5329297b88b80bfabc236ffc0a85afaf26a25eb6e0a6db15528f8a077a312c449f4dc0c60b9648c68c5ba40b
+DIST linux-5.11.22.tar.xz 117681288 BLAKE2B 21e1a7c6400c6997ec0a66a4ccd7c3789ad99e9319e8f412a5e26f44b309ca6581077f84fd17ebf265089956ed2625acce12d6d6d9f246690c6acd6b21279840 SHA512 1f61c1d9e2ed3095110105b6f33565343e762c7e5e5f9406a3a5884b78ca8ff8e31bb5da2880b45b92ca3adb0539dd69597791de87a41369cf77e325abfae35c
diff --git a/sys-kernel/linux-image-redcore/files/5.11-amd_iommu_init_info.patch b/sys-kernel/linux-image-redcore/files/5.11-amd_iommu_init_info.patch
deleted file mode 100644
index 8b17c2f6..00000000
--- a/sys-kernel/linux-image-redcore/files/5.11-amd_iommu_init_info.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
-index c652f16eb702..b52ea079d555 100644
---- a/drivers/iommu/amd/init.c
-+++ b/drivers/iommu/amd/init.c
-@@ -1680,7 +1680,7 @@ static void init_iommu_perf_ctr(struct amd_iommu *iommu)
- return;
-
- pc_false:
-- pci_err(pdev, "Unable to read/write to IOMMU perf counter.\n");
-+ pci_info(pdev, "Unable to read/write to IOMMU perf counter.\n");
- amd_iommu_pc_present = false;
- return;
- }
diff --git a/sys-kernel/linux-image-redcore/files/5.11-linux-hardened.patch b/sys-kernel/linux-image-redcore/files/5.11-linux-hardened.patch
index 2fb3da83..7b733b3c 100644
--- a/sys-kernel/linux-image-redcore/files/5.11-linux-hardened.patch
+++ b/sys-kernel/linux-image-redcore/files/5.11-linux-hardened.patch
@@ -1,5 +1,5 @@
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index a10b545c2070..b3c97490d872 100644
+index b537a9608895..8bd1293345f9 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -518,17 +518,6 @@
@@ -20,7 +20,7 @@ index a10b545c2070..b3c97490d872 100644
cio_ignore= [S390]
See Documentation/s390/common_io.rst for details.
clk_ignore_unused
-@@ -3573,6 +3562,11 @@
+@@ -3574,6 +3563,11 @@
the specified number of seconds. This is to be used if
your oopses keep scrolling off the screen.
@@ -101,6 +101,19 @@ index 1b7f8debada6..05f722d7d065 100644
tcp_slow_start_after_idle - BOOLEAN
If set, provide RFC2861 behavior and time out the congestion
window after an idle period. An idle period is defined at
+diff --git a/Makefile b/Makefile
+index ff363cc6b11f..0f9ed687ebf6 100644
+--- a/Makefile
++++ b/Makefile
+@@ -2,7 +2,7 @@
+ VERSION = 5
+ PATCHLEVEL = 11
+ SUBLEVEL = 22
+-EXTRAVERSION =
++EXTRAVERSION = -hardened1
+ NAME = 💕 Valentine's Day Edition 💕
+
+ # *DOCUMENTATION*
diff --git a/arch/Kconfig b/arch/Kconfig
index 24862d15f3a3..ea5030c6dc46 100644
--- a/arch/Kconfig
@@ -188,10 +201,10 @@ index 8d1c8dcb87fd..32c1609a1158 100644
#ifdef __AARCH64EB__
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 21f851179ff0..258df85d5085 100644
+index 4960c6e1b082..a70cb1b4ebcc 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
-@@ -1196,8 +1196,7 @@ config VM86
+@@ -1197,8 +1197,7 @@ config VM86
default X86_LEGACY_VM86
config X86_16BIT
@@ -201,7 +214,7 @@ index 21f851179ff0..258df85d5085 100644
depends on MODIFY_LDT_SYSCALL
help
This option is required by programs like Wine to run 16-bit
-@@ -2316,7 +2315,7 @@ config COMPAT_VDSO
+@@ -2317,7 +2316,7 @@ config COMPAT_VDSO
choice
prompt "vsyscall table for legacy applications"
depends on X86_64
@@ -210,7 +223,7 @@ index 21f851179ff0..258df85d5085 100644
help
Legacy user code that does not know how to find the vDSO expects
to be able to issue three syscalls by calling fixed addresses in
-@@ -2412,8 +2411,7 @@ config CMDLINE_OVERRIDE
+@@ -2413,8 +2412,7 @@ config CMDLINE_OVERRIDE
be set to 'N' under normal conditions.
config MODIFY_LDT_SYSCALL
@@ -340,7 +353,7 @@ index 66bdfe838d61..d7a51942f782 100644
-extern unsigned long align_vdso_addr(unsigned long);
#endif /* _ASM_X86_ELF_H */
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index 35ad8480c464..edaeeab9df4b 100644
+index 25148ebd3634..1a41d2c767a1 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -399,6 +399,7 @@ EXPORT_SYMBOL_GPL(native_write_cr4);
@@ -468,7 +481,7 @@ index 569ac1d57f55..044d88da4aee 100644
native_write_cr4(cr4 ^ X86_CR4_PGE);
/* write old PGE again and flush TLBs */
diff --git a/block/blk-mq.c b/block/blk-mq.c
-index f285a9123a8b..93d6bfe33166 100644
+index 88c843fa8d13..cb000105ab46 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -571,7 +571,7 @@ EXPORT_SYMBOL(blk_mq_end_request);
@@ -535,7 +548,7 @@ index e15cd6b5bb99..930be8d5d81d 100644
A pseudo terminal (PTY) is a software device consisting of two
halves: a master and a slave. The slave device behaves identical to
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
-index 5fd87941ac71..ca442c544a7b 100644
+index 51bc4e5a4020..4248568d2d0b 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -171,6 +171,7 @@ static void free_tty_struct(struct tty_struct *tty)
@@ -587,7 +600,7 @@ index 18e874b0441e..fc7a3a9aa72a 100644
obj-$(CONFIG_USB) += usbcore.o
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 7f71218cc1e5..b5992466936e 100644
+index 13fe37fbbd2c..438ca30f31f4 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -5115,6 +5115,12 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
@@ -794,10 +807,10 @@ index dd188c7996b3..f1f14808bc8f 100644
+
+ If unsure, say N.
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
-index d58b8f2bf9d0..6e84b1cd4c4e 100644
+index ce274d4e6700..2fca35bda8c7 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
-@@ -2120,7 +2120,9 @@ static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags,
+@@ -2124,7 +2124,9 @@ static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags,
static struct file_system_type ovl_fs_type = {
.owner = THIS_MODULE,
.name = "overlay",
@@ -820,7 +833,7 @@ index c930001056f9..6a0a51b3f593 100644
Exports the dump image of crashed kernel in ELF format.
diff --git a/fs/stat.c b/fs/stat.c
-index dacecdda2e79..14173d0f777d 100644
+index 1196af4d1ea0..4291a2c694e5 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -43,8 +43,13 @@ void generic_fillattr(struct inode *inode, struct kstat *stat)
@@ -839,9 +852,9 @@ index dacecdda2e79..14173d0f777d 100644
stat->ctime = inode->i_ctime;
stat->blksize = i_blocksize(inode);
stat->blocks = inode->i_blocks;
-@@ -83,9 +88,14 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
- if (IS_DAX(inode))
- stat->attributes |= STATX_ATTR_DAX;
+@@ -91,9 +96,14 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
+ stat->attributes_mask |= (STATX_ATTR_AUTOMOUNT |
+ STATX_ATTR_DAX);
- if (inode->i_op->getattr)
- return inode->i_op->getattr(path, stat, request_mask,
@@ -1022,7 +1035,7 @@ index 2b5b64256cf4..8cdce21dce0f 100644
const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent);
const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj);
diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 992c18d5e85d..19d0c045a94c 100644
+index ad8395cf1262..c33dd29da690 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -775,7 +775,7 @@ static inline int is_vmalloc_or_module_addr(const void *x)
@@ -1077,10 +1090,10 @@ index 5e76af742c80..9a6c682ec127 100644
extern phys_addr_t per_cpu_ptr_to_phys(void *addr);
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
-index 419a4d77de00..886b8a9b554e 100644
+index 7724c6842bea..b41be5819a85 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
-@@ -1316,6 +1316,14 @@ static inline int perf_is_paranoid(void)
+@@ -1317,6 +1317,14 @@ static inline int perf_is_paranoid(void)
return sysctl_perf_event_paranoid > -1;
}
@@ -1225,10 +1238,10 @@ index d6a41841b93e..f7f3d138b4e6 100644
#endif
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
-index 64cf8ebdc4ec..bd29529ac188 100644
+index f6c5f784be5a..07d194f23587 100644
--- a/include/linux/user_namespace.h
+++ b/include/linux/user_namespace.h
-@@ -105,6 +105,8 @@ void dec_ucount(struct ucounts *ucounts, enum ucount_type type);
+@@ -108,6 +108,8 @@ void dec_ucount(struct ucounts *ucounts, enum ucount_type type);
#ifdef CONFIG_USER_NS
@@ -1237,7 +1250,7 @@ index 64cf8ebdc4ec..bd29529ac188 100644
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
{
if (ns)
-@@ -138,6 +140,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
+@@ -141,6 +143,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
struct ns_common *ns_get_owner(struct ns_common *ns);
#else
@@ -1486,7 +1499,7 @@ index de7eac903a2a..5602178f3d21 100644
/**
diff --git a/kernel/events/core.c b/kernel/events/core.c
-index 8425dbc1d239..7ce0ad5cead5 100644
+index 41bec6d7e06e..26dcc2352302 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -410,8 +410,13 @@ static cpumask_var_t perf_online_mask;
@@ -1503,7 +1516,7 @@ index 8425dbc1d239..7ce0ad5cead5 100644
/* Minimum for 512 kiB + 1 user control page */
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
-@@ -11783,7 +11788,7 @@ SYSCALL_DEFINE5(perf_event_open,
+@@ -11802,7 +11807,7 @@ SYSCALL_DEFINE5(perf_event_open,
return -EINVAL;
/* Do we allow access to perf_event_open(2) ? */
@@ -1562,10 +1575,10 @@ index aa897c3f2e92..d8976886fd68 100644
struct rcu_head *next, *list;
unsigned long flags;
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
-index ce17b8477442..f586f36c2627 100644
+index e7d8a0d8ea7c..28f68c219bad 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
-@@ -2782,7 +2782,7 @@ static __latent_entropy void rcu_core(void)
+@@ -2781,7 +2781,7 @@ static __latent_entropy void rcu_core(void)
queue_work_on(rdp->cpu, rcu_gp_wq, &rdp->strict_work);
}
@@ -1575,10 +1588,10 @@ index ce17b8477442..f586f36c2627 100644
rcu_core();
}
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index bbc78794224a..bbe4843a2a30 100644
+index 10b8b133145d..b2009c0210b2 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
-@@ -10686,7 +10686,7 @@ static int newidle_balance(struct rq *this_rq, struct rq_flags *rf)
+@@ -10708,7 +10708,7 @@ static int newidle_balance(struct rq *this_rq, struct rq_flags *rf)
* run_rebalance_domains is triggered when needed from the scheduler tick.
* Also triggered for nohz idle balancing (with nohz_balancing_kick set).
*/
@@ -1880,7 +1893,7 @@ index 8dbc008f8942..4fc9b8ece448 100644
struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index af612945a4d0..95c54dae4aa1 100644
+index 9a4b980d695b..4388ca13ea3f 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -21,6 +21,13 @@
@@ -1991,7 +2004,7 @@ index ea53b30cf483..5343bbeea5f8 100644
enum kobj_ns_type type = ops->type;
int error;
diff --git a/lib/nlattr.c b/lib/nlattr.c
-index 5b6116e81f9f..b26a8e43cf42 100644
+index 1d051ef66afe..4dd3c165d1da 100644
--- a/lib/nlattr.c
+++ b/lib/nlattr.c
@@ -790,6 +790,8 @@ int nla_memcpy(void *dest, const struct nlattr *src, int count)
@@ -2004,7 +2017,7 @@ index 5b6116e81f9f..b26a8e43cf42 100644
if (count > minlen)
memset(dest + minlen, 0, count - minlen);
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
-index 3b53c73580c5..3490a316f52d 100644
+index 455f8271fd49..7c3a017827e5 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -821,7 +821,7 @@ static char *ptr_to_id(char *buf, char *end, const void *ptr,
@@ -2061,7 +2074,7 @@ index dc7206032387..62fcbf1515bd 100644
mm->brk = brk;
goto success;
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index a723e81a5da2..5a9f4333c597 100644
+index d65d4481c40c..888061adc4a8 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -72,6 +72,7 @@
@@ -2088,7 +2101,7 @@ index a723e81a5da2..5a9f4333c597 100644
#ifdef CONFIG_GCC_PLUGIN_LATENT_ENTROPY
volatile unsigned long latent_entropy __latent_entropy;
EXPORT_SYMBOL(latent_entropy);
-@@ -1548,6 +1558,25 @@ static void __free_pages_ok(struct page *page, unsigned int order,
+@@ -1552,6 +1562,25 @@ static void __free_pages_ok(struct page *page, unsigned int order,
local_irq_restore(flags);
}
@@ -2114,7 +2127,7 @@ index a723e81a5da2..5a9f4333c597 100644
void __free_pages_core(struct page *page, unsigned int order)
{
unsigned int nr_pages = 1 << order;
-@@ -1567,7 +1596,6 @@ void __free_pages_core(struct page *page, unsigned int order)
+@@ -1571,7 +1600,6 @@ void __free_pages_core(struct page *page, unsigned int order)
}
__ClearPageReserved(p);
set_page_count(p, 0);
@@ -2122,7 +2135,7 @@ index a723e81a5da2..5a9f4333c597 100644
atomic_long_add(nr_pages, &page_zone(page)->managed_pages);
/*
-@@ -1634,6 +1662,7 @@ void __init memblock_free_pages(struct page *page, unsigned long pfn,
+@@ -1638,6 +1666,7 @@ void __init memblock_free_pages(struct page *page, unsigned long pfn,
{
if (early_page_uninitialised(pfn))
return;
@@ -2130,7 +2143,7 @@ index a723e81a5da2..5a9f4333c597 100644
__free_pages_core(page, order);
}
-@@ -1725,6 +1754,7 @@ static void __init deferred_free_range(unsigned long pfn,
+@@ -1729,6 +1758,7 @@ static void __init deferred_free_range(unsigned long pfn,
if (nr_pages == pageblock_nr_pages &&
(pfn & (pageblock_nr_pages - 1)) == 0) {
set_pageblock_migratetype(page, MIGRATE_MOVABLE);
@@ -2138,7 +2151,7 @@ index a723e81a5da2..5a9f4333c597 100644
__free_pages_core(page, pageblock_order);
return;
}
-@@ -1732,6 +1762,7 @@ static void __init deferred_free_range(unsigned long pfn,
+@@ -1736,6 +1766,7 @@ static void __init deferred_free_range(unsigned long pfn,
for (i = 0; i < nr_pages; i++, page++, pfn++) {
if ((pfn & (pageblock_nr_pages - 1)) == 0)
set_pageblock_migratetype(page, MIGRATE_MOVABLE);
@@ -2146,7 +2159,7 @@ index a723e81a5da2..5a9f4333c597 100644
__free_pages_core(page, 0);
}
}
-@@ -2300,6 +2331,12 @@ inline void post_alloc_hook(struct page *page, unsigned int order,
+@@ -2304,6 +2335,12 @@ inline void post_alloc_hook(struct page *page, unsigned int order,
kernel_unpoison_pages(page, 1 << order);
set_page_owner(page, order, gfp_flags);
@@ -2160,10 +2173,10 @@ index a723e81a5da2..5a9f4333c597 100644
kernel_init_free_pages(page, 1 << order);
}
diff --git a/mm/slab.h b/mm/slab.h
-index 1a756a359fa8..45344c99be88 100644
+index 9e83616bb5b4..f70e037a96fc 100644
--- a/mm/slab.h
+++ b/mm/slab.h
-@@ -415,9 +415,13 @@ static inline struct kmem_cache *virt_to_cache(const void *obj)
+@@ -413,9 +413,13 @@ static inline struct kmem_cache *virt_to_cache(const void *obj)
struct page *page;
page = virt_to_head_page(obj);
@@ -2177,7 +2190,7 @@ index 1a756a359fa8..45344c99be88 100644
return page->slab_cache;
}
-@@ -447,10 +451,15 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
+@@ -445,10 +449,15 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
return s;
cachep = virt_to_cache(x);
@@ -2196,7 +2209,7 @@ index 1a756a359fa8..45344c99be88 100644
return cachep;
}
-@@ -475,7 +484,7 @@ static inline size_t slab_ksize(const struct kmem_cache *s)
+@@ -473,7 +482,7 @@ static inline size_t slab_ksize(const struct kmem_cache *s)
* back there or track user information then we can
* only use the space before that information.
*/
@@ -2205,7 +2218,7 @@ index 1a756a359fa8..45344c99be88 100644
return s->inuse;
/*
* Else we can use all the padding etc for the allocation
-@@ -598,8 +607,10 @@ static inline void cache_random_seq_destroy(struct kmem_cache *cachep) { }
+@@ -596,8 +605,10 @@ static inline void cache_random_seq_destroy(struct kmem_cache *cachep) { }
static inline bool slab_want_init_on_alloc(gfp_t flags, struct kmem_cache *c)
{
if (static_branch_unlikely(&init_on_alloc)) {
@@ -2216,7 +2229,7 @@ index 1a756a359fa8..45344c99be88 100644
if (c->flags & (SLAB_TYPESAFE_BY_RCU | SLAB_POISON))
return flags & __GFP_ZERO;
return true;
-@@ -609,9 +620,15 @@ static inline bool slab_want_init_on_alloc(gfp_t flags, struct kmem_cache *c)
+@@ -607,9 +618,15 @@ static inline bool slab_want_init_on_alloc(gfp_t flags, struct kmem_cache *c)
static inline bool slab_want_init_on_free(struct kmem_cache *c)
{
@@ -2236,7 +2249,7 @@ index 1a756a359fa8..45344c99be88 100644
}
diff --git a/mm/slab_common.c b/mm/slab_common.c
-index 0b775cb5c108..fa125646c8b4 100644
+index 174d8652d9fe..a38704aff96b 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -31,10 +31,10 @@
@@ -2262,7 +2275,7 @@ index 0b775cb5c108..fa125646c8b4 100644
static int __init setup_slab_nomerge(char *str)
{
diff --git a/mm/slub.c b/mm/slub.c
-index c86037b38253..67c6f3c930e3 100644
+index d62db41710bf..c2f4e0048dc9 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -127,6 +127,12 @@ static inline bool kmem_cache_debug(struct kmem_cache *s)
@@ -2421,7 +2434,7 @@ index c86037b38253..67c6f3c930e3 100644
if (s->flags & SLAB_STORE_USER)
/* We also have user information there */
off += 2 * sizeof(struct track);
-@@ -1564,6 +1609,8 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
+@@ -1561,6 +1606,8 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
object = next;
next = get_freepointer(s, object);
@@ -2430,7 +2443,7 @@ index c86037b38253..67c6f3c930e3 100644
if (slab_want_init_on_free(s)) {
/*
* Clear the object and the metadata, but don't touch
-@@ -1574,8 +1621,12 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
+@@ -1571,8 +1618,12 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
: 0;
memset((char *)kasan_reset_tag(object) + s->inuse, 0,
s->size - s->inuse - rsize);
@@ -2444,7 +2457,7 @@ index c86037b38253..67c6f3c930e3 100644
/* If object's reuse doesn't have to be delayed */
if (!slab_free_hook(s, object)) {
/* Move object to the new freelist */
-@@ -1583,6 +1634,18 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
+@@ -1580,6 +1631,18 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
*head = object;
if (!*tail)
*tail = object;
@@ -2463,7 +2476,7 @@ index c86037b38253..67c6f3c930e3 100644
}
} while (object != old_tail);
-@@ -1596,8 +1659,9 @@ static void *setup_object(struct kmem_cache *s, struct page *page,
+@@ -1593,8 +1656,9 @@ static void *setup_object(struct kmem_cache *s, struct page *page,
void *object)
{
setup_object_debug(s, page, object);
@@ -2474,7 +2487,7 @@ index c86037b38253..67c6f3c930e3 100644
kasan_unpoison_object_data(s, object);
s->ctor(object);
kasan_poison_object_data(s, object);
-@@ -2886,8 +2950,28 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s,
+@@ -2883,8 +2947,28 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s,
maybe_wipe_obj_freeptr(s, object);
@@ -2504,7 +2517,7 @@ index c86037b38253..67c6f3c930e3 100644
slab_post_alloc_hook(s, objcg, gfpflags, 1, &object);
-@@ -3276,7 +3360,7 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
+@@ -3273,7 +3357,7 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
void **p)
{
struct kmem_cache_cpu *c;
@@ -2513,7 +2526,7 @@ index c86037b38253..67c6f3c930e3 100644
struct obj_cgroup *objcg = NULL;
/* memcg and kmem_cache debug support */
-@@ -3326,11 +3410,35 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
+@@ -3323,11 +3407,35 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
local_irq_enable();
/* Clear memory outside IRQ disabled fastpath loop */
@@ -2551,7 +2564,7 @@ index c86037b38253..67c6f3c930e3 100644
}
/* memcg and kmem_cache debug support */
-@@ -3364,9 +3472,9 @@ EXPORT_SYMBOL(kmem_cache_alloc_bulk);
+@@ -3361,9 +3469,9 @@ EXPORT_SYMBOL(kmem_cache_alloc_bulk);
* and increases the number of allocations possible without having to
* take the list_lock.
*/
@@ -2564,7 +2577,7 @@ index c86037b38253..67c6f3c930e3 100644
/*
* Calculate the order of allocation given an slab object size.
-@@ -3548,6 +3656,7 @@ static void early_kmem_cache_node_alloc(int node)
+@@ -3545,6 +3653,7 @@ static void early_kmem_cache_node_alloc(int node)
init_object(kmem_cache_node, n, SLUB_RED_ACTIVE);
init_tracking(kmem_cache_node, n);
#endif
@@ -2572,7 +2585,7 @@ index c86037b38253..67c6f3c930e3 100644
n = kasan_kmalloc(kmem_cache_node, n, sizeof(struct kmem_cache_node),
GFP_KERNEL);
page->freelist = get_freepointer(kmem_cache_node, n);
-@@ -3728,6 +3837,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
+@@ -3725,6 +3834,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
s->offset = ALIGN(freepointer_area / 2, sizeof(void *));
}
@@ -2582,7 +2595,7 @@ index c86037b38253..67c6f3c930e3 100644
#ifdef CONFIG_SLUB_DEBUG
if (flags & SLAB_STORE_USER)
/*
-@@ -3801,6 +3913,10 @@ static int kmem_cache_open(struct kmem_cache *s, slab_flags_t flags)
+@@ -3798,6 +3910,10 @@ static int kmem_cache_open(struct kmem_cache *s, slab_flags_t flags)
#ifdef CONFIG_SLAB_FREELIST_HARDENED
s->random = get_random_long();
#endif
@@ -2593,7 +2606,7 @@ index c86037b38253..67c6f3c930e3 100644
if (!calculate_sizes(s, -1))
goto error;
-@@ -4074,6 +4190,8 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
+@@ -4071,6 +4187,8 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
offset -= s->red_left_pad;
}
@@ -2602,7 +2615,7 @@ index c86037b38253..67c6f3c930e3 100644
/* Allow address range falling entirely within usercopy region. */
if (offset >= s->useroffset &&
offset - s->useroffset <= s->usersize &&
-@@ -4107,7 +4225,11 @@ size_t __ksize(const void *object)
+@@ -4104,7 +4222,11 @@ size_t __ksize(const void *object)
page = virt_to_head_page(object);
if (unlikely(!PageSlab(page))) {
@@ -2614,7 +2627,7 @@ index c86037b38253..67c6f3c930e3 100644
return page_size(page);
}
-@@ -4893,7 +5015,7 @@ enum slab_stat_type {
+@@ -4890,7 +5012,7 @@ enum slab_stat_type {
#define SO_TOTAL (1 << SL_TOTAL)
#ifdef CONFIG_MEMCG
@@ -2670,7 +2683,7 @@ index 8c9b7d1e7c49..b74af3a4435e 100644
unsigned long arch_mmap_rnd(void)
diff --git a/net/core/dev.c b/net/core/dev.c
-index 3c0d3b6d674d..93387bfaf741 100644
+index 633c2d6f1a35..ecfaa629f086 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4879,7 +4879,7 @@ int netif_rx_any_context(struct sk_buff *skb)
@@ -2980,7 +2993,7 @@ index 9b44caa4b956..e3a13782bb53 100644
* simultaneous connect with crossed SYNs.
* Particularly, it can be connect to self.
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
-index f54b6ac37ac2..e53b3057d4cb 100644
+index 12a87be0fb44..f4c69e330a53 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -47,6 +47,7 @@ MODPOST = scripts/mod/modpost \
@@ -3008,7 +3021,7 @@ index ab9eb4cbe33a..2870588ef733 100644
secure!
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
-index d6c81657d695..cabe8fb75532 100644
+index 5f9d8d9147d0..ff743ffd0948 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -35,6 +35,8 @@ static int warn_unresolved = 0;
@@ -3082,7 +3095,7 @@ index d6c81657d695..cabe8fb75532 100644
}
fprintf(stderr, "\n");
}
-@@ -2546,7 +2567,7 @@ int main(int argc, char **argv)
+@@ -2533,7 +2554,7 @@ int main(int argc, char **argv)
struct dump_list *dump_read_start = NULL;
struct dump_list **dump_read_iter = &dump_read_start;
@@ -3091,7 +3104,7 @@ index d6c81657d695..cabe8fb75532 100644
switch (opt) {
case 'e':
external_module = 1;
-@@ -2557,6 +2578,9 @@ int main(int argc, char **argv)
+@@ -2544,6 +2565,9 @@ int main(int argc, char **argv)
(*dump_read_iter)->file = optarg;
dump_read_iter = &(*dump_read_iter)->next;
break;
@@ -3101,7 +3114,7 @@ index d6c81657d695..cabe8fb75532 100644
case 'm':
modversions = 1;
break;
-@@ -2655,6 +2679,11 @@ int main(int argc, char **argv)
+@@ -2642,6 +2666,11 @@ int main(int argc, char **argv)
}
free(buf.p);
diff --git a/sys-kernel/linux-image-redcore/linux-image-redcore-5.11.17.ebuild b/sys-kernel/linux-image-redcore/linux-image-redcore-5.11.22.ebuild
index a63475f4..5175fe22 100644
--- a/sys-kernel/linux-image-redcore/linux-image-redcore-5.11.17.ebuild
+++ b/sys-kernel/linux-image-redcore/linux-image-redcore-5.11.22.ebuild
@@ -47,7 +47,6 @@ PATCHES=(
"${FILESDIR}"/"${KV_MAJOR}"-bootconfig-fallthrough.patch
"${FILESDIR}"/"${KV_MAJOR}"-apic_vector-spam-in-debug-mode-only.patch
"${FILESDIR}"/"${KV_MAJOR}"-iwlwifi-fix-5e003982b07ae.patch
- "${FILESDIR}"/"${KV_MAJOR}"-amd_iommu_init_info.patch
"${FILESDIR}"/"${KV_MAJOR}"-0001-Revert-hwmon-k10temp-Remove-support-for-displaying-v.patch
"${FILESDIR}"/"${KV_MAJOR}"-k10temp-fix-ZEN2-desktop-add-ZEN3-desktop.patch
"${FILESDIR}"/"${KV_MAJOR}"-k10temp-add-Renoir-support.patch
diff --git a/sys-kernel/linux-sources-redcore/Manifest b/sys-kernel/linux-sources-redcore/Manifest
index 5a30db60..49b4a78a 100644
--- a/sys-kernel/linux-sources-redcore/Manifest
+++ b/sys-kernel/linux-sources-redcore/Manifest
@@ -1 +1 @@
-DIST linux-5.11.17.tar.xz 117653736 BLAKE2B 76226bb9e071620929fbdb4bc5ca08be1dab748dc337505ce9a377df0cf0612f6e57d0003bde3d312506a354d02fbc9f4e4be12269daa576969d52fabca13403 SHA512 105e7be115a50524f4bc535ae47ab556aff57e2c5329297b88b80bfabc236ffc0a85afaf26a25eb6e0a6db15528f8a077a312c449f4dc0c60b9648c68c5ba40b
+DIST linux-5.11.22.tar.xz 117681288 BLAKE2B 21e1a7c6400c6997ec0a66a4ccd7c3789ad99e9319e8f412a5e26f44b309ca6581077f84fd17ebf265089956ed2625acce12d6d6d9f246690c6acd6b21279840 SHA512 1f61c1d9e2ed3095110105b6f33565343e762c7e5e5f9406a3a5884b78ca8ff8e31bb5da2880b45b92ca3adb0539dd69597791de87a41369cf77e325abfae35c
diff --git a/sys-kernel/linux-sources-redcore/files/5.11-amd_iommu_init_info.patch b/sys-kernel/linux-sources-redcore/files/5.11-amd_iommu_init_info.patch
deleted file mode 100644
index 8b17c2f6..00000000
--- a/sys-kernel/linux-sources-redcore/files/5.11-amd_iommu_init_info.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
-index c652f16eb702..b52ea079d555 100644
---- a/drivers/iommu/amd/init.c
-+++ b/drivers/iommu/amd/init.c
-@@ -1680,7 +1680,7 @@ static void init_iommu_perf_ctr(struct amd_iommu *iommu)
- return;
-
- pc_false:
-- pci_err(pdev, "Unable to read/write to IOMMU perf counter.\n");
-+ pci_info(pdev, "Unable to read/write to IOMMU perf counter.\n");
- amd_iommu_pc_present = false;
- return;
- }
diff --git a/sys-kernel/linux-sources-redcore/files/5.11-linux-hardened.patch b/sys-kernel/linux-sources-redcore/files/5.11-linux-hardened.patch
index 2fb3da83..7b733b3c 100644
--- a/sys-kernel/linux-sources-redcore/files/5.11-linux-hardened.patch
+++ b/sys-kernel/linux-sources-redcore/files/5.11-linux-hardened.patch
@@ -1,5 +1,5 @@
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index a10b545c2070..b3c97490d872 100644
+index b537a9608895..8bd1293345f9 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -518,17 +518,6 @@
@@ -20,7 +20,7 @@ index a10b545c2070..b3c97490d872 100644
cio_ignore= [S390]
See Documentation/s390/common_io.rst for details.
clk_ignore_unused
-@@ -3573,6 +3562,11 @@
+@@ -3574,6 +3563,11 @@
the specified number of seconds. This is to be used if
your oopses keep scrolling off the screen.
@@ -101,6 +101,19 @@ index 1b7f8debada6..05f722d7d065 100644
tcp_slow_start_after_idle - BOOLEAN
If set, provide RFC2861 behavior and time out the congestion
window after an idle period. An idle period is defined at
+diff --git a/Makefile b/Makefile
+index ff363cc6b11f..0f9ed687ebf6 100644
+--- a/Makefile
++++ b/Makefile
+@@ -2,7 +2,7 @@
+ VERSION = 5
+ PATCHLEVEL = 11
+ SUBLEVEL = 22
+-EXTRAVERSION =
++EXTRAVERSION = -hardened1
+ NAME = 💕 Valentine's Day Edition 💕
+
+ # *DOCUMENTATION*
diff --git a/arch/Kconfig b/arch/Kconfig
index 24862d15f3a3..ea5030c6dc46 100644
--- a/arch/Kconfig
@@ -188,10 +201,10 @@ index 8d1c8dcb87fd..32c1609a1158 100644
#ifdef __AARCH64EB__
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 21f851179ff0..258df85d5085 100644
+index 4960c6e1b082..a70cb1b4ebcc 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
-@@ -1196,8 +1196,7 @@ config VM86
+@@ -1197,8 +1197,7 @@ config VM86
default X86_LEGACY_VM86
config X86_16BIT
@@ -201,7 +214,7 @@ index 21f851179ff0..258df85d5085 100644
depends on MODIFY_LDT_SYSCALL
help
This option is required by programs like Wine to run 16-bit
-@@ -2316,7 +2315,7 @@ config COMPAT_VDSO
+@@ -2317,7 +2316,7 @@ config COMPAT_VDSO
choice
prompt "vsyscall table for legacy applications"
depends on X86_64
@@ -210,7 +223,7 @@ index 21f851179ff0..258df85d5085 100644
help
Legacy user code that does not know how to find the vDSO expects
to be able to issue three syscalls by calling fixed addresses in
-@@ -2412,8 +2411,7 @@ config CMDLINE_OVERRIDE
+@@ -2413,8 +2412,7 @@ config CMDLINE_OVERRIDE
be set to 'N' under normal conditions.
config MODIFY_LDT_SYSCALL
@@ -340,7 +353,7 @@ index 66bdfe838d61..d7a51942f782 100644
-extern unsigned long align_vdso_addr(unsigned long);
#endif /* _ASM_X86_ELF_H */
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index 35ad8480c464..edaeeab9df4b 100644
+index 25148ebd3634..1a41d2c767a1 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -399,6 +399,7 @@ EXPORT_SYMBOL_GPL(native_write_cr4);
@@ -468,7 +481,7 @@ index 569ac1d57f55..044d88da4aee 100644
native_write_cr4(cr4 ^ X86_CR4_PGE);
/* write old PGE again and flush TLBs */
diff --git a/block/blk-mq.c b/block/blk-mq.c
-index f285a9123a8b..93d6bfe33166 100644
+index 88c843fa8d13..cb000105ab46 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -571,7 +571,7 @@ EXPORT_SYMBOL(blk_mq_end_request);
@@ -535,7 +548,7 @@ index e15cd6b5bb99..930be8d5d81d 100644
A pseudo terminal (PTY) is a software device consisting of two
halves: a master and a slave. The slave device behaves identical to
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
-index 5fd87941ac71..ca442c544a7b 100644
+index 51bc4e5a4020..4248568d2d0b 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -171,6 +171,7 @@ static void free_tty_struct(struct tty_struct *tty)
@@ -587,7 +600,7 @@ index 18e874b0441e..fc7a3a9aa72a 100644
obj-$(CONFIG_USB) += usbcore.o
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 7f71218cc1e5..b5992466936e 100644
+index 13fe37fbbd2c..438ca30f31f4 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -5115,6 +5115,12 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
@@ -794,10 +807,10 @@ index dd188c7996b3..f1f14808bc8f 100644
+
+ If unsure, say N.
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
-index d58b8f2bf9d0..6e84b1cd4c4e 100644
+index ce274d4e6700..2fca35bda8c7 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
-@@ -2120,7 +2120,9 @@ static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags,
+@@ -2124,7 +2124,9 @@ static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags,
static struct file_system_type ovl_fs_type = {
.owner = THIS_MODULE,
.name = "overlay",
@@ -820,7 +833,7 @@ index c930001056f9..6a0a51b3f593 100644
Exports the dump image of crashed kernel in ELF format.
diff --git a/fs/stat.c b/fs/stat.c
-index dacecdda2e79..14173d0f777d 100644
+index 1196af4d1ea0..4291a2c694e5 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -43,8 +43,13 @@ void generic_fillattr(struct inode *inode, struct kstat *stat)
@@ -839,9 +852,9 @@ index dacecdda2e79..14173d0f777d 100644
stat->ctime = inode->i_ctime;
stat->blksize = i_blocksize(inode);
stat->blocks = inode->i_blocks;
-@@ -83,9 +88,14 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
- if (IS_DAX(inode))
- stat->attributes |= STATX_ATTR_DAX;
+@@ -91,9 +96,14 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
+ stat->attributes_mask |= (STATX_ATTR_AUTOMOUNT |
+ STATX_ATTR_DAX);
- if (inode->i_op->getattr)
- return inode->i_op->getattr(path, stat, request_mask,
@@ -1022,7 +1035,7 @@ index 2b5b64256cf4..8cdce21dce0f 100644
const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent);
const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj);
diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 992c18d5e85d..19d0c045a94c 100644
+index ad8395cf1262..c33dd29da690 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -775,7 +775,7 @@ static inline int is_vmalloc_or_module_addr(const void *x)
@@ -1077,10 +1090,10 @@ index 5e76af742c80..9a6c682ec127 100644
extern phys_addr_t per_cpu_ptr_to_phys(void *addr);
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
-index 419a4d77de00..886b8a9b554e 100644
+index 7724c6842bea..b41be5819a85 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
-@@ -1316,6 +1316,14 @@ static inline int perf_is_paranoid(void)
+@@ -1317,6 +1317,14 @@ static inline int perf_is_paranoid(void)
return sysctl_perf_event_paranoid > -1;
}
@@ -1225,10 +1238,10 @@ index d6a41841b93e..f7f3d138b4e6 100644
#endif
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
-index 64cf8ebdc4ec..bd29529ac188 100644
+index f6c5f784be5a..07d194f23587 100644
--- a/include/linux/user_namespace.h
+++ b/include/linux/user_namespace.h
-@@ -105,6 +105,8 @@ void dec_ucount(struct ucounts *ucounts, enum ucount_type type);
+@@ -108,6 +108,8 @@ void dec_ucount(struct ucounts *ucounts, enum ucount_type type);
#ifdef CONFIG_USER_NS
@@ -1237,7 +1250,7 @@ index 64cf8ebdc4ec..bd29529ac188 100644
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
{
if (ns)
-@@ -138,6 +140,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
+@@ -141,6 +143,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
struct ns_common *ns_get_owner(struct ns_common *ns);
#else
@@ -1486,7 +1499,7 @@ index de7eac903a2a..5602178f3d21 100644
/**
diff --git a/kernel/events/core.c b/kernel/events/core.c
-index 8425dbc1d239..7ce0ad5cead5 100644
+index 41bec6d7e06e..26dcc2352302 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -410,8 +410,13 @@ static cpumask_var_t perf_online_mask;
@@ -1503,7 +1516,7 @@ index 8425dbc1d239..7ce0ad5cead5 100644
/* Minimum for 512 kiB + 1 user control page */
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
-@@ -11783,7 +11788,7 @@ SYSCALL_DEFINE5(perf_event_open,
+@@ -11802,7 +11807,7 @@ SYSCALL_DEFINE5(perf_event_open,
return -EINVAL;
/* Do we allow access to perf_event_open(2) ? */
@@ -1562,10 +1575,10 @@ index aa897c3f2e92..d8976886fd68 100644
struct rcu_head *next, *list;
unsigned long flags;
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
-index ce17b8477442..f586f36c2627 100644
+index e7d8a0d8ea7c..28f68c219bad 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
-@@ -2782,7 +2782,7 @@ static __latent_entropy void rcu_core(void)
+@@ -2781,7 +2781,7 @@ static __latent_entropy void rcu_core(void)
queue_work_on(rdp->cpu, rcu_gp_wq, &rdp->strict_work);
}
@@ -1575,10 +1588,10 @@ index ce17b8477442..f586f36c2627 100644
rcu_core();
}
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index bbc78794224a..bbe4843a2a30 100644
+index 10b8b133145d..b2009c0210b2 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
-@@ -10686,7 +10686,7 @@ static int newidle_balance(struct rq *this_rq, struct rq_flags *rf)
+@@ -10708,7 +10708,7 @@ static int newidle_balance(struct rq *this_rq, struct rq_flags *rf)
* run_rebalance_domains is triggered when needed from the scheduler tick.
* Also triggered for nohz idle balancing (with nohz_balancing_kick set).
*/
@@ -1880,7 +1893,7 @@ index 8dbc008f8942..4fc9b8ece448 100644
struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index af612945a4d0..95c54dae4aa1 100644
+index 9a4b980d695b..4388ca13ea3f 100644
--- a/kernel/user_namespace.c
+++ b/kernel/user_namespace.c
@@ -21,6 +21,13 @@
@@ -1991,7 +2004,7 @@ index ea53b30cf483..5343bbeea5f8 100644
enum kobj_ns_type type = ops->type;
int error;
diff --git a/lib/nlattr.c b/lib/nlattr.c
-index 5b6116e81f9f..b26a8e43cf42 100644
+index 1d051ef66afe..4dd3c165d1da 100644
--- a/lib/nlattr.c
+++ b/lib/nlattr.c
@@ -790,6 +790,8 @@ int nla_memcpy(void *dest, const struct nlattr *src, int count)
@@ -2004,7 +2017,7 @@ index 5b6116e81f9f..b26a8e43cf42 100644
if (count > minlen)
memset(dest + minlen, 0, count - minlen);
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
-index 3b53c73580c5..3490a316f52d 100644
+index 455f8271fd49..7c3a017827e5 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -821,7 +821,7 @@ static char *ptr_to_id(char *buf, char *end, const void *ptr,
@@ -2061,7 +2074,7 @@ index dc7206032387..62fcbf1515bd 100644
mm->brk = brk;
goto success;
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index a723e81a5da2..5a9f4333c597 100644
+index d65d4481c40c..888061adc4a8 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -72,6 +72,7 @@
@@ -2088,7 +2101,7 @@ index a723e81a5da2..5a9f4333c597 100644
#ifdef CONFIG_GCC_PLUGIN_LATENT_ENTROPY
volatile unsigned long latent_entropy __latent_entropy;
EXPORT_SYMBOL(latent_entropy);
-@@ -1548,6 +1558,25 @@ static void __free_pages_ok(struct page *page, unsigned int order,
+@@ -1552,6 +1562,25 @@ static void __free_pages_ok(struct page *page, unsigned int order,
local_irq_restore(flags);
}
@@ -2114,7 +2127,7 @@ index a723e81a5da2..5a9f4333c597 100644
void __free_pages_core(struct page *page, unsigned int order)
{
unsigned int nr_pages = 1 << order;
-@@ -1567,7 +1596,6 @@ void __free_pages_core(struct page *page, unsigned int order)
+@@ -1571,7 +1600,6 @@ void __free_pages_core(struct page *page, unsigned int order)
}
__ClearPageReserved(p);
set_page_count(p, 0);
@@ -2122,7 +2135,7 @@ index a723e81a5da2..5a9f4333c597 100644
atomic_long_add(nr_pages, &page_zone(page)->managed_pages);
/*
-@@ -1634,6 +1662,7 @@ void __init memblock_free_pages(struct page *page, unsigned long pfn,
+@@ -1638,6 +1666,7 @@ void __init memblock_free_pages(struct page *page, unsigned long pfn,
{
if (early_page_uninitialised(pfn))
return;
@@ -2130,7 +2143,7 @@ index a723e81a5da2..5a9f4333c597 100644
__free_pages_core(page, order);
}
-@@ -1725,6 +1754,7 @@ static void __init deferred_free_range(unsigned long pfn,
+@@ -1729,6 +1758,7 @@ static void __init deferred_free_range(unsigned long pfn,
if (nr_pages == pageblock_nr_pages &&
(pfn & (pageblock_nr_pages - 1)) == 0) {
set_pageblock_migratetype(page, MIGRATE_MOVABLE);
@@ -2138,7 +2151,7 @@ index a723e81a5da2..5a9f4333c597 100644
__free_pages_core(page, pageblock_order);
return;
}
-@@ -1732,6 +1762,7 @@ static void __init deferred_free_range(unsigned long pfn,
+@@ -1736,6 +1766,7 @@ static void __init deferred_free_range(unsigned long pfn,
for (i = 0; i < nr_pages; i++, page++, pfn++) {
if ((pfn & (pageblock_nr_pages - 1)) == 0)
set_pageblock_migratetype(page, MIGRATE_MOVABLE);
@@ -2146,7 +2159,7 @@ index a723e81a5da2..5a9f4333c597 100644
__free_pages_core(page, 0);
}
}
-@@ -2300,6 +2331,12 @@ inline void post_alloc_hook(struct page *page, unsigned int order,
+@@ -2304,6 +2335,12 @@ inline void post_alloc_hook(struct page *page, unsigned int order,
kernel_unpoison_pages(page, 1 << order);
set_page_owner(page, order, gfp_flags);
@@ -2160,10 +2173,10 @@ index a723e81a5da2..5a9f4333c597 100644
kernel_init_free_pages(page, 1 << order);
}
diff --git a/mm/slab.h b/mm/slab.h
-index 1a756a359fa8..45344c99be88 100644
+index 9e83616bb5b4..f70e037a96fc 100644
--- a/mm/slab.h
+++ b/mm/slab.h
-@@ -415,9 +415,13 @@ static inline struct kmem_cache *virt_to_cache(const void *obj)
+@@ -413,9 +413,13 @@ static inline struct kmem_cache *virt_to_cache(const void *obj)
struct page *page;
page = virt_to_head_page(obj);
@@ -2177,7 +2190,7 @@ index 1a756a359fa8..45344c99be88 100644
return page->slab_cache;
}
-@@ -447,10 +451,15 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
+@@ -445,10 +449,15 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
return s;
cachep = virt_to_cache(x);
@@ -2196,7 +2209,7 @@ index 1a756a359fa8..45344c99be88 100644
return cachep;
}
-@@ -475,7 +484,7 @@ static inline size_t slab_ksize(const struct kmem_cache *s)
+@@ -473,7 +482,7 @@ static inline size_t slab_ksize(const struct kmem_cache *s)
* back there or track user information then we can
* only use the space before that information.
*/
@@ -2205,7 +2218,7 @@ index 1a756a359fa8..45344c99be88 100644
return s->inuse;
/*
* Else we can use all the padding etc for the allocation
-@@ -598,8 +607,10 @@ static inline void cache_random_seq_destroy(struct kmem_cache *cachep) { }
+@@ -596,8 +605,10 @@ static inline void cache_random_seq_destroy(struct kmem_cache *cachep) { }
static inline bool slab_want_init_on_alloc(gfp_t flags, struct kmem_cache *c)
{
if (static_branch_unlikely(&init_on_alloc)) {
@@ -2216,7 +2229,7 @@ index 1a756a359fa8..45344c99be88 100644
if (c->flags & (SLAB_TYPESAFE_BY_RCU | SLAB_POISON))
return flags & __GFP_ZERO;
return true;
-@@ -609,9 +620,15 @@ static inline bool slab_want_init_on_alloc(gfp_t flags, struct kmem_cache *c)
+@@ -607,9 +618,15 @@ static inline bool slab_want_init_on_alloc(gfp_t flags, struct kmem_cache *c)
static inline bool slab_want_init_on_free(struct kmem_cache *c)
{
@@ -2236,7 +2249,7 @@ index 1a756a359fa8..45344c99be88 100644
}
diff --git a/mm/slab_common.c b/mm/slab_common.c
-index 0b775cb5c108..fa125646c8b4 100644
+index 174d8652d9fe..a38704aff96b 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -31,10 +31,10 @@
@@ -2262,7 +2275,7 @@ index 0b775cb5c108..fa125646c8b4 100644
static int __init setup_slab_nomerge(char *str)
{
diff --git a/mm/slub.c b/mm/slub.c
-index c86037b38253..67c6f3c930e3 100644
+index d62db41710bf..c2f4e0048dc9 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -127,6 +127,12 @@ static inline bool kmem_cache_debug(struct kmem_cache *s)
@@ -2421,7 +2434,7 @@ index c86037b38253..67c6f3c930e3 100644
if (s->flags & SLAB_STORE_USER)
/* We also have user information there */
off += 2 * sizeof(struct track);
-@@ -1564,6 +1609,8 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
+@@ -1561,6 +1606,8 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
object = next;
next = get_freepointer(s, object);
@@ -2430,7 +2443,7 @@ index c86037b38253..67c6f3c930e3 100644
if (slab_want_init_on_free(s)) {
/*
* Clear the object and the metadata, but don't touch
-@@ -1574,8 +1621,12 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
+@@ -1571,8 +1618,12 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
: 0;
memset((char *)kasan_reset_tag(object) + s->inuse, 0,
s->size - s->inuse - rsize);
@@ -2444,7 +2457,7 @@ index c86037b38253..67c6f3c930e3 100644
/* If object's reuse doesn't have to be delayed */
if (!slab_free_hook(s, object)) {
/* Move object to the new freelist */
-@@ -1583,6 +1634,18 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
+@@ -1580,6 +1631,18 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
*head = object;
if (!*tail)
*tail = object;
@@ -2463,7 +2476,7 @@ index c86037b38253..67c6f3c930e3 100644
}
} while (object != old_tail);
-@@ -1596,8 +1659,9 @@ static void *setup_object(struct kmem_cache *s, struct page *page,
+@@ -1593,8 +1656,9 @@ static void *setup_object(struct kmem_cache *s, struct page *page,
void *object)
{
setup_object_debug(s, page, object);
@@ -2474,7 +2487,7 @@ index c86037b38253..67c6f3c930e3 100644
kasan_unpoison_object_data(s, object);
s->ctor(object);
kasan_poison_object_data(s, object);
-@@ -2886,8 +2950,28 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s,
+@@ -2883,8 +2947,28 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s,
maybe_wipe_obj_freeptr(s, object);
@@ -2504,7 +2517,7 @@ index c86037b38253..67c6f3c930e3 100644
slab_post_alloc_hook(s, objcg, gfpflags, 1, &object);
-@@ -3276,7 +3360,7 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
+@@ -3273,7 +3357,7 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
void **p)
{
struct kmem_cache_cpu *c;
@@ -2513,7 +2526,7 @@ index c86037b38253..67c6f3c930e3 100644
struct obj_cgroup *objcg = NULL;
/* memcg and kmem_cache debug support */
-@@ -3326,11 +3410,35 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
+@@ -3323,11 +3407,35 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
local_irq_enable();
/* Clear memory outside IRQ disabled fastpath loop */
@@ -2551,7 +2564,7 @@ index c86037b38253..67c6f3c930e3 100644
}
/* memcg and kmem_cache debug support */
-@@ -3364,9 +3472,9 @@ EXPORT_SYMBOL(kmem_cache_alloc_bulk);
+@@ -3361,9 +3469,9 @@ EXPORT_SYMBOL(kmem_cache_alloc_bulk);
* and increases the number of allocations possible without having to
* take the list_lock.
*/
@@ -2564,7 +2577,7 @@ index c86037b38253..67c6f3c930e3 100644
/*
* Calculate the order of allocation given an slab object size.
-@@ -3548,6 +3656,7 @@ static void early_kmem_cache_node_alloc(int node)
+@@ -3545,6 +3653,7 @@ static void early_kmem_cache_node_alloc(int node)
init_object(kmem_cache_node, n, SLUB_RED_ACTIVE);
init_tracking(kmem_cache_node, n);
#endif
@@ -2572,7 +2585,7 @@ index c86037b38253..67c6f3c930e3 100644
n = kasan_kmalloc(kmem_cache_node, n, sizeof(struct kmem_cache_node),
GFP_KERNEL);
page->freelist = get_freepointer(kmem_cache_node, n);
-@@ -3728,6 +3837,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
+@@ -3725,6 +3834,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
s->offset = ALIGN(freepointer_area / 2, sizeof(void *));
}
@@ -2582,7 +2595,7 @@ index c86037b38253..67c6f3c930e3 100644
#ifdef CONFIG_SLUB_DEBUG
if (flags & SLAB_STORE_USER)
/*
-@@ -3801,6 +3913,10 @@ static int kmem_cache_open(struct kmem_cache *s, slab_flags_t flags)
+@@ -3798,6 +3910,10 @@ static int kmem_cache_open(struct kmem_cache *s, slab_flags_t flags)
#ifdef CONFIG_SLAB_FREELIST_HARDENED
s->random = get_random_long();
#endif
@@ -2593,7 +2606,7 @@ index c86037b38253..67c6f3c930e3 100644
if (!calculate_sizes(s, -1))
goto error;
-@@ -4074,6 +4190,8 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
+@@ -4071,6 +4187,8 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
offset -= s->red_left_pad;
}
@@ -2602,7 +2615,7 @@ index c86037b38253..67c6f3c930e3 100644
/* Allow address range falling entirely within usercopy region. */
if (offset >= s->useroffset &&
offset - s->useroffset <= s->usersize &&
-@@ -4107,7 +4225,11 @@ size_t __ksize(const void *object)
+@@ -4104,7 +4222,11 @@ size_t __ksize(const void *object)
page = virt_to_head_page(object);
if (unlikely(!PageSlab(page))) {
@@ -2614,7 +2627,7 @@ index c86037b38253..67c6f3c930e3 100644
return page_size(page);
}
-@@ -4893,7 +5015,7 @@ enum slab_stat_type {
+@@ -4890,7 +5012,7 @@ enum slab_stat_type {
#define SO_TOTAL (1 << SL_TOTAL)
#ifdef CONFIG_MEMCG
@@ -2670,7 +2683,7 @@ index 8c9b7d1e7c49..b74af3a4435e 100644
unsigned long arch_mmap_rnd(void)
diff --git a/net/core/dev.c b/net/core/dev.c
-index 3c0d3b6d674d..93387bfaf741 100644
+index 633c2d6f1a35..ecfaa629f086 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4879,7 +4879,7 @@ int netif_rx_any_context(struct sk_buff *skb)
@@ -2980,7 +2993,7 @@ index 9b44caa4b956..e3a13782bb53 100644
* simultaneous connect with crossed SYNs.
* Particularly, it can be connect to self.
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
-index f54b6ac37ac2..e53b3057d4cb 100644
+index 12a87be0fb44..f4c69e330a53 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -47,6 +47,7 @@ MODPOST = scripts/mod/modpost \
@@ -3008,7 +3021,7 @@ index ab9eb4cbe33a..2870588ef733 100644
secure!
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
-index d6c81657d695..cabe8fb75532 100644
+index 5f9d8d9147d0..ff743ffd0948 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -35,6 +35,8 @@ static int warn_unresolved = 0;
@@ -3082,7 +3095,7 @@ index d6c81657d695..cabe8fb75532 100644
}
fprintf(stderr, "\n");
}
-@@ -2546,7 +2567,7 @@ int main(int argc, char **argv)
+@@ -2533,7 +2554,7 @@ int main(int argc, char **argv)
struct dump_list *dump_read_start = NULL;
struct dump_list **dump_read_iter = &dump_read_start;
@@ -3091,7 +3104,7 @@ index d6c81657d695..cabe8fb75532 100644
switch (opt) {
case 'e':
external_module = 1;
-@@ -2557,6 +2578,9 @@ int main(int argc, char **argv)
+@@ -2544,6 +2565,9 @@ int main(int argc, char **argv)
(*dump_read_iter)->file = optarg;
dump_read_iter = &(*dump_read_iter)->next;
break;
@@ -3101,7 +3114,7 @@ index d6c81657d695..cabe8fb75532 100644
case 'm':
modversions = 1;
break;
-@@ -2655,6 +2679,11 @@ int main(int argc, char **argv)
+@@ -2642,6 +2666,11 @@ int main(int argc, char **argv)
}
free(buf.p);
diff --git a/sys-kernel/linux-sources-redcore/linux-sources-redcore-5.11.17.ebuild b/sys-kernel/linux-sources-redcore/linux-sources-redcore-5.11.22.ebuild
index 0926edee..41a5fac0 100644
--- a/sys-kernel/linux-sources-redcore/linux-sources-redcore-5.11.17.ebuild
+++ b/sys-kernel/linux-sources-redcore/linux-sources-redcore-5.11.22.ebuild
@@ -41,7 +41,6 @@ PATCHES=(
"${FILESDIR}"/"${KV_MAJOR}"-bootconfig-fallthrough.patch
"${FILESDIR}"/"${KV_MAJOR}"-apic_vector-spam-in-debug-mode-only.patch
"${FILESDIR}"/"${KV_MAJOR}"-iwlwifi-fix-5e003982b07ae.patch
- "${FILESDIR}"/"${KV_MAJOR}"-amd_iommu_init_info.patch
"${FILESDIR}"/"${KV_MAJOR}"-0001-Revert-hwmon-k10temp-Remove-support-for-displaying-v.patch
"${FILESDIR}"/"${KV_MAJOR}"-k10temp-fix-ZEN2-desktop-add-ZEN3-desktop.patch
"${FILESDIR}"/"${KV_MAJOR}"-k10temp-add-Renoir-support.patch