From nobody Tue Feb 10 03:45:01 2026 Received: from mail-il1-f169.google.com (mail-il1-f169.google.com [209.85.166.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7877F20ADE1 for ; Sat, 25 Jan 2025 06:46:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737787618; cv=none; b=Fyswnu++jR8IaG2G0MXgJKgz3MWIWVjbJ9KPaKb8E9/hxAbs7q1AqKaMt0DXXpSpzcnO5o/UhiHT4KaYe2o8Dy0lJdrXGG+7Qp2JJVYpcJ5wP9EzcCtV611Ie4Ob9NRtlctiooZeePAzTBQmwmv/ziDIgYJw/klxrOsg/ds5tPg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737787618; c=relaxed/simple; bh=L3jWxSPNw0/I321jOnJSmC2MhE7xQB3BsJab6rVtRNo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JATPCPXonH0NOEUtDiWBydYSnmLnmXrPJP5Dut/oqya2nL+ihUTfCC/1fXA9dTPUvUMycdHFMjPAXk+2Y5QfSjSgobWzKL2to1IUf8Oo8M3v8fBDCLODSxEF4QpmNYOkILsOA02YtiTCUVInw/4hX5yySbQ2R4v+7YzzU4HRfRY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DXOplTOn; arc=none smtp.client-ip=209.85.166.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DXOplTOn" Received: by mail-il1-f169.google.com with SMTP id e9e14a558f8ab-3cf82bd380bso23195215ab.0 for ; Fri, 24 Jan 2025 22:46:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737787615; x=1738392415; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Xde8rOoc7ub5IEPiyVqYWw11iutjj4hEBt+3xz2QfjM=; b=DXOplTOnnCDwBRiVxXyjmowv+sWqEhoWc0JFikK+69xXdukamhJokY0B4AxQb1F4ZI O+2ouepc96icPus/ygjsQfP3TG8IdQBCh484gJJQGEYaIim7R5EHtjxfaIAPB3RflVwN XEiwC/fk0/bGuWgR9NtbPLj+n+iQCTLSgLCCI9R7Sb/caw7CWQTv2rN5txZXY7N7DvvC M8tZmEoZy465SGHGgH4f2kdKNiFYWAaqcTLXGY2ekVlLRBc6BSCxyR1CEe7BBK+UU3Hy rGjeAVm5P0dDDWSAbsSZvd+LD4vEbSsUXLWUXGXi4+ZqQB0oCdDRAyndyU8pCsvNRNJv nZrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737787615; x=1738392415; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Xde8rOoc7ub5IEPiyVqYWw11iutjj4hEBt+3xz2QfjM=; b=Jg9gGiJG0svXYlquYI7zjuOeqah8bPFIrfpFIuuCggWSdjjH+UvCVl4VyULXmFPOhe PHm7OmE5KR6k16i3chvxu8Ym4+C6lkx3T1KBNHiyFuRfpBCva4WFpCd3SMn1WUJiGaFp MhwFKggEMGihjDIlJMNO2foA0DZbs9E/eyLQgBnSxepbGZ3LktfFverkzDFPuKbZY1HZ TpkNqMX4Fy+GJurtqeF51Y08VcRvwSKjnjqov13qiOsyDbO8upz9UnHQ1G1j/XU7gpZr LjmsSBFonYhKLEoYDrmysh7Em1oMjvDtJIF1wkJ4lMgzPK9fLrQZkvKc6/2fiUEAcrSK codw== X-Gm-Message-State: AOJu0YxYbtijRGk3URzJiFqe/a19fc7qdSTsZVofgegh2ijHKEn5LBw7 H3Ja96Sgm6ot839sXU/YsWqVKYPhwb3Gkt5nQXycMOzmXmC2FHm4yNPgUA== X-Gm-Gg: ASbGnctVfsRGocdyNvFYBlOm8pGP7pEzNhU06eFtu4G7skERUFxvgZlWaxPCxNdfYNq OC6U0+SaYD3a2F1WuC9a8qWYQMo6k6ZMCbK0VpDmTY9TcNbKGzETtgX5W4/3Bl6GR/kYva+1FjD oWNWDXjpkZ9rRyvk3gYxjQW0nLO0kB4Q/psF+H592+5JPeFjJdC4omYdg4F15i7EholrnLox+5r JyexQ04Nwh1kDaMszKbc7z8/cFyUate+5LZxPb2JQRdUQBkNq5hvcwqyjKRNpI64WT8hOPBqBK1 44UYlq5hxB0rN40bgG7iAV8pUxRg1ZPhu6CZ3A== X-Google-Smtp-Source: AGHT+IG0fqXZTCvCCnwL9vi7cYB4QP6opHHV2Qe7YcKfvhFM9yUxKYXJHOh6jRvUhuTThLQuLUmipg== X-Received: by 2002:a05:6e02:174a:b0:3cf:ce7c:b8b1 with SMTP id e9e14a558f8ab-3cfce7cb91cmr43838095ab.18.1737787615489; Fri, 24 Jan 2025 22:46:55 -0800 (PST) Received: from gandalf.. (c-67-165-245-5.hsd1.co.comcast.net. [67.165.245.5]) by smtp.googlemail.com with ESMTPSA id 8926c6da1cb9f-4ec1da476fesm1174144173.58.2025.01.24.22.46.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jan 2025 22:46:55 -0800 (PST) From: Jim Cromie To: linux-kernel@vger.kernel.org, jbaron@akamai.com, gregkh@linuxfoundation.org, ukaszb@chromium.org Cc: intel-gfx-trybot@lists.freedesktop.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, daniel.vetter@ffwll.ch, tvrtko.ursulin@linux.intel.com, jani.nikula@intel.com, ville.syrjala@linux.intel.com, Jim Cromie Subject: [PATCH 17/63] dyndbg: check DYNDBG_CLASSMAP_DEFINE args at compile-time Date: Fri, 24 Jan 2025 23:45:31 -0700 Message-ID: <20250125064619.8305-18-jim.cromie@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250125064619.8305-1-jim.cromie@gmail.com> References: <20250125064619.8305-1-jim.cromie@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add __DYNDBG_CLASSMAP_CHECK to implement these arg-checks at compile: 0 <=3D _base < 63 class_names is not empty class_names[0] is a string (class_names.length + _base) < 63 These compile-time checks will prevent several misuses; 4 such examples are added to test_dynamic_debug_submod.ko, and will fail compilation if -DDD_MACRO_ARGCHECK is added to cflags. Signed-off-by: Jim Cromie Tested-by: Louis Chauvet --- - split static-asserts to __DYNDBG_CLASSMAP_CHECK - move __DYNDBG_CLASSMAP_CHECK above kdoc for DYNDBG_CLASSMAP_DEFINE silences kernel-doc warnings --- include/linux/dynamic_debug.h | 9 +++++++++ lib/test_dynamic_debug.c | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index dc610a12b91c..2b0c943af330 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -99,6 +99,14 @@ struct ddebug_class_map { enum ddebug_class_map_type map_type; }; =20 +#define __DYNDBG_CLASSMAP_CHECK(_clnames, _base) \ + static_assert(((_base) >=3D 0 && (_base) < _DPRINTK_CLASS_DFLT), \ + "_base must be in 0..62"); \ + static_assert(ARRAY_SIZE(_clnames) > 0, \ + "classnames array size must be > 0"); \ + static_assert((ARRAY_SIZE(_clnames) + (_base)) < _DPRINTK_CLASS_DFLT, \ + "_base + classnames.length exceeds range") + /** * DYNDBG_CLASSMAP_DEFINE - define debug classes used by a module. * @_var: name of the classmap, exported for other modules coordinated u= se. @@ -112,6 +120,7 @@ struct ddebug_class_map { */ #define DYNDBG_CLASSMAP_DEFINE(_var, _mapty, _base, ...) \ static const char *_var##_classnames[] =3D { __VA_ARGS__ }; \ + __DYNDBG_CLASSMAP_CHECK(_var##_classnames, (_base)); \ extern struct ddebug_class_map _var; \ struct ddebug_class_map __aligned(8) __used \ __section("__dyndbg_classes") _var =3D { \ diff --git a/lib/test_dynamic_debug.c b/lib/test_dynamic_debug.c index 1838f62738c4..b1555b0a2bb1 100644 --- a/lib/test_dynamic_debug.c +++ b/lib/test_dynamic_debug.c @@ -123,8 +123,19 @@ DYNDBG_CLASSMAP_PARAM(level_num, p); DYNDBG_CLASSMAP_USE(map_disjoint_bits); DYNDBG_CLASSMAP_USE(map_level_num); =20 +#if defined(DD_MACRO_ARGCHECK) +/* + * Exersize compile-time arg-checks in DYNDBG_CLASSMAP_DEFINE. + * These will break compilation. + */ +DYNDBG_CLASSMAP_DEFINE(fail_base_neg, 0, -1, "NEGATIVE_BASE_ARG"); +DYNDBG_CLASSMAP_DEFINE(fail_base_big, 0, 100, "TOOBIG_BASE_ARG"); +DYNDBG_CLASSMAP_DEFINE(fail_str_type, 0, 0, 1 /* not a string */); +DYNDBG_CLASSMAP_DEFINE(fail_emptyclass, 0, 0 /* ,empty */); #endif =20 +#endif /* TEST_DYNAMIC_DEBUG_SUBMOD */ + /* stand-in for all pr_debug etc */ #define prdbg(SYM) __pr_debug_cls(SYM, #SYM " msg\n") =20 --=20 2.48.1