lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cc2d32df-94e5-4f54-a395-36208d472c20@akamai.com>
Date: Thu, 11 Dec 2025 16:22:02 -0500
From: Jason Baron <jbaron@...mai.com>
To: Jim Cromie <jim.cromie@...il.com>, <linux-kernel@...r.kernel.org>,
        <dri-devel@...ts.freedesktop.org>, <gregkh@...uxfoundation.org>
CC: <ukaszb@...omium.org>, <louis.chauvet@...tlin.com>
Subject: Re: [PATCH v6 30/31] dyndbg: add
 DYNAMIC_DEBUG_CLASSMAP_USE_(dd_class_name, offset)



On 11/18/25 3:18 PM, Jim Cromie wrote:
----------------------------------------------!
> 
> Allow a module to use 2 classmaps together that would otherwise have a
> class_id range conflict.
> 
> Suppose drm-driver does:
> 
>    DYNAMIC_DEBUG_CLASSMAP_USE(drm_debug_classes);
>    DYNAMIC_DEBUG_CLASSMAP_USE(drm_accel_xfer_debug);
> 
> And (for some reason) drm-accel will not define their constants to
> avoid DRM's 0..10 reservations (seems a long stretch).
> 
> So I dont think this potential conflict would become an issue until we
> have at least a 3-X-3 of classmap-defns X classmap-users
> 
> So drop this if its too speculative, knowing theres at least a
> notional solution should the situation arise.
> 
> Signed-off-by: Jim Cromie <jim.cromie@...il.com>
> ---
> re-ref of an lvalue is fine.
> CHECK: Macro argument reuse '_var' - possible side-effects?
> 
> -v5+ less hand-wavy
> ---
>   include/linux/dynamic_debug.h | 30 +++++++++++++++++++++++-------
>   lib/dynamic_debug.c           | 19 ++++++++++++-------
>   2 files changed, 35 insertions(+), 14 deletions(-)
> 
> diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
> index b22da40e2583..5307be8da5c1 100644
> --- a/include/linux/dynamic_debug.h
> +++ b/include/linux/dynamic_debug.h
> @@ -87,7 +87,7 @@ struct _ddebug_class_map {
>   struct _ddebug_class_user {
>   	char *mod_name;
>   	struct _ddebug_class_map *map;
> -	const int base;		/* user offset to re-number the used map */
> +	const int offset;	/* offset from map->base */
>   };
>   
>   /*
> @@ -235,21 +235,37 @@ struct _ddebug_class_param {
>   /**
>    * DYNAMIC_DEBUG_CLASSMAP_USE - refer to a classmap, DEFINEd elsewhere.
>    * @_var: name of the exported classmap var
> - * @_not_yet: _base-like, but applies only to this USEr. (if needed)
>    *
>    * This tells dyndbg that the module has prdbgs with classids defined
>    * in the named classmap.  This qualifies "class NAME" >controls on
> - * the user module, and ignores unknown names.
> + * the user module, and ignores unknown names. This is a wrapper for
> + * DYNAMIC_DEBUG_CLASSMAP_USE_() with a base offset of 0.
>    */
> -#define DYNAMIC_DEBUG_CLASSMAP_USE(_var)				\
> -	DYNAMIC_DEBUG_CLASSMAP_USE_(_var, 0, __UNIQUE_ID(_ddebug_class_user))
> -#define DYNAMIC_DEBUG_CLASSMAP_USE_(_var, _base, _uname)		\
> +#define DYNAMIC_DEBUG_CLASSMAP_USE(_var) \
> +	DYNAMIC_DEBUG_CLASSMAP_USE_(_var, 0)
> +
> +/**
> + * DYNAMIC_DEBUG_CLASSMAP_USE_ - refer to a classmap with a manual offset.
> + * @_var:   name of the exported classmap var to use.
> + * @_offset:  an integer offset to add to the class IDs of the used map.
> + *
> + * This is an extended version of DYNAMIC_DEBUG_CLASSMAP_USE(). It should
> + * only be used to resolve class ID conflicts when a module uses multiple
> + * classmaps that have overlapping ID ranges.
> + *
> + * The final class IDs for the used map will be calculated as:
> + * original_map_base + class_index + @_base.


Shouldn't this be @offset here in the comment?

> + */
> +#define DYNAMIC_DEBUG_CLASSMAP_USE_(_var, _offset)			\
> +	__DYNAMIC_DEBUG_CLASSMAP_USE(_var, _offset, __UNIQUE_ID(_ddebug_class_user))
> +
> +#define __DYNAMIC_DEBUG_CLASSMAP_USE(_var, _offset, _uname)		\
>   	extern struct _ddebug_class_map _var;				\
>   	static struct _ddebug_class_user __aligned(8) __used		\
>   	__section("__dyndbg_class_users") _uname = {			\
>   		.mod_name = KBUILD_MODNAME,				\
>   		.map = &(_var),						\
> -		.base = _base						\
> +		.offset = _offset						\
>   	}
>   
>   /**
> diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
> index 1082e0273f0e..bf1ff29cca95 100644
> --- a/lib/dynamic_debug.c
> +++ b/lib/dynamic_debug.c
> @@ -198,7 +198,7 @@ ddebug_find_valid_class(struct _ddebug_info const *di, const char *query_class,
>   		if (idx >= 0) {
>   			vpr_di_info(di, "class-ref: %s -> %s.%s ",
>   				    cli->mod_name, cli->map->mod_name, query_class);
> -			*class_id = idx + cli->map->base;
> +			*class_id = idx + cli->map->base - cli->offset;


Why is this '-'? Comment above says offset says:

"@_offset:  an integer offset to add to the class IDs of the used map."

Thanks,

-Jason



Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ