diff --git a/crypto/api.c b/crypto/api.c index bfd177a4313a01bc5c2953722be2384c31d468a3..c2c4eb14ef955f0761ea442b399307a44933daa5 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -36,7 +36,8 @@ EXPORT_SYMBOL_GPL(crypto_chain); DEFINE_STATIC_KEY_FALSE(__crypto_boot_test_finished); #endif -static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg); +static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg, + u32 type, u32 mask); static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type, u32 mask); @@ -145,7 +146,7 @@ static struct crypto_alg *crypto_larval_add(const char *name, u32 type, if (alg != &larval->alg) { kfree(larval); if (crypto_is_larval(alg)) - alg = crypto_larval_wait(alg); + alg = crypto_larval_wait(alg, type, mask); } return alg; @@ -197,7 +198,8 @@ static void crypto_start_test(struct crypto_larval *larval) crypto_schedule_test(larval); } -static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg) +static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg, + u32 type, u32 mask) { struct crypto_larval *larval; long time_left; @@ -219,12 +221,7 @@ static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg) crypto_larval_kill(larval); alg = ERR_PTR(-ETIMEDOUT); } else if (!alg) { - u32 type; - u32 mask; - alg = &larval->alg; - type = alg->cra_flags & ~(CRYPTO_ALG_LARVAL | CRYPTO_ALG_DEAD); - mask = larval->mask; alg = crypto_alg_lookup(alg->cra_name, type, mask) ?: ERR_PTR(-EAGAIN); } else if (IS_ERR(alg)) @@ -304,7 +301,7 @@ static struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, } if (!IS_ERR_OR_NULL(alg) && crypto_is_larval(alg)) - alg = crypto_larval_wait(alg); + alg = crypto_larval_wait(alg, type, mask); else if (alg) ; else if (!(mask & CRYPTO_ALG_TESTED)) @@ -352,7 +349,7 @@ struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask) ok = crypto_probing_notify(CRYPTO_MSG_ALG_REQUEST, larval); if (ok == NOTIFY_STOP) - alg = crypto_larval_wait(larval); + alg = crypto_larval_wait(larval, type, mask); else { crypto_mod_put(larval); alg = ERR_PTR(-ENOENT); diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c index 6fdd94c8919ec2697a81c6121c72bfe419fefabd..2996bcdea9a28e63bde7dd72abf83ac405cc8e30 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c @@ -1,4 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only +#include <linux/iommu.h> #include <linux/platform_device.h> #include <linux/of.h> #include <linux/module.h> @@ -19,6 +20,8 @@ struct tegra_mgbe { struct reset_control *rst_mac; struct reset_control *rst_pcs; + u32 iommu_sid; + void __iomem *hv; void __iomem *regs; void __iomem *xpcs; @@ -50,7 +53,6 @@ struct tegra_mgbe { #define MGBE_WRAP_COMMON_INTR_ENABLE 0x8704 #define MAC_SBD_INTR BIT(2) #define MGBE_WRAP_AXI_ASID0_CTRL 0x8400 -#define MGBE_SID 0x6 static int __maybe_unused tegra_mgbe_suspend(struct device *dev) { @@ -84,7 +86,7 @@ static int __maybe_unused tegra_mgbe_resume(struct device *dev) writel(MAC_SBD_INTR, mgbe->regs + MGBE_WRAP_COMMON_INTR_ENABLE); /* Program SID */ - writel(MGBE_SID, mgbe->hv + MGBE_WRAP_AXI_ASID0_CTRL); + writel(mgbe->iommu_sid, mgbe->hv + MGBE_WRAP_AXI_ASID0_CTRL); value = readl(mgbe->xpcs + XPCS_WRAP_UPHY_STATUS); if ((value & XPCS_WRAP_UPHY_STATUS_TX_P_UP) == 0) { @@ -241,6 +243,12 @@ static int tegra_mgbe_probe(struct platform_device *pdev) if (IS_ERR(mgbe->xpcs)) return PTR_ERR(mgbe->xpcs); + /* get controller's stream id from iommu property in device tree */ + if (!tegra_dev_iommu_get_stream_id(mgbe->dev, &mgbe->iommu_sid)) { + dev_err(mgbe->dev, "failed to get iommu stream id\n"); + return -EINVAL; + } + res.addr = mgbe->regs; res.irq = irq; @@ -346,7 +354,7 @@ static int tegra_mgbe_probe(struct platform_device *pdev) writel(MAC_SBD_INTR, mgbe->regs + MGBE_WRAP_COMMON_INTR_ENABLE); /* Program SID */ - writel(MGBE_SID, mgbe->hv + MGBE_WRAP_AXI_ASID0_CTRL); + writel(mgbe->iommu_sid, mgbe->hv + MGBE_WRAP_AXI_ASID0_CTRL); plat->flags |= STMMAC_FLAG_SERDES_UP_AFTER_PHY_LINKUP; diff --git a/include/linux/bpf.h b/include/linux/bpf.h index bdadb0bb6cecd18c047b6548ae03134d43d4894a..80175c7a21c272364dbe1d4f105e87e8a10b9eb2 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -276,7 +276,7 @@ struct bpf_map { u32 btf_vmlinux_value_type_id; struct btf *btf; #ifdef CONFIG_MEMCG - struct obj_cgroup *objcg; + RH_KABI_EXCLUDE(struct obj_cgroup *objcg) #endif char name[BPF_OBJ_NAME_LEN]; struct mutex freeze_mutex; diff --git a/include/linux/bpf_mem_alloc.h b/include/linux/bpf_mem_alloc.h index e45162ef59bb1a6d65489a26ce6f0b2d5cfb0bef..94190a41640e5651f4d22e41ca271979f25b9a21 100644 --- a/include/linux/bpf_mem_alloc.h +++ b/include/linux/bpf_mem_alloc.h @@ -11,7 +11,7 @@ struct bpf_mem_caches; struct bpf_mem_alloc { struct bpf_mem_caches __percpu *caches; struct bpf_mem_cache __percpu *cache; - struct obj_cgroup *objcg; + RH_KABI_EXCLUDE(struct obj_cgroup *objcg) bool percpu; struct work_struct work; }; diff --git a/include/linux/fsnotify_backend.h b/include/linux/fsnotify_backend.h index 3ecf7768e577940f9ea79393c38bc2550ce7ddb8..cdab5f6e6da52a81e15d0a2d0bee2126bb73bbc8 100644 --- a/include/linux/fsnotify_backend.h +++ b/include/linux/fsnotify_backend.h @@ -232,7 +232,7 @@ struct fsnotify_group { * notification list is too * full */ - struct mem_cgroup *memcg; /* memcg to charge allocations */ + RH_KABI_EXCLUDE(struct mem_cgroup *memcg) /* memcg to charge allocations */ /* groups can define private fields here or use the void *private */ union { diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index 1add16f216124d8e15cc55a8d009487bc0804017..f29f1d4d1d7c7554ea1848042b39a192584c1c05 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h @@ -54,6 +54,8 @@ struct mempolicy { nodemask_t cpuset_mems_allowed; /* relative to these nodes */ nodemask_t user_nodemask; /* nodemask passed by user */ } w; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) }; /* diff --git a/include/linux/mempool.h b/include/linux/mempool.h index 7b151441341b4c2895ebb5005787f3b4e010f53c..a9a8accd3e38ee29ec13a99e7bb39c236dc556c2 100644 --- a/include/linux/mempool.h +++ b/include/linux/mempool.h @@ -25,6 +25,9 @@ typedef struct mempool_s { mempool_alloc_t *alloc; mempool_free_t *free; wait_queue_head_t wait; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) } mempool_t; static inline bool mempool_initialized(mempool_t *pool) diff --git a/include/linux/memremap.h b/include/linux/memremap.h index 3f7143ade32c049d55f9f2025cdfb712dda9b613..3c2b05d5a2381d76f95adbec60f65f875461b261 100644 --- a/include/linux/memremap.h +++ b/include/linux/memremap.h @@ -26,6 +26,7 @@ struct vmem_altmap { unsigned long align; unsigned long alloc; bool inaccessible; + RH_KABI_RESERVE(1) }; /* diff --git a/include/linux/mm.h b/include/linux/mm.h index b9ff24a4e7dfe122dc37a75a0bf9fe2a0b36bdb6..0d9f101c4b41986a69a181e2f5330ab9a0e62e92 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -588,6 +588,9 @@ struct vm_fault { * page table to avoid allocation from * atomic context. */ + + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) }; /* @@ -2413,6 +2416,7 @@ struct follow_pfnmap_args { pgprot_t pgprot; bool writable; bool special; + RH_KABI_RESERVE(1) }; int follow_pfnmap_start(struct follow_pfnmap_args *args); void follow_pfnmap_end(struct follow_pfnmap_args *args); diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 6e3bdf8e38bcaee66a71f5566ac7debb94c0ee78..2979cdc32a3c9530d3ba8dd0508cb804a0342b7f 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -555,6 +555,7 @@ struct page_frag_cache { */ unsigned int pagecnt_bias; bool pfmemalloc; + RH_KABI_RESERVE(1) }; typedef unsigned long vm_flags_t; @@ -1026,12 +1027,15 @@ struct mm_struct { unsigned long bitmap; #ifdef CONFIG_MEMCG /* points to the memcg of "owner" above */ - struct mem_cgroup *memcg; + RH_KABI_EXCLUDE(struct mem_cgroup *memcg) #endif } lru_gen; #endif /* CONFIG_LRU_GEN_WALKS_MMU */ } __randomize_layout; - + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) /* * The mm_cpumask needs to be at the end of mm_struct, because it * is dynamically sized based on nr_cpu_ids. diff --git a/include/linux/mm_types_task.h b/include/linux/mm_types_task.h index bff5706b76e14f71d238ebacbe8f49e36c1bd272..6cd74d02a0a2692d718915d67336fc1725f137fa 100644 --- a/include/linux/mm_types_task.h +++ b/include/linux/mm_types_task.h @@ -9,7 +9,7 @@ */ #include <linux/types.h> - +#include <linux/rh_kabi.h> #include <asm/page.h> #ifdef CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH @@ -65,6 +65,9 @@ struct tlbflush_unmap_batch { */ bool writable; #endif + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) }; #endif /* _LINUX_MM_TYPES_TASK_H */ diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index d39ebb10caeb68453af7595a741bd5fe2c390b40..b15d35f072f702d15df8ea76f23003982acf4435 100644 --- a/include/linux/mmu_notifier.h +++ b/include/linux/mmu_notifier.h @@ -231,6 +231,7 @@ struct mmu_notifier { struct mm_struct *mm; struct rcu_head rcu; unsigned int users; + RH_KABI_RESERVE(1) }; /** @@ -243,6 +244,9 @@ struct mmu_interval_notifier_ops { bool (*invalidate)(struct mmu_interval_notifier *interval_sub, const struct mmu_notifier_range *range, unsigned long cur_seq); + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) }; struct mmu_interval_notifier { @@ -251,6 +255,7 @@ struct mmu_interval_notifier { struct mm_struct *mm; struct hlist_node deferred_item; unsigned long invalidate_seq; + RH_KABI_RESERVE(1) }; #ifdef CONFIG_MMU_NOTIFIER @@ -266,6 +271,9 @@ struct mmu_notifier_range { unsigned flags; enum mmu_notifier_event event; void *owner; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) }; static inline int mm_has_notifiers(struct mm_struct *mm) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 80bc5640bb60d225221a5ea5f866acfe54adc67f..ffbe13f6f285e974b3106aa8d880184422fae22c 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -117,6 +117,9 @@ extern int page_group_by_mobility_disabled; struct free_area { struct list_head free_list[MIGRATE_TYPES]; unsigned long nr_free; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) }; struct pglist_data; @@ -478,6 +481,10 @@ struct lru_gen_mm_state { unsigned long *filters[NR_BLOOM_FILTERS]; /* the mm stats for debugging */ unsigned long stats[NR_HIST_GENS][NR_MM_STATS]; + + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) }; struct lru_gen_mm_walk { @@ -495,6 +502,9 @@ struct lru_gen_mm_walk { int batched; bool can_swap; bool force_scan; + + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) }; /* @@ -551,6 +561,10 @@ struct lru_gen_memcg { struct hlist_nulls_head fifo[MEMCG_NR_GENS][MEMCG_NR_BINS]; /* protects the above */ spinlock_t lock; + + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) }; void lru_gen_init_pgdat(struct pglist_data *pgdat); @@ -634,6 +648,11 @@ struct lruvec { struct pglist_data *pgdat; #endif struct zswap_lruvec_state zswap_lruvec_state; + + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) }; /* Isolate for asynchronous migration */ @@ -696,6 +715,10 @@ struct per_cpu_pages { /* Lists of pages, one per migrate type stored on the pcp-lists */ struct list_head lists[NR_PCP_LISTS]; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) } ____cacheline_aligned_in_smp; struct per_cpu_zonestat { @@ -716,6 +739,8 @@ struct per_cpu_zonestat { struct per_cpu_nodestat { s8 stat_threshold; s8 vm_node_stat_diff[NR_VM_NODE_STAT_ITEMS]; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) }; #endif /* !__GENERATING_BOUNDS.H */ @@ -990,6 +1015,11 @@ struct zone { /* Zone statistics */ atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; atomic_long_t vm_numa_event[NR_VM_NUMA_EVENT_ITEMS]; + + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) } ____cacheline_internodealigned_in_smp; enum pgdat_flags { @@ -1245,6 +1275,9 @@ struct zoneref { */ struct zonelist { struct zoneref _zonerefs[MAX_ZONES_PER_ZONELIST + 1]; + + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) }; /* @@ -1259,6 +1292,8 @@ struct deferred_split { spinlock_t split_queue_lock; struct list_head split_queue; unsigned long split_queue_len; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) }; #endif @@ -1284,6 +1319,9 @@ struct memory_failure_stats { unsigned long failed; unsigned long delayed; unsigned long recovered; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) }; #endif @@ -1435,6 +1473,10 @@ typedef struct pglist_data { #ifdef CONFIG_MEMORY_FAILURE struct memory_failure_stats mf_stats; #endif + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) } pg_data_t; #define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages) diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index 2770db2fa080d2925d1e17b1915b4242ce93f7a2..5174142d95c9bf3d81e01e3b0d06de767be37c07 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h @@ -3,6 +3,7 @@ #define _NF_CONNTRACK_COMMON_H #include <linux/refcount.h> +#include <linux/rh_kabi.h> #include <uapi/linux/netfilter/nf_conntrack_common.h> struct ip_conntrack_stat { @@ -19,6 +20,7 @@ struct ip_conntrack_stat { unsigned int expect_delete; unsigned int search_restart; unsigned int chaintoolong; + RH_KABI_RESERVE(1); }; #define NFCT_INFOMASK 7UL diff --git a/include/linux/node.h b/include/linux/node.h index 9a881c2208b3bdaa44b6afb9c23450261b3e622b..0fb0e1d0c772f05a1b14d5d334696e187737f2a9 100644 --- a/include/linux/node.h +++ b/include/linux/node.h @@ -31,6 +31,8 @@ struct access_coordinate { unsigned int write_bandwidth; unsigned int read_latency; unsigned int write_latency; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) }; /* diff --git a/include/linux/ns_common.h b/include/linux/ns_common.h index 7d22ea50b09841ed2f764273564e53588e9b7a4e..b311a6cb9062989f2a1cabeb0aa1a7889e944f5d 100644 --- a/include/linux/ns_common.h +++ b/include/linux/ns_common.h @@ -3,6 +3,7 @@ #define _LINUX_NS_COMMON_H #include <linux/refcount.h> +#include <linux/rh_kabi.h> struct proc_ns_operations; @@ -11,6 +12,7 @@ struct ns_common { const struct proc_ns_operations *ops; unsigned int inum; refcount_t count; + RH_KABI_RESERVE(1) }; #endif diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 68a5f1ff3301c6cfba823cab8a418d9ca6f25893..482280c720854601df6f6fcd4cbc756b7de0ac97 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -1073,6 +1073,7 @@ struct wait_page_queue { struct folio *folio; int bit_nr; wait_queue_entry_t wait; + RH_KABI_RESERVE(1) }; static inline bool wake_page_match(struct wait_page_queue *wait_page, @@ -1352,6 +1353,7 @@ struct readahead_control { unsigned int _batch_count; bool _workingset; unsigned long _pflags; + RH_KABI_RESERVE(1) }; #define DEFINE_READAHEAD(ractl, f, r, m, i) \ diff --git a/include/linux/pagevec.h b/include/linux/pagevec.h index 5d3a0cccc6bf8dbe0a1fcd294cf3f39d9955259c..dd1975c5952e97951e628853c52116b24b76e9ce 100644 --- a/include/linux/pagevec.h +++ b/include/linux/pagevec.h @@ -10,6 +10,7 @@ #define _LINUX_PAGEVEC_H #include <linux/types.h> +#include <linux/rh_kabi.h> /* 31 pointers + header align the folio_batch structure to a power of two */ #define PAGEVEC_SIZE 31 @@ -29,6 +30,8 @@ struct folio_batch { unsigned char nr; unsigned char i; bool percpu_pvec_drained; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) struct folio *folios[PAGEVEC_SIZE]; }; diff --git a/include/linux/rmap.h b/include/linux/rmap.h index d5e93e44322e50c45ff6896ae34b32c8328e9502..b5c0ea45b371accf045205f89928df2451651c46 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h @@ -64,6 +64,10 @@ struct anon_vma { /* Interval tree of private "related" vmas */ struct rb_root_cached rb_root; + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) }; /* diff --git a/include/linux/sched.h b/include/linux/sched.h index ad20a656e741eb9ba702b5b0234176570ab7fabf..c36122872426dd4b1e2ad597ef3ebda2bc635931 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -14,6 +14,7 @@ #include <linux/thread_info.h> #include <linux/preempt.h> #include <linux/cpumask_types.h> +#include <linux/rh_kabi.h> #include <linux/cache.h> #include <linux/irqflags_types.h> @@ -1250,7 +1251,7 @@ struct task_struct { struct io_context *io_context; #ifdef CONFIG_COMPACTION - struct capture_control *capture_control; + RH_KABI_EXCLUDE(struct capture_control *capture_control) #endif /* Ptrace state: */ unsigned long ptrace_message; @@ -1490,7 +1491,7 @@ struct task_struct { #endif #ifdef CONFIG_MEMCG_V1 - struct mem_cgroup *memcg_in_oom; + RH_KABI_EXCLUDE(struct mem_cgroup *memcg_in_oom) #endif #ifdef CONFIG_MEMCG @@ -1498,10 +1499,10 @@ struct task_struct { unsigned int memcg_nr_pages_over_high; /* Used by memcontrol for targeted memcg charge: */ - struct mem_cgroup *active_memcg; + RH_KABI_EXCLUDE(struct mem_cgroup *active_memcg) /* Cache for current->cgroups->memcg->objcg lookups: */ - struct obj_cgroup *objcg; + RH_KABI_EXCLUDE(struct obj_cgroup *objcg) #endif #ifdef CONFIG_BLK_CGROUP diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 1a00be90d93a9fa0f6234dd4854b59027d1e0ffe..0b96b84ae42d1c481b5d8a043977442c0f46d108 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -6,6 +6,7 @@ #include <linux/types.h> #include <linux/refcount.h> #include <linux/completion.h> +#include <linux/rh_kabi.h> #define SHRINKER_UNIT_BITS BITS_PER_LONG @@ -52,7 +53,11 @@ struct shrink_control { unsigned long nr_scanned; /* current memcg being shrunk (for memcg aware shrinkers) */ - struct mem_cgroup *memcg; + RH_KABI_EXCLUDE(struct mem_cgroup *memcg) + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) }; #define SHRINK_STOP (~0UL) @@ -115,6 +120,11 @@ struct shrinker { #endif /* objs pending delete, per node */ atomic_long_t *nr_deferred; + + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) }; #define DEFAULT_SEEKS 2 /* A good number if you don't know better. */ diff --git a/include/linux/slab.h b/include/linux/slab.h index b35e2db7eb0ecc4933126f56b2c3dbf369cbb44b..aca61252e6c7d90364ff0a92759519b5ef64cd51 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -309,6 +309,8 @@ struct kmem_cache_args { * %NULL means no constructor. */ void (*ctor)(void *); + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) }; struct kmem_cache *__kmem_cache_create_args(const char *name, diff --git a/include/linux/swap.h b/include/linux/swap.h index f3e0ac20c2e8c91f75d1afd62d736cce113e5fad..323b3d98ea7ad594eb5f08dea9f30004848e8957 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -256,6 +256,8 @@ struct swap_cluster_info { u8 flags; u8 order; struct list_head list; + + RH_KABI_RESERVE(1) }; #define CLUSTER_FLAG_FREE 1 /* This cluster is free */ #define CLUSTER_FLAG_NONFULL 2 /* This cluster is on nonfull list */ @@ -283,6 +285,9 @@ struct swap_cluster_info { */ struct percpu_cluster { unsigned int next[SWAP_NR_ORDERS]; /* Likely next allocation offset */ + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) }; /* diff --git a/include/net/sock.h b/include/net/sock.h index f29c14448938753799953be3b6231d2cc3d6ab02..eb5af43e0cd18ac57817aa224873009757d1d8eb 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -434,7 +434,7 @@ struct sock { __cacheline_group_begin(sock_read_rxtx); int sk_err; struct socket *sk_socket; - struct mem_cgroup *sk_memcg; + RH_KABI_EXCLUDE(struct mem_cgroup *sk_memcg) #ifdef CONFIG_XFRM struct xfrm_policy __rcu *sk_policy[2]; #endif diff --git a/mm/slab.h b/mm/slab.h index 92ca5ff2037534bd7cdfbfb765baec032e29ed4e..b0f0c9f2b34ab75f0d6c65f179c26c7df2f1a781 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -310,7 +310,12 @@ struct kmem_cache { unsigned int useroffset; /* Usercopy region offset */ unsigned int usersize; /* Usercopy region size */ #endif - + RH_KABI_RESERVE(1) + RH_KABI_RESERVE(2) + RH_KABI_RESERVE(3) + RH_KABI_RESERVE(4) + RH_KABI_RESERVE(5) + RH_KABI_RESERVE(6) struct kmem_cache_node *node[MAX_NUMNODES]; }; diff --git a/redhat/kernel.changelog-10.0 b/redhat/kernel.changelog-10.0 index 7f0fd5e36e2de5745b574893d0c118ac8e295192..94e07002039b1bb281d109236600e8c118682025 100644 --- a/redhat/kernel.changelog-10.0 +++ b/redhat/kernel.changelog-10.0 @@ -1,3 +1,46 @@ +* Tue Mar 25 2025 Jan Stancek <jstancek@redhat.com> [6.12.0-55.9.1.el10_0] +- af_packet: fix vlan_get_protocol_dgram() vs MSG_PEEK (Davide Caratti) [RHEL-80306] {CVE-2024-57901} +- redhat: kabi: update stablelist checksums (ÄŒestmÃr Kalina) [RHEL-80552] +- shrinker: include rh_kabi.h (ÄŒestmÃr Kalina) [RHEL-80552] +- redhat: pad the folio_batch struct (Nico Pache) [RHEL-80552] +- redhat: pad the lruvec structure for the kabi (Nico Pache) [RHEL-80552] +- redhat: pad the zone structures for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the wait_page_queue for the kabi (Nico Pache) [RHEL-80552] +- redhat: pad the lru_gen functions for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the vmem_altmap struct for the kabi (Nico Pache) [RHEL-80552] +- redhat: pad the vm_fault structure (Nico Pache) [RHEL-80552] +- redhat: pad the tlbflush_unmap_batch struct for the KABI (Nico Pache) [RHEL-80552] +- redhat: pad the swap_cluster_info structure for KABI (Nico Pache) [RHEL-80552] +- redhat: pad the shrinker struct for KABI (Nico Pache) [RHEL-80552] +- redhat: pad the shrink_control structure for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the readahead_control structure for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the pglist_data structure for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the percpu structures (Nico Pache) [RHEL-80552] +- redhat: pad the page_frag_cache for the kabi (Nico Pache) [RHEL-80552] +- redhat: pad the ns_common structure for kabi (Nico Pache) [RHEL-80552] +- redhat: pad mmu_notifier functions for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the mm_struct for kabi (Nico Pache) [RHEL-80552] +- redhat: pad mempool_s structure for kabi (Nico Pache) [RHEL-80552] +- redhat: pad mempolicy struct for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the memory_failure_stats for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the kmem_cache_args struct (Nico Pache) [RHEL-80552] +- redhat: pad the kmem_cache structure (Nico Pache) [RHEL-80552] +- redhat: pad ip_conntrack_stat for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the free_area struct (Nico Pache) [RHEL-80552] +- redhat: pad follow_pfnmap_args for kabi (Nico Pache) [RHEL-80552] +- redhat: pad anon_vma for kabi (Nico Pache) [RHEL-80552] +- redhat: pad access_coordinate for kabi (Nico Pache) [RHEL-80552] +- redhat: pad the deferred_split queue for the kabi checker (Nico Pache) [RHEL-80552] +- redhat: hide capture_control from kabi checker (Nico Pache) [RHEL-80552] +- mm/memcg: Exclude mem_cgroup/obj_cgroup pointer from kABI signature computation (Waiman Long) [RHEL-80552] +- net: stmmac: dwmac-tegra: Read iommu stream id from device tree (Izabela Bakollari) [RHEL-75653] {CVE-2025-21663} +- Revert "smb: client: fix chmod(2) regression with ATTR_READONLY" (Jan Stancek) +Resolves: RHEL-75653, RHEL-80306, RHEL-80552 + +* Thu Mar 20 2025 Jan Stancek <jstancek@redhat.com> [6.12.0-55.8.1.el10_0] +- crypto: api - Fix larval relookup type and mask (Herbert Xu) [RHEL-78993] +Resolves: RHEL-78993 + * Mon Mar 17 2025 Jan Stancek <jstancek@redhat.com> [6.12.0-55.7.1.el10_0] - Enable Intel VPU driver for RHEL (Fabien Dupont) [RHEL-38582] - arm64: cacheinfo: Avoid out-of-bounds write to cacheinfo array (Radu Rendec) [RHEL-80226]