Linux Modules
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Jim Cromie" <jim.cromie@gmail.com>
Cc: linux-modules@vger.kernel.org
Subject: Re: [PATCH v2 18/24] dyndbg: Upgrade class param storage to u64 for 64-bit classmaps
Date: Sat, 23 May 2026 07:42:49 +0000	[thread overview]
Message-ID: <20260523074249.B1EB61F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260523-dd-maint-2-v2-18-b937312aa083@gmail.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

New issues:
- [High] Buffer Overflow / Memory Corruption due to mismatched types in `ddebug_class_param`.

Pre-existing issues:
- [High] Undefined Behavior in `CLASSMAP_BITMASK` triggers shift overflow for 64-bit classmaps.
--

commit 58d2c659362026860249b9d71580382d0d84aa4e
Author: Jim Cromie <jim.cromie@gmail.com>

dyndbg: Upgrade class param storage to u64 for 64-bit classmaps

This commit upgrades the internal storage types in struct
ddebug_class_param from unsigned long to u64 pointers. This change
aims to safely support 64-bit classmaps across all architectures
without truncation.

> diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
> index e9481ef21825d..580aa258f902f 100644
> --- a/lib/dynamic_debug.c
> +++ b/lib/dynamic_debug.c
> @@ -661,7 +663,7 @@ static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp,
>  /* stub to later conditionally add "$module." prefix where not already done */
>  #define KP_NAME(kp)	kp->name
>  
> -#define CLASSMAP_BITMASK(width) ((1UL << (width)) - 1)
> +#define CLASSMAP_BITMASK(width) ((1ULL << (width)) - 1)

[Severity: High]
This isn't a bug introduced by this patch, but does this macro invoke
undefined behavior if the classmap width reaches 64 bits?

If width is 64, shifting 1ULL by 64 is undefined behavior in C. On some
architectures like x86, the shift count is masked by 63, causing 1ULL << 64
to evaluate to 1ULL << 0 (which is 1). This would result in a bitmask of 0,
wiping out valid input bits and breaking the 64-bit feature.

[ ... ]

> @@ -696,24 +698,24 @@ static int param_set_dyndbg_module_classes(const char *instr,
>  	case DD_CLASS_TYPE_DISJOINT_BITS:
>  		/* expect bits. mask and warn if too many */
>  		if (inrep & ~CLASSMAP_BITMASK(map->length)) {
> -			pr_warn("%s: input: 0x%lx exceeds mask: 0x%lx, masking\n",
> +			pr_warn("%s: input: 0x%llx exceeds mask: 0x%llx, masking\n",
>  				KP_NAME(kp), inrep, CLASSMAP_BITMASK(map->length));
>  			inrep &= CLASSMAP_BITMASK(map->length);
>  		}
> -		v2pr_info("bits:0x%lx > %s.%s\n", inrep, mod_name ?: "*", KP_NAME(kp));
> +		v2pr_info("bits:0x%llx > %s.%s\n", inrep, mod_name ?: "*", KP_NAME(kp));
>  		totct += ddebug_apply_class_bitmap(dcp, &inrep, *dcp->bits, mod_name);
>  		*dcp->bits = inrep;

[Severity: High]
Can this cause memory corruption on 32-bit architectures?

The commit message notes that __drm_debug is not yet updated to u64,
meaning it remains an unsigned long. On 32-bit systems, unsigned long is 4
bytes. Since dcp->bits is now a u64 pointer, won't assigning inrep perform
an 8-byte write into a 4-byte allocation, corrupting adjacent memory?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260523-dd-maint-2-v2-0-b937312aa083@gmail.com?part=18

  reply	other threads:[~2026-05-23  7:42 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-23  7:14 [PATCH v2 00/24] dynamic-debug cleanups refactors maintenance + alignment fix Jim Cromie
2026-05-23  7:14 ` [PATCH v2 01/24] docs/dyndbg: update examples \012 to \n Jim Cromie
2026-05-23  7:14 ` [PATCH v2 02/24] docs/dyndbg: explain flags parse 1st Jim Cromie
2026-05-23  7:14 ` [PATCH v2 03/24] vmlinux.lds.h: refactor BOUNDED_SECTION_* macros into bounded_sections.lds.h Jim Cromie
2026-05-23  7:14 ` [PATCH v2 04/24] vmlinux.lds.h: drop unused HEADERED_SECTION* macros Jim Cromie
2026-05-23  7:14 ` [PATCH v2 05/24] vmlinux.lds.h: Fix ALIGN(8) omission causing NULL ptr on i386 Jim Cromie
2026-05-23  7:42   ` sashiko-bot
2026-05-23  7:14 ` [PATCH v2 06/24] vmlinux.lds.h: remove redundant ALIGN(8) directives Jim Cromie
2026-05-23  7:14 ` [PATCH v2 07/24] dyndbg.lds.S: fix lost dyndbg sections in modules Jim Cromie
2026-05-23  7:14 ` [PATCH v2 08/24] dyndbg: factor ddebug_match_desc out from ddebug_change Jim Cromie
2026-05-23  7:14 ` [PATCH v2 09/24] dyndbg: add stub macro for DECLARE_DYNDBG_CLASSMAP Jim Cromie
2026-05-23  7:14 ` [PATCH v2 10/24] dyndbg: reword "class unknown," to "class:_UNKNOWN_" Jim Cromie
2026-05-23  7:14 ` [PATCH v2 11/24] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2026-05-23  7:33   ` sashiko-bot
2026-05-23  7:14 ` [PATCH v2 12/24] dyndbg: drop NUM_TYPE_ARGS Jim Cromie
2026-05-23  7:32   ` sashiko-bot
2026-05-23  7:14 ` [PATCH v2 13/24] dyndbg: reduce verbose/debug clutter Jim Cromie
2026-05-23  7:30   ` sashiko-bot
2026-05-23  7:14 ` [PATCH v2 14/24] dyndbg: refactor param_set_dyndbg_classes and below Jim Cromie
2026-05-23  7:14 ` [PATCH v2 15/24] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2026-05-23  7:14 ` [PATCH v2 16/24] dyndbg: replace classmap list with an array-slice Jim Cromie
2026-05-23  7:41   ` sashiko-bot
2026-05-23  7:14 ` [PATCH v2 17/24] dyndbg: macrofy a 2-index for-loop pattern Jim Cromie
2026-05-23  7:14 ` [PATCH v2 18/24] dyndbg: Upgrade class param storage to u64 for 64-bit classmaps Jim Cromie
2026-05-23  7:42   ` sashiko-bot [this message]
2026-05-23  7:14 ` [PATCH v2 19/24] dyndbg,module: make proper substructs in _ddebug_info Jim Cromie
2026-05-23  7:45   ` sashiko-bot
2026-05-23  7:14 ` [PATCH v2 20/24] dyndbg: move mod_name down from struct ddebug_table to _ddebug_info Jim Cromie
2026-05-23  7:14 ` [PATCH v2 21/24] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module Jim Cromie
2026-05-23  7:45   ` sashiko-bot
2026-05-23  7:14 ` [PATCH v2 22/24] selftests-dyndbg: add a dynamic_debug run_tests target Jim Cromie
2026-05-23  7:37   ` sashiko-bot
2026-05-23  7:14 ` [PATCH v2 23/24] dyndbg: change __dynamic_func_call_cls* macros into expressions Jim Cromie
2026-05-23  7:14 ` [PATCH v2 24/24] dyndbg: improve section names Jim Cromie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260523074249.B1EB61F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=jim.cromie@gmail.com \
    --cc=linux-modules@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox