* [PATCH v1 0/3] mm: mm_cid static initialization fixes
@ 2025-12-24 17:33 Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 1/3] mm: Add missing static initializer for init_mm::mm_cid.lock Mathieu Desnoyers
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Mathieu Desnoyers @ 2025-12-24 17:33 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-kernel, Mathieu Desnoyers, Thomas Gleixner, stable,
linux-mm
Hi Andrew,
Here are 2 fixes for missing mm_cid fields for init_mm and efi_mm static
initialization. The renaming of cpu_bitmap to flexible_array (patch 2)
is needed for patch 3.
Those are relevant for mainline, with CC stable. They are based on
v6.19-rc2.
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Cc: linux-mm@kvack.org
Mathieu Desnoyers (3):
mm: Add missing static initializer for init_mm::mm_cid.lock
mm: Rename cpu_bitmap field to flexible_array
mm: Take into account mm_cid size for mm_struct static definitions
drivers/firmware/efi/efi.c | 2 +-
include/linux/mm_types.h | 18 +++++++++++++-----
mm/init-mm.c | 5 ++++-
3 files changed, 18 insertions(+), 7 deletions(-)
--
2.39.5
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v1 1/3] mm: Add missing static initializer for init_mm::mm_cid.lock
2025-12-24 17:33 [PATCH v1 0/3] mm: mm_cid static initialization fixes Mathieu Desnoyers
@ 2025-12-24 17:33 ` Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 2/3] mm: Rename cpu_bitmap field to flexible_array Mathieu Desnoyers
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Mathieu Desnoyers @ 2025-12-24 17:33 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-kernel, Mathieu Desnoyers, Thomas Gleixner, stable,
linux-mm
Initialize the mm_cid.lock struct member of init_mm.
Fixes: 8cea569ca785 ("sched/mmcid: Use proper data structures")
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Cc: linux-mm@kvack.org
---
mm/init-mm.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/mm/init-mm.c b/mm/init-mm.c
index 4600e7605cab..a514f8ce47e3 100644
--- a/mm/init-mm.c
+++ b/mm/init-mm.c
@@ -44,6 +44,9 @@ struct mm_struct init_mm = {
.mm_lock_seq = SEQCNT_ZERO(init_mm.mm_lock_seq),
#endif
.user_ns = &init_user_ns,
+#ifdef CONFIG_SCHED_MM_CID
+ .mm_cid.lock = __RAW_SPIN_LOCK_UNLOCKED(init_mm.mm_cid.lock),
+#endif
.cpu_bitmap = CPU_BITS_NONE,
INIT_MM_CONTEXT(init_mm)
};
--
2.39.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 2/3] mm: Rename cpu_bitmap field to flexible_array
2025-12-24 17:33 [PATCH v1 0/3] mm: mm_cid static initialization fixes Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 1/3] mm: Add missing static initializer for init_mm::mm_cid.lock Mathieu Desnoyers
@ 2025-12-24 17:33 ` Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 3/3] mm: Take into account mm_cid size for mm_struct static definitions Mathieu Desnoyers
2026-01-13 8:17 ` [PATCH v1 0/3] mm: mm_cid static initialization fixes Thomas Gleixner
3 siblings, 0 replies; 5+ messages in thread
From: Mathieu Desnoyers @ 2025-12-24 17:33 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-kernel, Mathieu Desnoyers, Thomas Gleixner, stable,
linux-mm, Mark Brown
The cpu_bitmap flexible array now contains more than just the
cpu_bitmap. In preparation for changing the static mm_struct
definitions to cover for the additional space required, change the
cpu_bitmap type from "unsigned long" to "char", require an unsigned long
alignment of the flexible array, and rename the field from "cpu_bitmap"
to "flexible_array".
Introduce the MM_STRUCT_FLEXIBLE_ARRAY_INIT macro to statically
initialize the flexible array. This covers the init_mm and efi_mm
static definitions.
This is a preparation step for fixing the missing mm_cid size for static
mm_struct definitions.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
Cc: linux-mm@kvack.org
---
drivers/firmware/efi/efi.c | 2 +-
include/linux/mm_types.h | 13 +++++++++----
mm/init-mm.c | 2 +-
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index a9070d00b833..3f5c2ae50024 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -73,10 +73,10 @@ struct mm_struct efi_mm = {
MMAP_LOCK_INITIALIZER(efi_mm)
.page_table_lock = __SPIN_LOCK_UNLOCKED(efi_mm.page_table_lock),
.mmlist = LIST_HEAD_INIT(efi_mm.mmlist),
- .cpu_bitmap = { [BITS_TO_LONGS(NR_CPUS)] = 0},
#ifdef CONFIG_SCHED_MM_CID
.mm_cid.lock = __RAW_SPIN_LOCK_UNLOCKED(efi_mm.mm_cid.lock),
#endif
+ .flexible_array = MM_STRUCT_FLEXIBLE_ARRAY_INIT,
};
struct workqueue_struct *efi_rts_wq;
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 42af2292951d..110b319a2ffb 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -1329,7 +1329,7 @@ struct mm_struct {
* The mm_cpumask needs to be at the end of mm_struct, because it
* is dynamically sized based on nr_cpu_ids.
*/
- unsigned long cpu_bitmap[];
+ char flexible_array[] __aligned(__alignof__(unsigned long));
};
/* Copy value to the first system word of mm flags, non-atomically. */
@@ -1366,19 +1366,24 @@ static inline void __mm_flags_set_mask_bits_word(struct mm_struct *mm,
MT_FLAGS_USE_RCU)
extern struct mm_struct init_mm;
+#define MM_STRUCT_FLEXIBLE_ARRAY_INIT \
+{ \
+ [0 ... sizeof(cpumask_t)-1] = 0 \
+}
+
/* Pointer magic because the dynamic array size confuses some compilers. */
static inline void mm_init_cpumask(struct mm_struct *mm)
{
unsigned long cpu_bitmap = (unsigned long)mm;
- cpu_bitmap += offsetof(struct mm_struct, cpu_bitmap);
+ cpu_bitmap += offsetof(struct mm_struct, flexible_array);
cpumask_clear((struct cpumask *)cpu_bitmap);
}
/* Future-safe accessor for struct mm_struct's cpu_vm_mask. */
static inline cpumask_t *mm_cpumask(struct mm_struct *mm)
{
- return (struct cpumask *)&mm->cpu_bitmap;
+ return (struct cpumask *)&mm->flexible_array;
}
#ifdef CONFIG_LRU_GEN
@@ -1469,7 +1474,7 @@ static inline cpumask_t *mm_cpus_allowed(struct mm_struct *mm)
{
unsigned long bitmap = (unsigned long)mm;
- bitmap += offsetof(struct mm_struct, cpu_bitmap);
+ bitmap += offsetof(struct mm_struct, flexible_array);
/* Skip cpu_bitmap */
bitmap += cpumask_size();
return (struct cpumask *)bitmap;
diff --git a/mm/init-mm.c b/mm/init-mm.c
index a514f8ce47e3..c5556bb9d5f0 100644
--- a/mm/init-mm.c
+++ b/mm/init-mm.c
@@ -47,7 +47,7 @@ struct mm_struct init_mm = {
#ifdef CONFIG_SCHED_MM_CID
.mm_cid.lock = __RAW_SPIN_LOCK_UNLOCKED(init_mm.mm_cid.lock),
#endif
- .cpu_bitmap = CPU_BITS_NONE,
+ .flexible_array = MM_STRUCT_FLEXIBLE_ARRAY_INIT,
INIT_MM_CONTEXT(init_mm)
};
--
2.39.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 3/3] mm: Take into account mm_cid size for mm_struct static definitions
2025-12-24 17:33 [PATCH v1 0/3] mm: mm_cid static initialization fixes Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 1/3] mm: Add missing static initializer for init_mm::mm_cid.lock Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 2/3] mm: Rename cpu_bitmap field to flexible_array Mathieu Desnoyers
@ 2025-12-24 17:33 ` Mathieu Desnoyers
2026-01-13 8:17 ` [PATCH v1 0/3] mm: mm_cid static initialization fixes Thomas Gleixner
3 siblings, 0 replies; 5+ messages in thread
From: Mathieu Desnoyers @ 2025-12-24 17:33 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-kernel, Mathieu Desnoyers, Thomas Gleixner, stable,
linux-mm, Mark Brown
Both init_mm and efi_mm static definitions need to make room for the
2 mm_cid cpumasks.
This fixes possible out-of-bounds accesses to init_mm and efi_mm.
Add a space between # and define for the mm_alloc_cid() definition to
make it consistent with the coding style used in the rest of this header
file.
Fixes: af7f588d8f73 ("sched: Introduce per-memory-map concurrency ID")
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
Cc: linux-mm@kvack.org
---
include/linux/mm_types.h | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 110b319a2ffb..aa4639888f89 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -1368,7 +1368,7 @@ extern struct mm_struct init_mm;
#define MM_STRUCT_FLEXIBLE_ARRAY_INIT \
{ \
- [0 ... sizeof(cpumask_t)-1] = 0 \
+ [0 ... sizeof(cpumask_t) + MM_CID_STATIC_SIZE - 1] = 0 \
}
/* Pointer magic because the dynamic array size confuses some compilers. */
@@ -1500,7 +1500,7 @@ static inline int mm_alloc_cid_noprof(struct mm_struct *mm, struct task_struct *
mm_init_cid(mm, p);
return 0;
}
-#define mm_alloc_cid(...) alloc_hooks(mm_alloc_cid_noprof(__VA_ARGS__))
+# define mm_alloc_cid(...) alloc_hooks(mm_alloc_cid_noprof(__VA_ARGS__))
static inline void mm_destroy_cid(struct mm_struct *mm)
{
@@ -1514,6 +1514,8 @@ static inline unsigned int mm_cid_size(void)
return cpumask_size() + bitmap_size(num_possible_cpus());
}
+/* Use 2 * NR_CPUS as worse case for static allocation. */
+# define MM_CID_STATIC_SIZE (2 * sizeof(cpumask_t))
#else /* CONFIG_SCHED_MM_CID */
static inline void mm_init_cid(struct mm_struct *mm, struct task_struct *p) { }
static inline int mm_alloc_cid(struct mm_struct *mm, struct task_struct *p) { return 0; }
@@ -1522,6 +1524,7 @@ static inline unsigned int mm_cid_size(void)
{
return 0;
}
+# define MM_CID_STATIC_SIZE 0
#endif /* CONFIG_SCHED_MM_CID */
struct mmu_gather;
--
2.39.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v1 0/3] mm: mm_cid static initialization fixes
2025-12-24 17:33 [PATCH v1 0/3] mm: mm_cid static initialization fixes Mathieu Desnoyers
` (2 preceding siblings ...)
2025-12-24 17:33 ` [PATCH v1 3/3] mm: Take into account mm_cid size for mm_struct static definitions Mathieu Desnoyers
@ 2026-01-13 8:17 ` Thomas Gleixner
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2026-01-13 8:17 UTC (permalink / raw)
To: Mathieu Desnoyers, Andrew Morton
Cc: linux-kernel, Mathieu Desnoyers, stable, linux-mm
On Wed, Dec 24 2025 at 12:33, Mathieu Desnoyers wrote:
> Here are 2 fixes for missing mm_cid fields for init_mm and efi_mm static
> initialization. The renaming of cpu_bitmap to flexible_array (patch 2)
> is needed for patch 3.
>
> Those are relevant for mainline, with CC stable. They are based on
> v6.19-rc2.
>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: stable@vger.kernel.org
> Cc: linux-mm@kvack.org
Reviewed-by: Thomas Gleixner <tglx@kernel.org>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-01-13 8:18 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-24 17:33 [PATCH v1 0/3] mm: mm_cid static initialization fixes Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 1/3] mm: Add missing static initializer for init_mm::mm_cid.lock Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 2/3] mm: Rename cpu_bitmap field to flexible_array Mathieu Desnoyers
2025-12-24 17:33 ` [PATCH v1 3/3] mm: Take into account mm_cid size for mm_struct static definitions Mathieu Desnoyers
2026-01-13 8:17 ` [PATCH v1 0/3] mm: mm_cid static initialization fixes Thomas Gleixner
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.