| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/03 18:37 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch series only adds 'const' qualifiers to pointer parameters across memcontrol, swap, and page counter helper functions to improve const-correctness. It does not introduce or modify executable logic, runtime assertions, control flow, or data structure layouts.",
"WorthFuzzing": false
} |
| 1/1 | 2026/09/03 18:37 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 174dbc6f4706456cb52f4838fde6845cfc0b76de\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Thu Sep 3 18:37:56 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h\nindex 945d7dbf1bb2c..e18b44965d05b 100644\n--- a/include/linux/memcontrol.h\n+++ b/include/linux/memcontrol.h\n@@ -363,7 +363,7 @@ enum objext_flags {\n *\n * The caller must ensure that the returned memcg won't be released.\n */\n-static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)\n+static inline struct mem_cgroup *obj_cgroup_memcg(const struct obj_cgroup *objcg)\n {\n \tlockdep_assert_once(rcu_read_lock_held() || lockdep_is_held(\u0026cgroup_mutex));\n \treturn objcg ? READ_ONCE(objcg-\u003ememcg) : NULL;\n@@ -377,7 +377,7 @@ static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)\n * or NULL. This function assumes that the folio is known to have a\n * proper object cgroup pointer.\n */\n-static inline struct obj_cgroup *folio_objcg(struct folio *folio)\n+static inline struct obj_cgroup *folio_objcg(const struct folio *folio)\n {\n \tunsigned long memcg_data = folio-\u003ememcg_data;\n \n@@ -415,7 +415,7 @@ static inline struct obj_cgroup *folio_objcg(struct folio *folio)\n * Note: The caller should hold an rcu read lock or cgroup_mutex to protect\n * memcg associated with a folio from being released.\n */\n-static inline struct mem_cgroup *folio_memcg(struct folio *folio)\n+static inline struct mem_cgroup *folio_memcg(const struct folio *folio)\n {\n \tstruct obj_cgroup *objcg = folio_objcg(folio);\n \n@@ -428,7 +428,7 @@ static inline struct mem_cgroup *folio_memcg(struct folio *folio)\n *\n * Returns true if folio is charged to a memory cgroup, otherwise returns false.\n */\n-static inline bool folio_memcg_charged(struct folio *folio)\n+static inline bool folio_memcg_charged(const struct folio *folio)\n {\n \treturn folio-\u003ememcg_data != 0;\n }\n@@ -448,7 +448,7 @@ static inline bool folio_memcg_charged(struct folio *folio)\n * A caller should hold an rcu read lock to protect memcg associated with a\n * page from being released.\n */\n-static inline struct mem_cgroup *folio_memcg_check(struct folio *folio)\n+static inline struct mem_cgroup *folio_memcg_check(const struct folio *folio)\n {\n \t/*\n \t * Because folio-\u003ememcg_data might be changed asynchronously\n@@ -465,14 +465,14 @@ static inline struct mem_cgroup *folio_memcg_check(struct folio *folio)\n \treturn obj_cgroup_memcg(objcg);\n }\n \n-static inline struct mem_cgroup *page_memcg_check(struct page *page)\n+static inline struct mem_cgroup *page_memcg_check(const struct page *page)\n {\n \tif (PageTail(page))\n \t\treturn NULL;\n-\treturn folio_memcg_check((struct folio *)page);\n+\treturn folio_memcg_check((const struct folio *)page);\n }\n \n-static inline struct mem_cgroup *get_mem_cgroup_from_objcg(struct obj_cgroup *objcg)\n+static inline struct mem_cgroup *get_mem_cgroup_from_objcg(const struct obj_cgroup *objcg)\n {\n \tstruct mem_cgroup *memcg;\n \n@@ -494,19 +494,19 @@ static inline struct mem_cgroup *get_mem_cgroup_from_objcg(struct obj_cgroup *ob\n * that the folio has an associated memory cgroup. It's not safe to call\n * this function against some types of folios, e.g. slab folios.\n */\n-static inline bool folio_memcg_kmem(struct folio *folio)\n+static inline bool folio_memcg_kmem(const struct folio *folio)\n {\n \tVM_BUG_ON_PGFLAGS(PageTail(\u0026folio-\u003epage), \u0026folio-\u003epage);\n \tVM_BUG_ON_FOLIO(folio-\u003ememcg_data \u0026 MEMCG_DATA_OBJEXTS, folio);\n \treturn folio-\u003ememcg_data \u0026 MEMCG_DATA_KMEM;\n }\n \n-static inline bool PageMemcgKmem(struct page *page)\n+static inline bool PageMemcgKmem(const struct page *page)\n {\n \treturn folio_memcg_kmem(page_folio(page));\n }\n \n-static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)\n+static inline bool mem_cgroup_is_root(const struct mem_cgroup *memcg)\n {\n \treturn (memcg == root_mem_cgroup);\n }\n@@ -522,7 +522,7 @@ static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)\n * and do not honour sc-\u003ememcg can use this to early-return 0 in per-memcg\n * contexts.\n */\n-static inline bool mem_cgroup_shrink_is_root(struct shrink_control *sc)\n+static inline bool mem_cgroup_shrink_is_root(const struct shrink_control *sc)\n {\n \treturn !sc-\u003ememcg || mem_cgroup_is_root(sc-\u003ememcg);\n }\n@@ -537,8 +537,8 @@ static inline bool mem_cgroup_disabled(void)\n \treturn !cgroup_subsys_enabled(memory_cgrp_subsys);\n }\n \n-static inline void mem_cgroup_protection(struct mem_cgroup *root,\n-\t\t\t\t\t struct mem_cgroup *memcg,\n+static inline void mem_cgroup_protection(const struct mem_cgroup *root,\n+\t\t\t\t\t const struct mem_cgroup *memcg,\n \t\t\t\t\t unsigned long *min,\n \t\t\t\t\t unsigned long *low,\n \t\t\t\t\t unsigned long *usage)\n@@ -592,8 +592,8 @@ static inline void mem_cgroup_protection(struct mem_cgroup *root,\n void mem_cgroup_calculate_protection(struct mem_cgroup *root,\n \t\t\t\t struct mem_cgroup *memcg);\n \n-static inline bool mem_cgroup_unprotected(struct mem_cgroup *target,\n-\t\t\t\t\t struct mem_cgroup *memcg)\n+static inline bool mem_cgroup_unprotected(const struct mem_cgroup *target,\n+\t\t\t\t\t const struct mem_cgroup *memcg)\n {\n \t/*\n \t * The root memcg doesn't account charges, and doesn't support\n@@ -604,8 +604,8 @@ static inline bool mem_cgroup_unprotected(struct mem_cgroup *target,\n \t\tmemcg == target;\n }\n \n-static inline bool mem_cgroup_below_low(struct mem_cgroup *target,\n-\t\t\t\t\tstruct mem_cgroup *memcg)\n+static inline bool mem_cgroup_below_low(const struct mem_cgroup *target,\n+\t\t\t\t\tconst struct mem_cgroup *memcg)\n {\n \tif (mem_cgroup_unprotected(target, memcg))\n \t\treturn false;\n@@ -614,8 +614,8 @@ static inline bool mem_cgroup_below_low(struct mem_cgroup *target,\n \t\tpage_counter_read(\u0026memcg-\u003ememory);\n }\n \n-static inline bool mem_cgroup_below_min(struct mem_cgroup *target,\n-\t\t\t\t\tstruct mem_cgroup *memcg)\n+static inline bool mem_cgroup_below_min(const struct mem_cgroup *target,\n+\t\t\t\t\tconst struct mem_cgroup *memcg)\n {\n \tif (mem_cgroup_unprotected(target, memcg))\n \t\treturn false;\n@@ -688,7 +688,7 @@ void mem_cgroup_migrate(struct folio *old, struct folio *new);\n * @pgdat combination. This can be the node lruvec, if the memory\n * controller is disabled.\n */\n-static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,\n+static inline struct lruvec *mem_cgroup_lruvec(const struct mem_cgroup *memcg,\n \t\t\t\t\t struct pglist_data *pgdat)\n {\n \tstruct mem_cgroup_per_node *mz;\n@@ -729,7 +729,7 @@ static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,\n * their binding is stable if the returned lruvec matches the one the caller has\n * locked. Useful for lock batching.\n */\n-static inline struct lruvec *folio_lruvec(struct folio *folio)\n+static inline struct lruvec *folio_lruvec(const struct folio *folio)\n {\n \tstruct mem_cgroup *memcg = folio_memcg(folio);\n \n@@ -743,11 +743,11 @@ struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm);\n \n struct mem_cgroup *get_mem_cgroup_from_current(void);\n \n-struct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio);\n+struct mem_cgroup *get_mem_cgroup_from_folio(const struct folio *folio);\n \n-struct lruvec *folio_lruvec_lock(struct folio *folio);\n-struct lruvec *folio_lruvec_lock_irq(struct folio *folio);\n-struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,\n+struct lruvec *folio_lruvec_lock(const struct folio *folio);\n+struct lruvec *folio_lruvec_lock_irq(const struct folio *folio);\n+struct lruvec *folio_lruvec_lock_irqsave(const struct folio *folio,\n \t\t\t\t\t\tunsigned long *flags);\n \n static inline\n@@ -806,7 +806,7 @@ void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *);\n void mem_cgroup_scan_tasks(struct mem_cgroup *memcg,\n \t\t\t int (*)(struct task_struct *, void *), void *arg);\n \n-static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memcg)\n+static inline unsigned short mem_cgroup_private_id(const struct mem_cgroup *memcg)\n {\n \tif (mem_cgroup_disabled())\n \t\treturn 0;\n@@ -815,7 +815,7 @@ static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memcg)\n }\n struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id);\n \n-static inline u64 mem_cgroup_id(struct mem_cgroup *memcg)\n+static inline u64 mem_cgroup_id(const struct mem_cgroup *memcg)\n {\n \treturn memcg ? cgroup_id(memcg-\u003ecss.cgroup) : 0;\n }\n@@ -827,7 +827,7 @@ static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)\n \treturn mem_cgroup_from_css(seq_css(m));\n }\n \n-static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)\n+static inline struct mem_cgroup *lruvec_memcg(const struct lruvec *lruvec)\n {\n \tstruct mem_cgroup_per_node *mz;\n \n@@ -844,13 +844,13 @@ static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)\n *\n * Returns the parent memcg, or NULL if this is the root.\n */\n-static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)\n+static inline struct mem_cgroup *parent_mem_cgroup(const struct mem_cgroup *memcg)\n {\n \treturn mem_cgroup_from_css(memcg-\u003ecss.parent);\n }\n \n-static inline bool mem_cgroup_is_descendant(struct mem_cgroup *memcg,\n-\t\t\t struct mem_cgroup *root)\n+static inline bool mem_cgroup_is_descendant(const struct mem_cgroup *memcg,\n+\t\t\t const struct mem_cgroup *root)\n {\n \tif (root == memcg)\n \t\treturn true;\n@@ -858,7 +858,7 @@ static inline bool mem_cgroup_is_descendant(struct mem_cgroup *memcg,\n }\n \n static inline bool mm_match_cgroup(struct mm_struct *mm,\n-\t\t\t\t struct mem_cgroup *memcg)\n+\t\t\t\t const struct mem_cgroup *memcg)\n {\n \tstruct mem_cgroup *task_memcg;\n \tbool match = false;\n@@ -871,8 +871,8 @@ static inline bool mm_match_cgroup(struct mm_struct *mm,\n \treturn match;\n }\n \n-struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(struct folio *folio);\n-ino_t page_cgroup_ino(struct page *page);\n+struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(const struct folio *folio);\n+ino_t page_cgroup_ino(const struct page *page);\n \n static inline bool mem_cgroup_online(struct mem_cgroup *memcg)\n {\n@@ -885,7 +885,7 @@ void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,\n \t\tint zid, long nr_pages);\n \n static inline\n-unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,\n+unsigned long mem_cgroup_get_zone_lru_size(const struct lruvec *lruvec,\n \t\tenum lru_list lru, int zone_idx)\n {\n \tstruct mem_cgroup_per_node *mz;\n@@ -902,9 +902,9 @@ static inline void mem_cgroup_handle_over_high(gfp_t gfp_mask)\n \t\t__mem_cgroup_handle_over_high(gfp_mask);\n }\n \n-unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg);\n+unsigned long mem_cgroup_get_max(const struct mem_cgroup *memcg);\n \n-void mem_cgroup_print_oom_context(struct mem_cgroup *memcg,\n+void mem_cgroup_print_oom_context(const struct mem_cgroup *memcg,\n \t\t\t\tstruct task_struct *p);\n \n void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg);\n@@ -917,7 +917,7 @@ void mem_cgroup_print_oom_group(struct mem_cgroup *memcg);\n void mod_memcg_state(struct mem_cgroup *memcg,\n \t\t enum memcg_stat_item idx, int val);\n \n-static inline void mod_memcg_page_state(struct page *page,\n+static inline void mod_memcg_page_state(const struct page *page,\n \t\t\t\t\tenum memcg_stat_item idx, int val)\n {\n \tstruct mem_cgroup *memcg;\n@@ -932,15 +932,16 @@ static inline void mod_memcg_page_state(struct page *page,\n \trcu_read_unlock();\n }\n \n-unsigned long memcg_events(struct mem_cgroup *memcg, int event);\n-unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx);\n-unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item);\n+unsigned long memcg_events(const struct mem_cgroup *memcg, int event);\n+unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx);\n+unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item);\n bool memcg_stat_item_valid(int idx);\n bool memcg_vm_event_item_valid(enum vm_event_item idx);\n-unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx);\n-unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,\n+unsigned long lruvec_page_state(const struct lruvec *lruvec,\n+\t\t\t\tenum node_stat_item idx);\n+unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,\n \t\t\t\t\t enum node_stat_item idx);\n-unsigned long lruvec_page_state_local(struct lruvec *lruvec,\n+unsigned long lruvec_page_state_local(const struct lruvec *lruvec,\n \t\t\t\t enum node_stat_item idx);\n \n void mem_cgroup_flush_stats(struct mem_cgroup *memcg);\n@@ -951,7 +952,7 @@ void mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val);\n void count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,\n \t\t\tunsigned long count);\n \n-static inline void count_memcg_folio_events(struct folio *folio,\n+static inline void count_memcg_folio_events(const struct folio *folio,\n \t\tenum vm_event_item idx, unsigned long nr)\n {\n \tstruct mem_cgroup *memcg;\n@@ -1036,7 +1037,7 @@ void mem_cgroup_flush_workqueue(void);\n extern int mem_cgroup_init(void);\n #else /* CONFIG_MEMCG */\n \n-static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)\n+static inline struct mem_cgroup *obj_cgroup_memcg(const struct obj_cgroup *objcg)\n {\n \treturn NULL;\n }\n@@ -1045,47 +1046,47 @@ static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)\n \n #define root_mem_cgroup\t\t(NULL)\n \n-static inline struct mem_cgroup *folio_memcg(struct folio *folio)\n+static inline struct mem_cgroup *folio_memcg(const struct folio *folio)\n {\n \treturn NULL;\n }\n \n-static inline bool folio_memcg_charged(struct folio *folio)\n+static inline bool folio_memcg_charged(const struct folio *folio)\n {\n \treturn false;\n }\n \n-static inline struct mem_cgroup *folio_memcg_check(struct folio *folio)\n+static inline struct mem_cgroup *folio_memcg_check(const struct folio *folio)\n {\n \treturn NULL;\n }\n \n-static inline struct mem_cgroup *page_memcg_check(struct page *page)\n+static inline struct mem_cgroup *page_memcg_check(const struct page *page)\n {\n \treturn NULL;\n }\n \n-static inline struct mem_cgroup *get_mem_cgroup_from_objcg(struct obj_cgroup *objcg)\n+static inline struct mem_cgroup *get_mem_cgroup_from_objcg(const struct obj_cgroup *objcg)\n {\n \treturn NULL;\n }\n \n-static inline bool folio_memcg_kmem(struct folio *folio)\n+static inline bool folio_memcg_kmem(const struct folio *folio)\n {\n \treturn false;\n }\n \n-static inline bool PageMemcgKmem(struct page *page)\n+static inline bool PageMemcgKmem(const struct page *page)\n {\n \treturn false;\n }\n \n-static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)\n+static inline bool mem_cgroup_is_root(const struct mem_cgroup *memcg)\n {\n \treturn true;\n }\n \n-static inline bool mem_cgroup_shrink_is_root(struct shrink_control *sc)\n+static inline bool mem_cgroup_shrink_is_root(const struct shrink_control *sc)\n {\n \treturn true;\n }\n@@ -1110,8 +1111,8 @@ static inline void memcg_memory_event_mm(struct mm_struct *mm,\n {\n }\n \n-static inline void mem_cgroup_protection(struct mem_cgroup *root,\n-\t\t\t\t\t struct mem_cgroup *memcg,\n+static inline void mem_cgroup_protection(const struct mem_cgroup *root,\n+\t\t\t\t\t const struct mem_cgroup *memcg,\n \t\t\t\t\t unsigned long *min,\n \t\t\t\t\t unsigned long *low,\n \t\t\t\t\t unsigned long *usage)\n@@ -1124,19 +1125,19 @@ static inline void mem_cgroup_calculate_protection(struct mem_cgroup *root,\n {\n }\n \n-static inline bool mem_cgroup_unprotected(struct mem_cgroup *target,\n-\t\t\t\t\t struct mem_cgroup *memcg)\n+static inline bool mem_cgroup_unprotected(const struct mem_cgroup *target,\n+\t\t\t\t\t const struct mem_cgroup *memcg)\n {\n \treturn true;\n }\n-static inline bool mem_cgroup_below_low(struct mem_cgroup *target,\n-\t\t\t\t\tstruct mem_cgroup *memcg)\n+static inline bool mem_cgroup_below_low(const struct mem_cgroup *target,\n+\t\t\t\t\tconst struct mem_cgroup *memcg)\n {\n \treturn false;\n }\n \n-static inline bool mem_cgroup_below_min(struct mem_cgroup *target,\n-\t\t\t\t\tstruct mem_cgroup *memcg)\n+static inline bool mem_cgroup_below_min(const struct mem_cgroup *target,\n+\t\t\t\t\tconst struct mem_cgroup *memcg)\n {\n \treturn false;\n }\n@@ -1175,25 +1176,25 @@ static inline void mem_cgroup_migrate(struct folio *old, struct folio *new)\n {\n }\n \n-static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,\n+static inline struct lruvec *mem_cgroup_lruvec(const struct mem_cgroup *memcg,\n \t\t\t\t\t struct pglist_data *pgdat)\n {\n \treturn \u0026pgdat-\u003e__lruvec;\n }\n \n-static inline struct lruvec *folio_lruvec(struct folio *folio)\n+static inline struct lruvec *folio_lruvec(const struct folio *folio)\n {\n \tstruct pglist_data *pgdat = folio_pgdat(folio);\n \treturn \u0026pgdat-\u003e__lruvec;\n }\n \n-static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)\n+static inline struct mem_cgroup *parent_mem_cgroup(const struct mem_cgroup *memcg)\n {\n \treturn NULL;\n }\n \n static inline bool mm_match_cgroup(struct mm_struct *mm,\n-\t\tstruct mem_cgroup *memcg)\n+\t\tconst struct mem_cgroup *memcg)\n {\n \treturn true;\n }\n@@ -1208,7 +1209,7 @@ static inline struct mem_cgroup *get_mem_cgroup_from_current(void)\n \treturn NULL;\n }\n \n-static inline struct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio)\n+static inline struct mem_cgroup *get_mem_cgroup_from_folio(const struct folio *folio)\n {\n \treturn NULL;\n }\n@@ -1241,7 +1242,7 @@ static inline void mem_cgroup_put(struct mem_cgroup *memcg)\n {\n }\n \n-static inline struct lruvec *folio_lruvec_lock(struct folio *folio)\n+static inline struct lruvec *folio_lruvec_lock(const struct folio *folio)\n {\n \tstruct pglist_data *pgdat = folio_pgdat(folio);\n \n@@ -1250,7 +1251,7 @@ static inline struct lruvec *folio_lruvec_lock(struct folio *folio)\n \treturn \u0026pgdat-\u003e__lruvec;\n }\n \n-static inline struct lruvec *folio_lruvec_lock_irq(struct folio *folio)\n+static inline struct lruvec *folio_lruvec_lock_irq(const struct folio *folio)\n {\n \tstruct pglist_data *pgdat = folio_pgdat(folio);\n \n@@ -1259,7 +1260,7 @@ static inline struct lruvec *folio_lruvec_lock_irq(struct folio *folio)\n \treturn \u0026pgdat-\u003e__lruvec;\n }\n \n-static inline struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,\n+static inline struct lruvec *folio_lruvec_lock_irqsave(const struct folio *folio,\n \t\tunsigned long *flagsp)\n {\n \tstruct pglist_data *pgdat = folio_pgdat(folio);\n@@ -1287,7 +1288,7 @@ static inline void mem_cgroup_scan_tasks(struct mem_cgroup *memcg,\n {\n }\n \n-static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memcg)\n+static inline unsigned short mem_cgroup_private_id(const struct mem_cgroup *memcg)\n {\n \treturn 0;\n }\n@@ -1299,7 +1300,7 @@ static inline struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id)\n \treturn NULL;\n }\n \n-static inline u64 mem_cgroup_id(struct mem_cgroup *memcg)\n+static inline u64 mem_cgroup_id(const struct mem_cgroup *memcg)\n {\n \treturn 0;\n }\n@@ -1314,7 +1315,7 @@ static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)\n \treturn NULL;\n }\n \n-static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)\n+static inline struct mem_cgroup *lruvec_memcg(const struct lruvec *lruvec)\n {\n \treturn NULL;\n }\n@@ -1325,19 +1326,20 @@ static inline bool mem_cgroup_online(struct mem_cgroup *memcg)\n }\n \n static inline\n-unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,\n+unsigned long mem_cgroup_get_zone_lru_size(const struct lruvec *lruvec,\n \t\tenum lru_list lru, int zone_idx)\n {\n \treturn 0;\n }\n \n-static inline unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg)\n+static inline unsigned long mem_cgroup_get_max(const struct mem_cgroup *memcg)\n {\n \treturn 0;\n }\n \n static inline void\n-mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)\n+mem_cgroup_print_oom_context(const struct mem_cgroup *memcg,\n+\t\t\t struct task_struct *p)\n {\n }\n \n@@ -1366,17 +1368,17 @@ static inline void mod_memcg_state(struct mem_cgroup *memcg,\n {\n }\n \n-static inline void mod_memcg_page_state(struct page *page,\n+static inline void mod_memcg_page_state(const struct page *page,\n \t\t\t\t\tenum memcg_stat_item idx, int val)\n {\n }\n \n-static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)\n+static inline unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx)\n {\n \treturn 0;\n }\n \n-static inline unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item)\n+static inline unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item)\n {\n \treturn 0;\n }\n@@ -1391,19 +1393,19 @@ static inline bool memcg_vm_event_item_valid(enum vm_event_item idx)\n \treturn false;\n }\n \n-static inline unsigned long lruvec_page_state(struct lruvec *lruvec,\n+static inline unsigned long lruvec_page_state(const struct lruvec *lruvec,\n \t\t\t\t\t enum node_stat_item idx)\n {\n \treturn node_page_state(lruvec_pgdat(lruvec), idx);\n }\n \n-static inline unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,\n+static inline unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,\n \t\t\t\t\t\t\tenum node_stat_item idx)\n {\n \treturn node_page_state_monotonic(lruvec_pgdat(lruvec), idx);\n }\n \n-static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,\n+static inline unsigned long lruvec_page_state_local(const struct lruvec *lruvec,\n \t\t\t\t\t\t enum node_stat_item idx)\n {\n \treturn node_page_state(lruvec_pgdat(lruvec), idx);\n@@ -1431,7 +1433,7 @@ static inline void count_memcg_events(struct mem_cgroup *memcg,\n {\n }\n \n-static inline void count_memcg_folio_events(struct folio *folio,\n+static inline void count_memcg_folio_events(const struct folio *folio,\n \t\tenum vm_event_item idx, unsigned long nr)\n {\n }\n@@ -1465,7 +1467,7 @@ static inline void mem_cgroup_flush_workqueue(void) { }\n static inline int mem_cgroup_init(void) { return 0; }\n #endif /* CONFIG_MEMCG */\n \n-static inline struct lruvec *parent_lruvec(struct lruvec *lruvec)\n+static inline struct lruvec *parent_lruvec(const struct lruvec *lruvec)\n {\n \tstruct mem_cgroup *memcg;\n \n@@ -1528,8 +1530,8 @@ static inline void lruvec_unlock_irqrestore(struct lruvec *lruvec, unsigned long\n }\n \n /* Test requires a stable folio-\u003ememcg binding, see folio_memcg() */\n-static inline bool folio_matches_lruvec(struct folio *folio,\n-\t\tstruct lruvec *lruvec)\n+static inline bool folio_matches_lruvec(const struct folio *folio,\n+\t\tconst struct lruvec *lruvec)\n {\n \treturn lruvec_pgdat(lruvec) == folio_pgdat(folio) \u0026\u0026\n \t lruvec_memcg(lruvec) == folio_memcg(folio);\n@@ -1642,7 +1644,7 @@ static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg)\n \twrite_sequnlock_irqrestore(\u0026memcg-\u003esocket_pressure_seqlock, flags);\n }\n \n-static inline u64 mem_cgroup_get_socket_pressure(struct mem_cgroup *memcg)\n+static inline u64 mem_cgroup_get_socket_pressure(const struct mem_cgroup *memcg)\n {\n \tunsigned int seq;\n \tu64 val;\n@@ -1660,7 +1662,7 @@ static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg)\n \tWRITE_ONCE(memcg-\u003esocket_pressure, jiffies + HZ);\n }\n \n-static inline u64 mem_cgroup_get_socket_pressure(struct mem_cgroup *memcg)\n+static inline u64 mem_cgroup_get_socket_pressure(const struct mem_cgroup *memcg)\n {\n \treturn READ_ONCE(memcg-\u003esocket_pressure);\n }\n@@ -1773,7 +1775,7 @@ static inline void memcg_kmem_uncharge_page(struct page *page, int order)\n * A helper for accessing memcg's kmem_id, used for getting\n * corresponding LRU lists.\n */\n-static inline int memcg_kmem_id(struct mem_cgroup *memcg)\n+static inline int memcg_kmem_id(const struct mem_cgroup *memcg)\n {\n \treturn memcg ? memcg-\u003ekmemcg_id : -1;\n }\n@@ -1845,7 +1847,7 @@ static inline bool memcg_kmem_online(void)\n \treturn false;\n }\n \n-static inline int memcg_kmem_id(struct mem_cgroup *memcg)\n+static inline int memcg_kmem_id(const struct mem_cgroup *memcg)\n {\n \treturn -1;\n }\n@@ -1861,7 +1863,7 @@ static inline void count_objcg_events(struct obj_cgroup *objcg,\n {\n }\n \n-static inline ino_t page_cgroup_ino(struct page *page)\n+static inline ino_t page_cgroup_ino(const struct page *page)\n {\n \treturn 0;\n }\n@@ -1885,7 +1887,7 @@ static inline bool memcg_is_dying(struct mem_cgroup *memcg)\n bool obj_cgroup_may_zswap(struct obj_cgroup *objcg);\n void obj_cgroup_charge_zswap(struct obj_cgroup *objcg, size_t size);\n void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg, size_t size);\n-bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg);\n+bool mem_cgroup_zswap_writeback_enabled(const struct mem_cgroup *memcg);\n #else\n static inline bool obj_cgroup_may_zswap(struct obj_cgroup *objcg)\n {\n@@ -1899,7 +1901,7 @@ static inline void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg,\n \t\t\t\t\t size_t size)\n {\n }\n-static inline bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg)\n+static inline bool mem_cgroup_zswap_writeback_enabled(const struct mem_cgroup *memcg)\n {\n \t/* if zswap is disabled, do not block pages going to the swapping device */\n \treturn true;\n@@ -1912,7 +1914,7 @@ static inline bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg)\n #ifdef CONFIG_MEMCG_V1\n bool mem_cgroup_oom_synchronize(bool wait);\n \n-static inline bool task_in_memcg_oom(struct task_struct *p)\n+static inline bool task_in_memcg_oom(const struct task_struct *p)\n {\n \treturn p-\u003ememcg_in_oom;\n }\n@@ -1930,7 +1932,7 @@ static inline void mem_cgroup_exit_user_fault(void)\n }\n \n #else /* CONFIG_MEMCG_V1 */\n-static inline bool task_in_memcg_oom(struct task_struct *p)\n+static inline bool task_in_memcg_oom(const struct task_struct *p)\n {\n \treturn false;\n }\ndiff --git a/include/linux/mmzone.h b/include/linux/mmzone.h\nindex 84e237f2c17db..8e1e3a50757a3 100644\n--- a/include/linux/mmzone.h\n+++ b/include/linux/mmzone.h\n@@ -1657,7 +1657,7 @@ extern void init_currently_empty_zone(struct zone *zone, unsigned long start_pfn\n \n extern void lruvec_init(struct lruvec *lruvec);\n \n-static inline struct pglist_data *lruvec_pgdat(struct lruvec *lruvec)\n+static inline struct pglist_data *lruvec_pgdat(const struct lruvec *lruvec)\n {\n #ifdef CONFIG_MEMCG\n \treturn lruvec-\u003epgdat;\ndiff --git a/include/linux/page_counter.h b/include/linux/page_counter.h\nindex 07b7cb12249c7..2baf7a2b29b2e 100644\n--- a/include/linux/page_counter.h\n+++ b/include/linux/page_counter.h\n@@ -63,12 +63,12 @@ static inline void page_counter_init(struct page_counter *counter,\n \tcounter-\u003etrack_failcnt = false;\n }\n \n-static inline unsigned long page_counter_read(struct page_counter *counter)\n+static inline unsigned long page_counter_read(const struct page_counter *counter)\n {\n \treturn atomic_long_read(\u0026counter-\u003eusage);\n }\n \n-long page_counter_margin(struct page_counter *counter);\n+long page_counter_margin(const struct page_counter *counter);\n void page_counter_cancel(struct page_counter *counter, unsigned long nr_pages);\n void page_counter_charge(struct page_counter *counter, unsigned long nr_pages);\n bool page_counter_try_charge(struct page_counter *counter,\ndiff --git a/include/linux/swap.h b/include/linux/swap.h\nindex fc290e29e4a9e..843d70680b8e0 100644\n--- a/include/linux/swap.h\n+++ b/include/linux/swap.h\n@@ -505,9 +505,9 @@ static inline void mem_cgroup_uncharge_swap(unsigned short id, unsigned int nr_p\n \t__mem_cgroup_uncharge_swap(id, nr_pages);\n }\n \n-long mem_cgroup_get_folio_swap_margin(struct folio *folio);\n-extern long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg);\n-extern bool mem_cgroup_swap_full(struct folio *folio);\n+long mem_cgroup_get_folio_swap_margin(const struct folio *folio);\n+long mem_cgroup_get_nr_swap_pages(const struct mem_cgroup *memcg);\n+bool mem_cgroup_swap_full(const struct folio *folio);\n #else\n static inline int mem_cgroup_try_charge_swap(struct folio *folio)\n {\n@@ -519,17 +519,17 @@ static inline void mem_cgroup_uncharge_swap(unsigned short id,\n {\n }\n \n-static inline long mem_cgroup_get_folio_swap_margin(struct folio *folio)\n+static inline long mem_cgroup_get_folio_swap_margin(const struct folio *folio)\n {\n \treturn PAGE_COUNTER_MAX;\n }\n \n-static inline long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)\n+static inline long mem_cgroup_get_nr_swap_pages(const struct mem_cgroup *memcg)\n {\n \treturn get_nr_swap_pages();\n }\n \n-static inline bool mem_cgroup_swap_full(struct folio *folio)\n+static inline bool mem_cgroup_swap_full(const struct folio *folio)\n {\n \treturn vm_swap_full();\n }\ndiff --git a/mm/memcontrol.c b/mm/memcontrol.c\nindex 5b9e0ebd42ae0..f56e958948ac0 100644\n--- a/mm/memcontrol.c\n+++ b/mm/memcontrol.c\n@@ -331,7 +331,7 @@ EXPORT_SYMBOL(memcg_bpf_enabled_key);\n * If memcg is bound to a traditional hierarchy, the css of root_mem_cgroup\n * is returned.\n */\n-struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(struct folio *folio)\n+struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(const struct folio *folio)\n {\n \tstruct mem_cgroup *memcg;\n \n@@ -356,7 +356,7 @@ struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(struct folio *folio)\n * after page_cgroup_ino() returns, so it only should be used by callers that\n * do not care (such as procfs interfaces).\n */\n-ino_t page_cgroup_ino(struct page *page)\n+ino_t page_cgroup_ino(const struct page *page)\n {\n \tstruct mem_cgroup *memcg;\n \tunsigned long ino = 0;\n@@ -489,7 +489,7 @@ struct lruvec_stats {\n \tlong state_pending[NR_MEMCG_NODE_STAT_ITEMS];\n };\n \n-unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx)\n+unsigned long lruvec_page_state(const struct lruvec *lruvec, enum node_stat_item idx)\n {\n \tstruct mem_cgroup_per_node *pn;\n \tlong x;\n@@ -530,7 +530,7 @@ unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx)\n * monotonically-incremented event counters are stored in\n * enum node_stat_item.\n */\n-unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,\n+unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,\n \t\t\t\t\t enum node_stat_item idx)\n {\n \tstruct mem_cgroup_per_node *pn;\n@@ -547,7 +547,7 @@ unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,\n \treturn (unsigned long)READ_ONCE(pn-\u003elruvec_stats-\u003estate[i]);\n }\n \n-unsigned long lruvec_page_state_local(struct lruvec *lruvec,\n+unsigned long lruvec_page_state_local(const struct lruvec *lruvec,\n \t\t\t\t enum node_stat_item idx)\n {\n \tstruct mem_cgroup_per_node *pn;\n@@ -799,7 +799,7 @@ static void flush_memcg_stats_dwork(struct work_struct *w)\n \tqueue_delayed_work(system_dfl_wq, \u0026stats_flush_dwork, FLUSH_TIME);\n }\n \n-unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)\n+unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx)\n {\n \tlong x;\n \tint i = memcg_stats_index(idx);\n@@ -1091,7 +1091,7 @@ void count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,\n \tput_cpu();\n }\n \n-unsigned long memcg_events(struct mem_cgroup *memcg, int event)\n+unsigned long memcg_events(const struct mem_cgroup *memcg, int event)\n {\n \tint i = memcg_events_index(event);\n \n@@ -1220,7 +1220,7 @@ struct mem_cgroup *get_mem_cgroup_from_current(void)\n *\n * See folio_memcg() for folio-\u003eobjcg/memcg binding rules.\n */\n-struct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio)\n+struct mem_cgroup *get_mem_cgroup_from_folio(const struct folio *folio)\n {\n \tstruct mem_cgroup *memcg;\n \n@@ -1441,7 +1441,7 @@ void mem_cgroup_scan_tasks(struct mem_cgroup *memcg,\n *\n * Return: The lruvec this folio is on with its lock held and rcu read lock held.\n */\n-struct lruvec *folio_lruvec_lock(struct folio *folio)\n+struct lruvec *folio_lruvec_lock(const struct folio *folio)\n {\n \tstruct lruvec *lruvec;\n \n@@ -1469,7 +1469,7 @@ struct lruvec *folio_lruvec_lock(struct folio *folio)\n * Return: The lruvec this folio is on with its lock held and interrupts\n * disabled and rcu read lock held.\n */\n-struct lruvec *folio_lruvec_lock_irq(struct folio *folio)\n+struct lruvec *folio_lruvec_lock_irq(const struct folio *folio)\n {\n \tstruct lruvec *lruvec;\n \n@@ -1498,7 +1498,7 @@ struct lruvec *folio_lruvec_lock_irq(struct folio *folio)\n * Return: The lruvec this folio is on with its lock held and interrupts\n * disabled and rcu read lock held.\n */\n-struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,\n+struct lruvec *folio_lruvec_lock_irqsave(const struct folio *folio,\n \t\tunsigned long *flags)\n {\n \tstruct lruvec *lruvec;\n@@ -1709,7 +1709,7 @@ static int memcg_page_state_output_unit(int item)\n \t}\n }\n \n-unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item)\n+unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item)\n {\n \treturn memcg_page_state(memcg, item) *\n \t\tmemcg_page_state_output_unit(item);\n@@ -1812,7 +1812,8 @@ static void memory_stat_format(struct mem_cgroup *memcg, struct seq_buf *s)\n * NOTE: @memcg and @p's mem_cgroup can be different when hierarchy is\n * enabled\n */\n-void mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)\n+void mem_cgroup_print_oom_context(const struct mem_cgroup *memcg,\n+\t\t\t\t struct task_struct *p)\n {\n \trcu_read_lock();\n \n@@ -1877,7 +1878,7 @@ void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg)\n /*\n * Return the memory (and swap, if configured) limit for a memcg.\n */\n-unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg)\n+unsigned long mem_cgroup_get_max(const struct mem_cgroup *memcg)\n {\n \tunsigned long max = READ_ONCE(memcg-\u003ememory.max);\n \n@@ -5838,7 +5839,7 @@ void __mem_cgroup_uncharge_swap(unsigned short id, unsigned int nr_pages)\n \trcu_read_unlock();\n }\n \n-long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)\n+long mem_cgroup_get_nr_swap_pages(const struct mem_cgroup *memcg)\n {\n \tlong nr_swap_pages = get_nr_swap_pages();\n \n@@ -5854,7 +5855,7 @@ long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)\n *\n * Return: Remaining chargeable pages in the folio's memcg hierarchy.\n */\n-long mem_cgroup_get_folio_swap_margin(struct folio *folio)\n+long mem_cgroup_get_folio_swap_margin(const struct folio *folio)\n {\n \tstruct mem_cgroup *memcg;\n \tlong margin;\n@@ -5871,7 +5872,7 @@ long mem_cgroup_get_folio_swap_margin(struct folio *folio)\n \treturn margin;\n }\n \n-bool mem_cgroup_swap_full(struct folio *folio)\n+bool mem_cgroup_swap_full(const struct folio *folio)\n {\n \tstruct mem_cgroup *memcg;\n \tbool ret = false;\n@@ -6139,7 +6140,7 @@ void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg, size_t size)\n \trcu_read_unlock();\n }\n \n-bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg)\n+bool mem_cgroup_zswap_writeback_enabled(const struct mem_cgroup *memcg)\n {\n \t/* if zswap is disabled, do not block pages going to the swapping device */\n \tif (!zswap_is_enabled())\ndiff --git a/mm/page_counter.c b/mm/page_counter.c\nindex 450543f4b318b..8c6f3b45136b4 100644\n--- a/mm/page_counter.c\n+++ b/mm/page_counter.c\n@@ -53,7 +53,7 @@ static void propagate_protected_usage(struct page_counter *c,\n * Return: The minimum value of max minus usage across @counter and all of\n * its ancestors. The value may be negative during a concurrent charge.\n */\n-long page_counter_margin(struct page_counter *counter)\n+long page_counter_margin(const struct page_counter *counter)\n {\n \tlong margin = PAGE_COUNTER_MAX;\n \ndiff --git a/mm/page_io.c b/mm/page_io.c\nindex 1da4ff484f097..5f7756e370f7a 100644\n--- a/mm/page_io.c\n+++ b/mm/page_io.c\n@@ -256,12 +256,13 @@ int swap_writeout(struct swap_io_ctx *ctx, struct folio *folio)\n }\n \n #if defined(CONFIG_MEMCG) \u0026\u0026 defined(CONFIG_BLK_CGROUP)\n-static struct cgroup_subsys_state *folio_memcg_blkg_css(struct folio *folio)\n+static struct cgroup_subsys_state *folio_memcg_blkg_css(const struct folio *folio)\n {\n \treturn cgroup_e_css(folio_memcg(folio)-\u003ecss.cgroup, \u0026io_cgrp_subsys);\n }\n \n-static bool folio_blkg_can_merge(struct folio *folio, struct folio *prev_folio)\n+static bool folio_blkg_can_merge(const struct folio *folio,\n+\t\t\t\t const struct folio *prev_folio)\n {\n \tbool can_merge = true;\n \n@@ -277,7 +278,8 @@ static bool folio_blkg_can_merge(struct folio *folio, struct folio *prev_folio)\n \treturn can_merge;\n }\n \n-static void bio_associate_blkg_from_folio(struct bio *bio, struct folio *folio)\n+static void bio_associate_blkg_from_folio(struct bio *bio,\n+\t\t\t\t\t const struct folio *folio)\n {\n \tstruct cgroup_subsys_state *css;\n \n@@ -294,11 +296,13 @@ static void bio_associate_blkg_from_folio(struct bio *bio, struct folio *folio)\n \t\tcss_put(css);\n }\n #else\n-static bool folio_blkg_can_merge(struct folio *folio, struct folio *prev_folio)\n+static bool folio_blkg_can_merge(const struct folio *folio,\n+\t\t\t\t const struct folio *prev_folio)\n {\n \treturn true;\n }\n-static void bio_associate_blkg_from_folio(struct bio *bio, struct folio *folio)\n+static void bio_associate_blkg_from_folio(struct bio *bio,\n+\t\t\t\t\t const struct folio *folio)\n {\n }\n #endif /* CONFIG_MEMCG \u0026\u0026 CONFIG_BLK_CGROUP */\ndiff --git a/mm/swap.h b/mm/swap.h\nindex 0b5d507739bcb..94714d9dd003c 100644\n--- a/mm/swap.h\n+++ b/mm/swap.h\n@@ -82,7 +82,7 @@ enum swap_cluster_flags {\n \n extern int vm_swappiness;\n \n-static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg)\n+static inline int mem_cgroup_swappiness(const struct mem_cgroup *memcg)\n {\n #ifdef CONFIG_MEMCG_V1\n \tif (!cgroup_subsys_on_dfl(memory_cgrp_subsys) \u0026\u0026\n"
} |
| 2/1 | 2026/09/03 18:37 | agent | patch-evaluator |
0mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch series only adds 'const' qualifiers to pointer parameters across memcontrol, swap, and page counter helper functions to improve const-correctness. It does not introduce or modify executable logic, runtime assertions, control flow, or data structure layouts.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.
IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.
================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.
- REACHABILITY IS THE PRIMARY GATE:
Fuzzing can only discover bugs in code that can actually execute in standard virtualized
environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
regardless of whether it adds assertions or complex logic.
- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
Patch authors routinely label changes as "cleanups", "refactorings", or state
"No functional change intended". Do NOT take these claims at face value.
Code refactorings that rearrange logic, introduce helper functions, or alter state management
in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
If reachable executable code is modified or refactored, it MUST be fuzzed.
- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
Even if the author believes the invariant always holds, fuzzing is essential to verify whether
an unusual sequence of operations can violate it.
================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:
- Non-kernel and non-executable changes:
* Modifications to Documentation/, comments, or spelling fixes.
* User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
that do not affect the compiled kernel image (vmlinux) or kernel modules.
* Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
that do not alter control flow or data structures.
* Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
* Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
* Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
physical PCI hot-unplug or manual sysfs driver unbinding.
* Code paths exclusive to architectures other than the target architecture.
================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
* Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
* Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
* Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
* Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).
================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:
- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
Do NOT list generic, ubiquitous functions called by almost every program in the corpus
(including, but not limited to: general memory allocators and deallocators, page fault
and trap handlers, or core synchronization primitives; this is not an exhaustive list).
Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
which severely dilutes fuzzing effort away from the actual changes.
- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
List functions that specifically implement the logic being added or altered, or direct API entrypoints
for the subsystem feature under review.
- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).
================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4").
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit 174dbc6f4706456cb52f4838fde6845cfc0b76de
Author: syz-cluster <triage@syzkaller.com>
Date: Thu Sep 3 18:37:56 2026 +0000
syz-cluster: applied patch under review
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 945d7dbf1bb2c..e18b44965d05b 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -363,7 +363,7 @@ enum objext_flags {
*
* The caller must ensure that the returned memcg won't be released.
*/
-static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)
+static inline struct mem_cgroup *obj_cgroup_memcg(const struct obj_cgroup *objcg)
{
lockdep_assert_once(rcu_read_lock_held() || lockdep_is_held(&cgroup_mutex));
return objcg ? READ_ONCE(objcg->memcg) : NULL;
@@ -377,7 +377,7 @@ static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)
* or NULL. This function assumes that the folio is known to have a
* proper object cgroup pointer.
*/
-static inline struct obj_cgroup *folio_objcg(struct folio *folio)
+static inline struct obj_cgroup *folio_objcg(const struct folio *folio)
{
unsigned long memcg_data = folio->memcg_data;
@@ -415,7 +415,7 @@ static inline struct obj_cgroup *folio_objcg(struct folio *folio)
* Note: The caller should hold an rcu read lock or cgroup_mutex to protect
* memcg associated with a folio from being released.
*/
-static inline struct mem_cgroup *folio_memcg(struct folio *folio)
+static inline struct mem_cgroup *folio_memcg(const struct folio *folio)
{
struct obj_cgroup *objcg = folio_objcg(folio);
@@ -428,7 +428,7 @@ static inline struct mem_cgroup *folio_memcg(struct folio *folio)
*
* Returns true if folio is charged to a memory cgroup, otherwise returns false.
*/
-static inline bool folio_memcg_charged(struct folio *folio)
+static inline bool folio_memcg_charged(const struct folio *folio)
{
return folio->memcg_data != 0;
}
@@ -448,7 +448,7 @@ static inline bool folio_memcg_charged(struct folio *folio)
* A caller should hold an rcu read lock to protect memcg associated with a
* page from being released.
*/
-static inline struct mem_cgroup *folio_memcg_check(struct folio *folio)
+static inline struct mem_cgroup *folio_memcg_check(const struct folio *folio)
{
/*
* Because folio->memcg_data might be changed asynchronously
@@ -465,14 +465,14 @@ static inline struct mem_cgroup *folio_memcg_check(struct folio *folio)
return obj_cgroup_memcg(objcg);
}
-static inline struct mem_cgroup *page_memcg_check(struct page *page)
+static inline struct mem_cgroup *page_memcg_check(const struct page *page)
{
if (PageTail(page))
return NULL;
- return folio_memcg_check((struct folio *)page);
+ return folio_memcg_check((const struct folio *)page);
}
-static inline struct mem_cgroup *get_mem_cgroup_from_objcg(struct obj_cgroup *objcg)
+static inline struct mem_cgroup *get_mem_cgroup_from_objcg(const struct obj_cgroup *objcg)
{
struct mem_cgroup *memcg;
@@ -494,19 +494,19 @@ static inline struct mem_cgroup *get_mem_cgroup_from_objcg(struct obj_cgroup *ob
* that the folio has an associated memory cgroup. It's not safe to call
* this function against some types of folios, e.g. slab folios.
*/
-static inline bool folio_memcg_kmem(struct folio *folio)
+static inline bool folio_memcg_kmem(const struct folio *folio)
{
VM_BUG_ON_PGFLAGS(PageTail(&folio->page), &folio->page);
VM_BUG_ON_FOLIO(folio->memcg_data & MEMCG_DATA_OBJEXTS, folio);
return folio->memcg_data & MEMCG_DATA_KMEM;
}
-static inline bool PageMemcgKmem(struct page *page)
+static inline bool PageMemcgKmem(const struct page *page)
{
return folio_memcg_kmem(page_folio(page));
}
-static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
+static inline bool mem_cgroup_is_root(const struct mem_cgroup *memcg)
{
return (memcg == root_mem_cgroup);
}
@@ -522,7 +522,7 @@ static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
* and do not honour sc->memcg can use this to early-return 0 in per-memcg
* contexts.
*/
-static inline bool mem_cgroup_shrink_is_root(struct shrink_control *sc)
+static inline bool mem_cgroup_shrink_is_root(const struct shrink_control *sc)
{
return !sc->memcg || mem_cgroup_is_root(sc->memcg);
}
@@ -537,8 +537,8 @@ static inline bool mem_cgroup_disabled(void)
return !cgroup_subsys_enabled(memory_cgrp_subsys);
}
-static inline void mem_cgroup_protection(struct mem_cgroup *root,
- struct mem_cgroup *memcg,
+static inline void mem_cgroup_protection(const struct mem_cgroup *root,
+ const struct mem_cgroup *memcg,
unsigned long *min,
unsigned long *low,
unsigned long *usage)
@@ -592,8 +592,8 @@ static inline void mem_cgroup_protection(struct mem_cgroup *root,
void mem_cgroup_calculate_protection(struct mem_cgroup *root,
struct mem_cgroup *memcg);
-static inline bool mem_cgroup_unprotected(struct mem_cgroup *target,
- struct mem_cgroup *memcg)
+static inline bool mem_cgroup_unprotected(const struct mem_cgroup *target,
+ const struct mem_cgroup *memcg)
{
/*
* The root memcg doesn't account charges, and doesn't support
@@ -604,8 +604,8 @@ static inline bool mem_cgroup_unprotected(struct mem_cgroup *target,
memcg == target;
}
-static inline bool mem_cgroup_below_low(struct mem_cgroup *target,
- struct mem_cgroup *memcg)
+static inline bool mem_cgroup_below_low(const struct mem_cgroup *target,
+ const struct mem_cgroup *memcg)
{
if (mem_cgroup_unprotected(target, memcg))
return false;
@@ -614,8 +614,8 @@ static inline bool mem_cgroup_below_low(struct mem_cgroup *target,
page_counter_read(&memcg->memory);
}
-static inline bool mem_cgroup_below_min(struct mem_cgroup *target,
- struct mem_cgroup *memcg)
+static inline bool mem_cgroup_below_min(const struct mem_cgroup *target,
+ const struct mem_cgroup *memcg)
{
if (mem_cgroup_unprotected(target, memcg))
return false;
@@ -688,7 +688,7 @@ void mem_cgroup_migrate(struct folio *old, struct folio *new);
* @pgdat combination. This can be the node lruvec, if the memory
* controller is disabled.
*/
-static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
+static inline struct lruvec *mem_cgroup_lruvec(const struct mem_cgroup *memcg,
struct pglist_data *pgdat)
{
struct mem_cgroup_per_node *mz;
@@ -729,7 +729,7 @@ static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
* their binding is stable if the returned lruvec matches the one the caller has
* locked. Useful for lock batching.
*/
-static inline struct lruvec *folio_lruvec(struct folio *folio)
+static inline struct lruvec *folio_lruvec(const struct folio *folio)
{
struct mem_cgroup *memcg = folio_memcg(folio);
@@ -743,11 +743,11 @@ struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm);
struct mem_cgroup *get_mem_cgroup_from_current(void);
-struct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio);
+struct mem_cgroup *get_mem_cgroup_from_folio(const struct folio *folio);
-struct lruvec *folio_lruvec_lock(struct folio *folio);
-struct lruvec *folio_lruvec_lock_irq(struct folio *folio);
-struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
+struct lruvec *folio_lruvec_lock(const struct folio *folio);
+struct lruvec *folio_lruvec_lock_irq(const struct folio *folio);
+struct lruvec *folio_lruvec_lock_irqsave(const struct folio *folio,
unsigned long *flags);
static inline
@@ -806,7 +806,7 @@ void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *);
void mem_cgroup_scan_tasks(struct mem_cgroup *memcg,
int (*)(struct task_struct *, void *), void *arg);
-static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memcg)
+static inline unsigned short mem_cgroup_private_id(const struct mem_cgroup *memcg)
{
if (mem_cgroup_disabled())
return 0;
@@ -815,7 +815,7 @@ static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memcg)
}
struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id);
-static inline u64 mem_cgroup_id(struct mem_cgroup *memcg)
+static inline u64 mem_cgroup_id(const struct mem_cgroup *memcg)
{
return memcg ? cgroup_id(memcg->css.cgroup) : 0;
}
@@ -827,7 +827,7 @@ static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)
return mem_cgroup_from_css(seq_css(m));
}
-static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
+static inline struct mem_cgroup *lruvec_memcg(const struct lruvec *lruvec)
{
struct mem_cgroup_per_node *mz;
@@ -844,13 +844,13 @@ static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
*
* Returns the parent memcg, or NULL if this is the root.
*/
-static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)
+static inline struct mem_cgroup *parent_mem_cgroup(const struct mem_cgroup *memcg)
{
return mem_cgroup_from_css(memcg->css.parent);
}
-static inline bool mem_cgroup_is_descendant(struct mem_cgroup *memcg,
- struct mem_cgroup *root)
+static inline bool mem_cgroup_is_descendant(const struct mem_cgroup *memcg,
+ const struct mem_cgroup *root)
{
if (root == memcg)
return true;
@@ -858,7 +858,7 @@ static inline bool mem_cgroup_is_descendant(struct mem_cgroup *memcg,
}
static inline bool mm_match_cgroup(struct mm_struct *mm,
- struct mem_cgroup *memcg)
+ const struct mem_cgroup *memcg)
{
struct mem_cgroup *task_memcg;
bool match = false;
@@ -871,8 +871,8 @@ static inline bool mm_match_cgroup(struct mm_struct *mm,
return match;
}
-struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(struct folio *folio);
-ino_t page_cgroup_ino(struct page *page);
+struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(const struct folio *folio);
+ino_t page_cgroup_ino(const struct page *page);
static inline bool mem_cgroup_online(struct mem_cgroup *memcg)
{
@@ -885,7 +885,7 @@ void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,
int zid, long nr_pages);
static inline
-unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
+unsigned long mem_cgroup_get_zone_lru_size(const struct lruvec *lruvec,
enum lru_list lru, int zone_idx)
{
struct mem_cgroup_per_node *mz;
@@ -902,9 +902,9 @@ static inline void mem_cgroup_handle_over_high(gfp_t gfp_mask)
__mem_cgroup_handle_over_high(gfp_mask);
}
-unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg);
+unsigned long mem_cgroup_get_max(const struct mem_cgroup *memcg);
-void mem_cgroup_print_oom_context(struct mem_cgroup *memcg,
+void mem_cgroup_print_oom_context(const struct mem_cgroup *memcg,
struct task_struct *p);
void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg);
@@ -917,7 +917,7 @@ void mem_cgroup_print_oom_group(struct mem_cgroup *memcg);
void mod_memcg_state(struct mem_cgroup *memcg,
enum memcg_stat_item idx, int val);
-static inline void mod_memcg_page_state(struct page *page,
+static inline void mod_memcg_page_state(const struct page *page,
enum memcg_stat_item idx, int val)
{
struct mem_cgroup *memcg;
@@ -932,15 +932,16 @@ static inline void mod_memcg_page_state(struct page *page,
rcu_read_unlock();
}
-unsigned long memcg_events(struct mem_cgroup *memcg, int event);
-unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx);
-unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item);
+unsigned long memcg_events(const struct mem_cgroup *memcg, int event);
+unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx);
+unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item);
bool memcg_stat_item_valid(int idx);
bool memcg_vm_event_item_valid(enum vm_event_item idx);
-unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx);
-unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,
+unsigned long lruvec_page_state(const struct lruvec *lruvec,
+ enum node_stat_item idx);
+unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,
enum node_stat_item idx);
-unsigned long lruvec_page_state_local(struct lruvec *lruvec,
+unsigned long lruvec_page_state_local(const struct lruvec *lruvec,
enum node_stat_item idx);
void mem_cgroup_flush_stats(struct mem_cgroup *memcg);
@@ -951,7 +952,7 @@ void mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val);
void count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,
unsigned long count);
-static inline void count_memcg_folio_events(struct folio *folio,
+static inline void count_memcg_folio_events(const struct folio *folio,
enum vm_event_item idx, unsigned long nr)
{
struct mem_cgroup *memcg;
@@ -1036,7 +1037,7 @@ void mem_cgroup_flush_workqueue(void);
extern int mem_cgroup_init(void);
#else /* CONFIG_MEMCG */
-static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)
+static inline struct mem_cgroup *obj_cgroup_memcg(const struct obj_cgroup *objcg)
{
return NULL;
}
@@ -1045,47 +1046,47 @@ static inline struct mem_cgroup *obj_cgroup_memcg(struct obj_cgroup *objcg)
#define root_mem_cgroup (NULL)
-static inline struct mem_cgroup *folio_memcg(struct folio *folio)
+static inline struct mem_cgroup *folio_memcg(const struct folio *folio)
{
return NULL;
}
-static inline bool folio_memcg_charged(struct folio *folio)
+static inline bool folio_memcg_charged(const struct folio *folio)
{
return false;
}
-static inline struct mem_cgroup *folio_memcg_check(struct folio *folio)
+static inline struct mem_cgroup *folio_memcg_check(const struct folio *folio)
{
return NULL;
}
-static inline struct mem_cgroup *page_memcg_check(struct page *page)
+static inline struct mem_cgroup *page_memcg_check(const struct page *page)
{
return NULL;
}
-static inline struct mem_cgroup *get_mem_cgroup_from_objcg(struct obj_cgroup *objcg)
+static inline struct mem_cgroup *get_mem_cgroup_from_objcg(const struct obj_cgroup *objcg)
{
return NULL;
}
-static inline bool folio_memcg_kmem(struct folio *folio)
+static inline bool folio_memcg_kmem(const struct folio *folio)
{
return false;
}
-static inline bool PageMemcgKmem(struct page *page)
+static inline bool PageMemcgKmem(const struct page *page)
{
return false;
}
-static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
+static inline bool mem_cgroup_is_root(const struct mem_cgroup *memcg)
{
return true;
}
-static inline bool mem_cgroup_shrink_is_root(struct shrink_control *sc)
+static inline bool mem_cgroup_shrink_is_root(const struct shrink_control *sc)
{
return true;
}
@@ -1110,8 +1111,8 @@ static inline void memcg_memory_event_mm(struct mm_struct *mm,
{
}
-static inline void mem_cgroup_protection(struct mem_cgroup *root,
- struct mem_cgroup *memcg,
+static inline void mem_cgroup_protection(const struct mem_cgroup *root,
+ const struct mem_cgroup *memcg,
unsigned long *min,
unsigned long *low,
unsigned long *usage)
@@ -1124,19 +1125,19 @@ static inline void mem_cgroup_calculate_protection(struct mem_cgroup *root,
{
}
-static inline bool mem_cgroup_unprotected(struct mem_cgroup *target,
- struct mem_cgroup *memcg)
+static inline bool mem_cgroup_unprotected(const struct mem_cgroup *target,
+ const struct mem_cgroup *memcg)
{
return true;
}
-static inline bool mem_cgroup_below_low(struct mem_cgroup *target,
- struct mem_cgroup *memcg)
+static inline bool mem_cgroup_below_low(const struct mem_cgroup *target,
+ const struct mem_cgroup *memcg)
{
return false;
}
-static inline bool mem_cgroup_below_min(struct mem_cgroup *target,
- struct mem_cgroup *memcg)
+static inline bool mem_cgroup_below_min(const struct mem_cgroup *target,
+ const struct mem_cgroup *memcg)
{
return false;
}
@@ -1175,25 +1176,25 @@ static inline void mem_cgroup_migrate(struct folio *old, struct folio *new)
{
}
-static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
+static inline struct lruvec *mem_cgroup_lruvec(const struct mem_cgroup *memcg,
struct pglist_data *pgdat)
{
return &pgdat->__lruvec;
}
-static inline struct lruvec *folio_lruvec(struct folio *folio)
+static inline struct lruvec *folio_lruvec(const struct folio *folio)
{
struct pglist_data *pgdat = folio_pgdat(folio);
return &pgdat->__lruvec;
}
-static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)
+static inline struct mem_cgroup *parent_mem_cgroup(const struct mem_cgroup *memcg)
{
return NULL;
}
static inline bool mm_match_cgroup(struct mm_struct *mm,
- struct mem_cgroup *memcg)
+ const struct mem_cgroup *memcg)
{
return true;
}
@@ -1208,7 +1209,7 @@ static inline struct mem_cgroup *get_mem_cgroup_from_current(void)
return NULL;
}
-static inline struct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio)
+static inline struct mem_cgroup *get_mem_cgroup_from_folio(const struct folio *folio)
{
return NULL;
}
@@ -1241,7 +1242,7 @@ static inline void mem_cgroup_put(struct mem_cgroup *memcg)
{
}
-static inline struct lruvec *folio_lruvec_lock(struct folio *folio)
+static inline struct lruvec *folio_lruvec_lock(const struct folio *folio)
{
struct pglist_data *pgdat = folio_pgdat(folio);
@@ -1250,7 +1251,7 @@ static inline struct lruvec *folio_lruvec_lock(struct folio *folio)
return &pgdat->__lruvec;
}
-static inline struct lruvec *folio_lruvec_lock_irq(struct folio *folio)
+static inline struct lruvec *folio_lruvec_lock_irq(const struct folio *folio)
{
struct pglist_data *pgdat = folio_pgdat(folio);
@@ -1259,7 +1260,7 @@ static inline struct lruvec *folio_lruvec_lock_irq(struct folio *folio)
return &pgdat->__lruvec;
}
-static inline struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
+static inline struct lruvec *folio_lruvec_lock_irqsave(const struct folio *folio,
unsigned long *flagsp)
{
struct pglist_data *pgdat = folio_pgdat(folio);
@@ -1287,7 +1288,7 @@ static inline void mem_cgroup_scan_tasks(struct mem_cgroup *memcg,
{
}
-static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memcg)
+static inline unsigned short mem_cgroup_private_id(const struct mem_cgroup *memcg)
{
return 0;
}
@@ -1299,7 +1300,7 @@ static inline struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id)
return NULL;
}
-static inline u64 mem_cgroup_id(struct mem_cgroup *memcg)
+static inline u64 mem_cgroup_id(const struct mem_cgroup *memcg)
{
return 0;
}
@@ -1314,7 +1315,7 @@ static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)
return NULL;
}
-static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
+static inline struct mem_cgroup *lruvec_memcg(const struct lruvec *lruvec)
{
return NULL;
}
@@ -1325,19 +1326,20 @@ static inline bool mem_cgroup_online(struct mem_cgroup *memcg)
}
static inline
-unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
+unsigned long mem_cgroup_get_zone_lru_size(const struct lruvec *lruvec,
enum lru_list lru, int zone_idx)
{
return 0;
}
-static inline unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg)
+static inline unsigned long mem_cgroup_get_max(const struct mem_cgroup *memcg)
{
return 0;
}
static inline void
-mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)
+mem_cgroup_print_oom_context(const struct mem_cgroup *memcg,
+ struct task_struct *p)
{
}
@@ -1366,17 +1368,17 @@ static inline void mod_memcg_state(struct mem_cgroup *memcg,
{
}
-static inline void mod_memcg_page_state(struct page *page,
+static inline void mod_memcg_page_state(const struct page *page,
enum memcg_stat_item idx, int val)
{
}
-static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
+static inline unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx)
{
return 0;
}
-static inline unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item)
+static inline unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item)
{
return 0;
}
@@ -1391,19 +1393,19 @@ static inline bool memcg_vm_event_item_valid(enum vm_event_item idx)
return false;
}
-static inline unsigned long lruvec_page_state(struct lruvec *lruvec,
+static inline unsigned long lruvec_page_state(const struct lruvec *lruvec,
enum node_stat_item idx)
{
return node_page_state(lruvec_pgdat(lruvec), idx);
}
-static inline unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,
+static inline unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,
enum node_stat_item idx)
{
return node_page_state_monotonic(lruvec_pgdat(lruvec), idx);
}
-static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
+static inline unsigned long lruvec_page_state_local(const struct lruvec *lruvec,
enum node_stat_item idx)
{
return node_page_state(lruvec_pgdat(lruvec), idx);
@@ -1431,7 +1433,7 @@ static inline void count_memcg_events(struct mem_cgroup *memcg,
{
}
-static inline void count_memcg_folio_events(struct folio *folio,
+static inline void count_memcg_folio_events(const struct folio *folio,
enum vm_event_item idx, unsigned long nr)
{
}
@@ -1465,7 +1467,7 @@ static inline void mem_cgroup_flush_workqueue(void) { }
static inline int mem_cgroup_init(void) { return 0; }
#endif /* CONFIG_MEMCG */
-static inline struct lruvec *parent_lruvec(struct lruvec *lruvec)
+static inline struct lruvec *parent_lruvec(const struct lruvec *lruvec)
{
struct mem_cgroup *memcg;
@@ -1528,8 +1530,8 @@ static inline void lruvec_unlock_irqrestore(struct lruvec *lruvec, unsigned long
}
/* Test requires a stable folio->memcg binding, see folio_memcg() */
-static inline bool folio_matches_lruvec(struct folio *folio,
- struct lruvec *lruvec)
+static inline bool folio_matches_lruvec(const struct folio *folio,
+ const struct lruvec *lruvec)
{
return lruvec_pgdat(lruvec) == folio_pgdat(folio) &&
lruvec_memcg(lruvec) == folio_memcg(folio);
@@ -1642,7 +1644,7 @@ static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg)
write_sequnlock_irqrestore(&memcg->socket_pressure_seqlock, flags);
}
-static inline u64 mem_cgroup_get_socket_pressure(struct mem_cgroup *memcg)
+static inline u64 mem_cgroup_get_socket_pressure(const struct mem_cgroup *memcg)
{
unsigned int seq;
u64 val;
@@ -1660,7 +1662,7 @@ static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg)
WRITE_ONCE(memcg->socket_pressure, jiffies + HZ);
}
-static inline u64 mem_cgroup_get_socket_pressure(struct mem_cgroup *memcg)
+static inline u64 mem_cgroup_get_socket_pressure(const struct mem_cgroup *memcg)
{
return READ_ONCE(memcg->socket_pressure);
}
@@ -1773,7 +1775,7 @@ static inline void memcg_kmem_uncharge_page(struct page *page, int order)
* A helper for accessing memcg's kmem_id, used for getting
* corresponding LRU lists.
*/
-static inline int memcg_kmem_id(struct mem_cgroup *memcg)
+static inline int memcg_kmem_id(const struct mem_cgroup *memcg)
{
return memcg ? memcg->kmemcg_id : -1;
}
@@ -1845,7 +1847,7 @@ static inline bool memcg_kmem_online(void)
return false;
}
-static inline int memcg_kmem_id(struct mem_cgroup *memcg)
+static inline int memcg_kmem_id(const struct mem_cgroup *memcg)
{
return -1;
}
@@ -1861,7 +1863,7 @@ static inline void count_objcg_events(struct obj_cgroup *objcg,
{
}
-static inline ino_t page_cgroup_ino(struct page *page)
+static inline ino_t page_cgroup_ino(const struct page *page)
{
return 0;
}
@@ -1885,7 +1887,7 @@ static inline bool memcg_is_dying(struct mem_cgroup *memcg)
bool obj_cgroup_may_zswap(struct obj_cgroup *objcg);
void obj_cgroup_charge_zswap(struct obj_cgroup *objcg, size_t size);
void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg, size_t size);
-bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg);
+bool mem_cgroup_zswap_writeback_enabled(const struct mem_cgroup *memcg);
#else
static inline bool obj_cgroup_may_zswap(struct obj_cgroup *objcg)
{
@@ -1899,7 +1901,7 @@ static inline void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg,
size_t size)
{
}
-static inline bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg)
+static inline bool mem_cgroup_zswap_writeback_enabled(const struct mem_cgroup *memcg)
{
/* if zswap is disabled, do not block pages going to the swapping device */
return true;
@@ -1912,7 +1914,7 @@ static inline bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg)
#ifdef CONFIG_MEMCG_V1
bool mem_cgroup_oom_synchronize(bool wait);
-static inline bool task_in_memcg_oom(struct task_struct *p)
+static inline bool task_in_memcg_oom(const struct task_struct *p)
{
return p->memcg_in_oom;
}
@@ -1930,7 +1932,7 @@ static inline void mem_cgroup_exit_user_fault(void)
}
#else /* CONFIG_MEMCG_V1 */
-static inline bool task_in_memcg_oom(struct task_struct *p)
+static inline bool task_in_memcg_oom(const struct task_struct *p)
{
return false;
}
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 84e237f2c17db..8e1e3a50757a3 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -1657,7 +1657,7 @@ extern void init_currently_empty_zone(struct zone *zone, unsigned long start_pfn
extern void lruvec_init(struct lruvec *lruvec);
-static inline struct pglist_data *lruvec_pgdat(struct lruvec *lruvec)
+static inline struct pglist_data *lruvec_pgdat(const struct lruvec *lruvec)
{
#ifdef CONFIG_MEMCG
return lruvec->pgdat;
diff --git a/include/linux/page_counter.h b/include/linux/page_counter.h
index 07b7cb12249c7..2baf7a2b29b2e 100644
--- a/include/linux/page_counter.h
+++ b/include/linux/page_counter.h
@@ -63,12 +63,12 @@ static inline void page_counter_init(struct page_counter *counter,
counter->track_failcnt = false;
}
-static inline unsigned long page_counter_read(struct page_counter *counter)
+static inline unsigned long page_counter_read(const struct page_counter *counter)
{
return atomic_long_read(&counter->usage);
}
-long page_counter_margin(struct page_counter *counter);
+long page_counter_margin(const struct page_counter *counter);
void page_counter_cancel(struct page_counter *counter, unsigned long nr_pages);
void page_counter_charge(struct page_counter *counter, unsigned long nr_pages);
bool page_counter_try_charge(struct page_counter *counter,
diff --git a/include/linux/swap.h b/include/linux/swap.h
index fc290e29e4a9e..843d70680b8e0 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -505,9 +505,9 @@ static inline void mem_cgroup_uncharge_swap(unsigned short id, unsigned int nr_p
__mem_cgroup_uncharge_swap(id, nr_pages);
}
-long mem_cgroup_get_folio_swap_margin(struct folio *folio);
-extern long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg);
-extern bool mem_cgroup_swap_full(struct folio *folio);
+long mem_cgroup_get_folio_swap_margin(const struct folio *folio);
+long mem_cgroup_get_nr_swap_pages(const struct mem_cgroup *memcg);
+bool mem_cgroup_swap_full(const struct folio *folio);
#else
static inline int mem_cgroup_try_charge_swap(struct folio *folio)
{
@@ -519,17 +519,17 @@ static inline void mem_cgroup_uncharge_swap(unsigned short id,
{
}
-static inline long mem_cgroup_get_folio_swap_margin(struct folio *folio)
+static inline long mem_cgroup_get_folio_swap_margin(const struct folio *folio)
{
return PAGE_COUNTER_MAX;
}
-static inline long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)
+static inline long mem_cgroup_get_nr_swap_pages(const struct mem_cgroup *memcg)
{
return get_nr_swap_pages();
}
-static inline bool mem_cgroup_swap_full(struct folio *folio)
+static inline bool mem_cgroup_swap_full(const struct folio *folio)
{
return vm_swap_full();
}
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 5b9e0ebd42ae0..f56e958948ac0 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -331,7 +331,7 @@ EXPORT_SYMBOL(memcg_bpf_enabled_key);
* If memcg is bound to a traditional hierarchy, the css of root_mem_cgroup
* is returned.
*/
-struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(struct folio *folio)
+struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(const struct folio *folio)
{
struct mem_cgroup *memcg;
@@ -356,7 +356,7 @@ struct cgroup_subsys_state *get_mem_cgroup_css_from_folio(struct folio *folio)
* after page_cgroup_ino() returns, so it only should be used by callers that
* do not care (such as procfs interfaces).
*/
-ino_t page_cgroup_ino(struct page *page)
+ino_t page_cgroup_ino(const struct page *page)
{
struct mem_cgroup *memcg;
unsigned long ino = 0;
@@ -489,7 +489,7 @@ struct lruvec_stats {
long state_pending[NR_MEMCG_NODE_STAT_ITEMS];
};
-unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx)
+unsigned long lruvec_page_state(const struct lruvec *lruvec, enum node_stat_item idx)
{
struct mem_cgroup_per_node *pn;
long x;
@@ -530,7 +530,7 @@ unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx)
* monotonically-incremented event counters are stored in
* enum node_stat_item.
*/
-unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,
+unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,
enum node_stat_item idx)
{
struct mem_cgroup_per_node *pn;
@@ -547,7 +547,7 @@ unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,
return (unsigned long)READ_ONCE(pn->lruvec_stats->state[i]);
}
-unsigned long lruvec_page_state_local(struct lruvec *lruvec,
+unsigned long lruvec_page_state_local(const struct lruvec *lruvec,
enum node_stat_item idx)
{
struct mem_cgroup_per_node *pn;
@@ -799,7 +799,7 @@ static void flush_memcg_stats_dwork(struct work_struct *w)
queue_delayed_work(system_dfl_wq, &stats_flush_dwork, FLUSH_TIME);
}
-unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
+unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx)
{
long x;
int i = memcg_stats_index(idx);
@@ -1091,7 +1091,7 @@ void count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,
put_cpu();
}
-unsigned long memcg_events(struct mem_cgroup *memcg, int event)
+unsigned long memcg_events(const struct mem_cgroup *memcg, int event)
{
int i = memcg_events_index(event);
@@ -1220,7 +1220,7 @@ struct mem_cgroup *get_mem_cgroup_from_current(void)
*
* See folio_memcg() for folio->objcg/memcg binding rules.
*/
-struct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio)
+struct mem_cgroup *get_mem_cgroup_from_folio(const struct folio *folio)
{
struct mem_cgroup *memcg;
@@ -1441,7 +1441,7 @@ void mem_cgroup_scan_tasks(struct mem_cgroup *memcg,
*
* Return: The lruvec this folio is on with its lock held and rcu read lock held.
*/
-struct lruvec *folio_lruvec_lock(struct folio *folio)
+struct lruvec *folio_lruvec_lock(const struct folio *folio)
{
struct lruvec *lruvec;
@@ -1469,7 +1469,7 @@ struct lruvec *folio_lruvec_lock(struct folio *folio)
* Return: The lruvec this folio is on with its lock held and interrupts
* disabled and rcu read lock held.
*/
-struct lruvec *folio_lruvec_lock_irq(struct folio *folio)
+struct lruvec *folio_lruvec_lock_irq(const struct folio *folio)
{
struct lruvec *lruvec;
@@ -1498,7 +1498,7 @@ struct lruvec *folio_lruvec_lock_irq(struct folio *folio)
* Return: The lruvec this folio is on with its lock held and interrupts
* disabled and rcu read lock held.
*/
-struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
+struct lruvec *folio_lruvec_lock_irqsave(const struct folio *folio,
unsigned long *flags)
{
struct lruvec *lruvec;
@@ -1709,7 +1709,7 @@ static int memcg_page_state_output_unit(int item)
}
}
-unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item)
+unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item)
{
return memcg_page_state(memcg, item) *
memcg_page_state_output_unit(item);
@@ -1812,7 +1812,8 @@ static void memory_stat_format(struct mem_cgroup *memcg, struct seq_buf *s)
* NOTE: @memcg and @p's mem_cgroup can be different when hierarchy is
* enabled
*/
-void mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)
+void mem_cgroup_print_oom_context(const struct mem_cgroup *memcg,
+ struct task_struct *p)
{
rcu_read_lock();
@@ -1877,7 +1878,7 @@ void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg)
/*
* Return the memory (and swap, if configured) limit for a memcg.
*/
-unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg)
+unsigned long mem_cgroup_get_max(const struct mem_cgroup *memcg)
{
unsigned long max = READ_ONCE(memcg->memory.max);
@@ -5838,7 +5839,7 @@ void __mem_cgroup_uncharge_swap(unsigned short id, unsigned int nr_pages)
rcu_read_unlock();
}
-long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)
+long mem_cgroup_get_nr_swap_pages(const struct mem_cgroup *memcg)
{
long nr_swap_pages = get_nr_swap_pages();
@@ -5854,7 +5855,7 @@ long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)
*
* Return: Remaining chargeable pages in the folio's memcg hierarchy.
*/
-long mem_cgroup_get_folio_swap_margin(struct folio *folio)
+long mem_cgroup_get_folio_swap_margin(const struct folio *folio)
{
struct mem_cgroup *memcg;
long margin;
@@ -5871,7 +5872,7 @@ long mem_cgroup_get_folio_swap_margin(struct folio *folio)
return margin;
}
-bool mem_cgroup_swap_full(struct folio *folio)
+bool mem_cgroup_swap_full(const struct folio *folio)
{
struct mem_cgroup *memcg;
bool ret = false;
@@ -6139,7 +6140,7 @@ void obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg, size_t size)
rcu_read_unlock();
}
-bool mem_cgroup_zswap_writeback_enabled(struct mem_cgroup *memcg)
+bool mem_cgroup_zswap_writeback_enabled(const struct mem_cgroup *memcg)
{
/* if zswap is disabled, do not block pages going to the swapping device */
if (!zswap_is_enabled())
diff --git a/mm/page_counter.c b/mm/page_counter.c
index 450543f4b318b..8c6f3b45136b4 100644
--- a/mm/page_counter.c
+++ b/mm/page_counter.c
@@ -53,7 +53,7 @@ static void propagate_protected_usage(struct page_counter *c,
* Return: The minimum value of max minus usage across @counter and all of
* its ancestors. The value may be negative during a concurrent charge.
*/
-long page_counter_margin(struct page_counter *counter)
+long page_counter_margin(const struct page_counter *counter)
{
long margin = PAGE_COUNTER_MAX;
diff --git a/mm/page_io.c b/mm/page_io.c
index 1da4ff484f097..5f7756e370f7a 100644
--- a/mm/page_io.c
+++ b/mm/page_io.c
@@ -256,12 +256,13 @@ int swap_writeout(struct swap_io_ctx *ctx, struct folio *folio)
}
#if defined(CONFIG_MEMCG) && defined(CONFIG_BLK_CGROUP)
-static struct cgroup_subsys_state *folio_memcg_blkg_css(struct folio *folio)
+static struct cgroup_subsys_state *folio_memcg_blkg_css(const struct folio *folio)
{
return cgroup_e_css(folio_memcg(folio)->css.cgroup, &io_cgrp_subsys);
}
-static bool folio_blkg_can_merge(struct folio *folio, struct folio *prev_folio)
+static bool folio_blkg_can_merge(const struct folio *folio,
+ const struct folio *prev_folio)
{
bool can_merge = true;
@@ -277,7 +278,8 @@ static bool folio_blkg_can_merge(struct folio *folio, struct folio *prev_folio)
return can_merge;
}
-static void bio_associate_blkg_from_folio(struct bio *bio, struct folio *folio)
+static void bio_associate_blkg_from_folio(struct bio *bio,
+ const struct folio *folio)
{
struct cgroup_subsys_state *css;
@@ -294,11 +296,13 @@ static void bio_associate_blkg_from_folio(struct bio *bio, struct folio *folio)
css_put(css);
}
#else
-static bool folio_blkg_can_merge(struct folio *folio, struct folio *prev_folio)
+static bool folio_blkg_can_merge(const struct folio *folio,
+ const struct folio *prev_folio)
{
return true;
}
-static void bio_associate_blkg_from_folio(struct bio *bio, struct folio *folio)
+static void bio_associate_blkg_from_folio(struct bio *bio,
+ const struct folio *folio)
{
}
#endif /* CONFIG_MEMCG && CONFIG_BLK_CGROUP */
diff --git a/mm/swap.h b/mm/swap.h
index 0b5d507739bcb..94714d9dd003c 100644
--- a/mm/swap.h
+++ b/mm/swap.h
@@ -82,7 +82,7 @@ enum swap_cluster_flags {
extern int vm_swappiness;
-static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg)
+static inline int mem_cgroup_swappiness(const struct mem_cgroup *memcg)
{
#ifdef CONFIG_MEMCG_V1
if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) &&
|
| 3/2 | 2026/09/03 18:37 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 16319 output: 81 thoughts: 4429 Thoughts: **Analysis of `const` Qualification Patch** Okay, so I've got this patch here that's making changes across a bunch of core memory management files. My initial thought was to dig into it, see what’s going on, and determine if it's something we need to be concerned about in terms of fuzzing. The change seems straightforward: a bunch of function signatures are getting `const` qualifiers added to pointer parameters. We're talking about things like `struct obj_cgroup`, `struct folio`, `struct mem_cgroup`, `struct page_counter`, etc. It's across the board – `memcontrol.h`, `mmzone.h`, `page_counter.h`, `swap.h` and the associated `.c` files. So, the first thing I did was to thoroughly check for any *actual* code changes. I was looking for: * **Logic changes:** Did any existing functionality get altered? Are there any hidden conditional changes, variable renames, or deleted lines of code? * **Algorithmic changes:** Any tweaks to how data is processed, that could impact behavior? * **New checks/Assertions:** Were any new safety checks introduced? * **Changed constants:** Has the *value* of any constants been altered, which could subtly shift behavior? * **Altered control flow:** Is the order of operations, or the branching within the code, now different? I meticulously went through every line of the diff. I checked for any "surprises." After my line-by-line diff review, it became clear: Every single change is just the addition of `const` qualifiers to pointer parameters. So, for example, `struct mem_cgroup *memcg` becomes `const struct mem_cgroup *memcg`. Now, the important question is: Does this warrant fuzzing? I re-read the fuzzing guidelines and I thought about the core principle: we fuzz to find crashes, regressions, or latent bugs introduced by *the patch series*. I had to ask myself: Does adding `const` to parameters alter the compiled C logic or data structures, algorithm flows or any logic? No, in C, `const` on pointer arguments does *not* change the calling convention. The compiled machine code is identical. There's no layout change, no logic change, no new assertions, no restructured flow. Is there any chance of regression or a bug introduced by `const` qualification? In C, `const` does *not* affect the ABI. The compiled instructions remain completely identical. Can fuzzing discover any crash, regression, latent bug, or triggered assertion in a pure `const` annotation patch? No. Fuzzing the binary does not generate new behavior if the instructions are literally identical. Based on this, I'm confident that this is *not* a patch that requires fuzzing. There are no executable code changes. The change is purely about compiler-enforced const-correctness. I went back and double-checked to ensure there weren't *any* subtle changes beyond the `const` additions. I searched for possible accidental modifications. I looked for *any* logic changes. I looked for *any* new assertions. I reviewed all lines of the diff. I can definitively say that the patch consists *entirely* of `const` qualifier additions to function signatures, and nothing more. There is no change to executable code. This is, in effect, a "no-op" patch from a fuzzing perspective. |
| 4/2 | 2026/09/03 18:38 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch series only adds 'const' qualifiers to pointer parameters across memcontrol, swap, and page counter helper functions to improve const-correctness. It does not introduce or modify executable logic, runtime assertions, control flow, or data structure layouts.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch series only adds 'const' qualifiers to pointer parameters across memcontrol, swap, and page counter helper functions to improve const-correctness. It does not introduce or modify executable logic, runtime assertions, control flow, or data structure layouts.",
"WorthFuzzing": false
} |
| 5/1 | 2026/09/03 18:38 | action | If |
0mArgs:{
"WorthFuzzing": false
}Results: null |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|