Re: [PATCH v7 26/29] dyndbg: move mod_name down from struct ddebug_table to _ddebug_info
[email protected] Tue, 21 Jul 2026 21:13:00 +0000
| Newsgroups | org.kernel.vger.linux-modules,org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] When processing a built-in module that has no class maps, `ddebug_attach_module_classes()` fails to reset `dt->info.maps.len` to 0, causing the module to erroneously inherit the global array of all built-in class maps. -- --- Patch [26]: [PATCH v7 26/29] dyndbg: move mod_name down from struct ddebug_table to _ddebug_info --- commit bd18115a5b87d80ee2f5c15c166c46a301cbd184 Author: Jim Cromie <[email protected]> dyndbg: move mod_name down from struct ddebug_table to _ddebug_info struct _ddebug_info already has most of dyndbg's info for a module; push debug_table.mod_name down into it, finishing the encapsulation. This commit moves the module name from struct ddebug_table into struct _ddebug_info. This encapsulates the module information, allowing several callchains to pass _ddebug_info directly rather than the full table. > diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c > index e7742fcca50ba..905277fa495b4 100644 > --- a/lib/dynamic_debug.c > +++ b/lib/dynamic_debug.c [ ... ] > @@ -1187,7 +1187,7 @@ static void ddebug_attach_module_classes(struct ddebug_table *dt, struct _ddebug > * and length of the subrange at its edges. > */ > for_subvec(i, cm, di, maps) { > - if (!strcmp(cm->mod_name, dt->mod_name)) { > + if (!strcmp(cm->mod_name, dt->info.mod_name)) { > if (!nc) { > v2pr_info("start subrange, class[%d]: module:%s base:%d len:%d ty:%d\n", > i, cm->mod_name, cm->base, cm->length, cm->map_type); > @@ -1201,7 +1201,7 @@ static void ddebug_attach_module_classes(struct ddebug_table *dt, struct _ddebug > } > if (nc) { > dt->info.maps.len = nc; > - vpr_info("module:%s attached %d classes\n", dt->mod_name, nc); > + vpr_info("module:%s attached %d classes\n", dt->info.mod_name, nc); > } > } [Severity: Medium] When processing a built-in module that has no class maps, does ddebug_attach_module_classes() fail to reset dt->info.maps.len to 0? During boot, dynamic_debug_init() creates a stack variable di where maps.start and maps.len cover the entire __dyndbg_class_maps section. For each built-in module, ddebug_add_module(&di) is called. It performs a shallow copy dt->info = *di, assigning the full length. It then calls ddebug_attach_module_classes(). If the module has no class maps, the loop finds no matches (nc == 0), skipping the if (nc) block: if (nc) { dt->info.maps.len = nc; vpr_info("module:%s attached %d classes\n", dt->info.mod_name, nc); } Because of this, does dt->info.maps.len improperly retain the length of all built-in class maps, causing the module to erroneously inherit the global array of all built-in class maps? This logic error could allow users to apply unrelated class strings to a module's debug prints via the control interface, leading to incorrect functional behavior of the dynamic debug API. -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=26