From nobody Sat Feb 7 11:31:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9550512EBC0 for ; Mon, 25 Mar 2024 15:36:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381007; cv=none; b=rYguKcpWNTqeWdnxCBHohrmMT2JZGRUabLTXAFRwlq+p2IGlm8BLa1GCUdPoUQKISN2JgsipKr2n7FK5vhbb0FSQR/ZH7LuOcNv8q/B7ffjCwjnHoxlU+zUa12J21fzMfNTQbl1SR5uoREqaso4p/epWi4ZlkB0ZpJhaZmTVdE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381007; c=relaxed/simple; bh=63ps3itBNH6CkxrvJz2SUMrLS5Lmnnh52yVxG/KH+F4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=U9TpMW/X1N/libevyrKYqRtl0DAqoevQhFKea/JNU82OWP1UTyoOoUpEKSHFu6DenWWS7jL7hEFAoFbJeNUJi/jG0Pwiva6eDoogOQOFCYxUJVwcBtNK1ECF9umZcrOQuh/rhrBSzYaZBjeTzxRZXiPME0lGdIrywgCLYeQkQUo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=dnWCqJKt; arc=none smtp.client-ip=198.175.65.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="dnWCqJKt" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1711381005; x=1742917005; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=63ps3itBNH6CkxrvJz2SUMrLS5Lmnnh52yVxG/KH+F4=; b=dnWCqJKtM1OLZSCXiE6Prbdqv7pcYOvvYJVN22shaS7W5WSrzVshxgt7 FRER/xh8nPYnfdeyQHU3K0UEuJ8MZst1aqniqvNt8vZJIzYbrcULFaWOC AA0rTT+q3sy+qLDNKxjNTZbKl/MVrFrdUiKZOMWcRFP7KCwMRhDMITBha /8RB1pXJ76qd0NSd5T9tex3dIHkU769ILwiKKPbf0Q6gc575kDhHKsFfq EWlLx71gPGup9ldvweoTVgjd8TtbhulP729RAeDE2EK5jCl15HT87I/cM u64avAFUjT58gz21hn6e6pn7+MIf11b/u0YRoMkh3QlBRcnxZY5+ewxsF Q==; X-IronPort-AV: E=McAfee;i="6600,9927,11023"; a="23842518" X-IronPort-AV: E=Sophos;i="6.07,153,1708416000"; d="scan'208";a="23842518" Received: from orviesa004.jf.intel.com ([10.64.159.144]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 08:36:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,153,1708416000"; d="scan'208";a="20337599" Received: from idirlea-mobl.ger.corp.intel.com (HELO localhost) ([10.252.55.171]) by orviesa004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 08:36:44 -0700 From: Jani Nikula To: Andrew Morton , Greg KH , linux-kernel@vger.kernel.org Cc: jani.nikula@intel.com Subject: [RFC 1/4] kernel/panic: return early from print_tainted() when not tainted Date: Mon, 25 Mar 2024 17:36:32 +0200 Message-Id: <2adfb5b76982d65d83077c8c5b269dbd8a63864a.1711380724.git.jani.nikula@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Reduce indent to make follow-up changes slightly easier on the eyes. Cc: Andrew Morton Cc: Greg KH Signed-off-by: Jani Nikula --- kernel/panic.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/kernel/panic.c b/kernel/panic.c index 628673ddf1c9..b6d4d1da1eaa 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -509,22 +509,23 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT= ] =3D { const char *print_tainted(void) { static char buf[TAINT_FLAGS_COUNT + sizeof("Tainted: ")]; + char *s; + int i; =20 BUILD_BUG_ON(ARRAY_SIZE(taint_flags) !=3D TAINT_FLAGS_COUNT); =20 - if (tainted_mask) { - char *s; - int i; - - s =3D buf + sprintf(buf, "Tainted: "); - for (i =3D 0; i < TAINT_FLAGS_COUNT; i++) { - const struct taint_flag *t =3D &taint_flags[i]; - *s++ =3D test_bit(i, &tainted_mask) ? - t->c_true : t->c_false; - } - *s =3D 0; - } else + if (!tainted_mask) { snprintf(buf, sizeof(buf), "Not tainted"); + return buf; + } + + s =3D buf + sprintf(buf, "Tainted: "); + for (i =3D 0; i < TAINT_FLAGS_COUNT; i++) { + const struct taint_flag *t =3D &taint_flags[i]; + *s++ =3D test_bit(i, &tainted_mask) ? + t->c_true : t->c_false; + } + *s =3D 0; =20 return buf; } --=20 2.39.2 From nobody Sat Feb 7 11:31:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39C7112EBC0 for ; Mon, 25 Mar 2024 15:36:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381013; cv=none; b=j2DqAvKT4+KR++HequSbqpT5BhNb5kMCiLRxTetw4Xqd9laGuGH9bU+HZSC6wTC/9az3s2IMIJaggL8NiYtLasP2d76NoYtRBzly3IMt/dmlGmLN/AN1iNk5VF+hdsjvYLA88ZZj1TZTXt7awIF17Hezx/tb+aVZRiNAUC4r5jg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381013; c=relaxed/simple; bh=ZSTkalsFKnRIcJYK2kiX5ohZP7T+Nr/VG9RYwgkXnBw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rpcYFvGk9HxDwWG4W8kWcoBxjZG87cGwA0YA9m/fZBUS+/j2SrljdlHj8PSHmPy9rOwrd11hvmY3pBCHgWcpjdigZcURMOMOW2CkFGLy06/5x17h5fu0ug7I3JA/e0mJk7eavgzuhqVwGfY9bhQNMh+gTFVJ2JQU8EWJcepSDw8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=eP8b42En; arc=none smtp.client-ip=192.198.163.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="eP8b42En" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1711381011; x=1742917011; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ZSTkalsFKnRIcJYK2kiX5ohZP7T+Nr/VG9RYwgkXnBw=; b=eP8b42EnSp80EcA2nXsoeNn4QBzrXVS6marpubZfw/NIMoJxMoEnEINb mOxzuTJO0Kpq2Wx4i9igt/Jn/e1MN+mJ3rZDUqhc55Zo6ObaCng6ZXX1a 7XkIAxMEBf5oDwyf0u1bw5ItN5kViDIdz9NPinEgBBBLDUVgCGdu2Ikxr Vm2Qhrf4lDKJeiGm33othjLCP0qjE8lCilkvJoYhZk+UVvNJ22K4V9sJJ aKtG94XePhRGrYdrj3dwYvOioH+hT8agmRQghEqHb76KuWfJ4vgBR0kL1 Fmp2AQLtPCcQIB0Ytm80bQEh9AoMUf8QYVe47e9ufM9n96jMbX+huDTj1 A==; X-IronPort-AV: E=McAfee;i="6600,9927,11023"; a="17125068" X-IronPort-AV: E=Sophos;i="6.07,153,1708416000"; d="scan'208";a="17125068" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 08:36:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,153,1708416000"; d="scan'208";a="15523911" Received: from idirlea-mobl.ger.corp.intel.com (HELO localhost) ([10.252.55.171]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 08:36:48 -0700 From: Jani Nikula To: Andrew Morton , Greg KH , linux-kernel@vger.kernel.org Cc: jani.nikula@intel.com Subject: [RFC 2/4] kernel/panic: convert print_tainted() to use struct seq_buf internally Date: Mon, 25 Mar 2024 17:36:33 +0200 Message-Id: X-Mailer: git-send-email 2.39.2 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert print_tainted() to use struct seq_buf internally in order to be more aware of the buffer constraints as well as make it easier to extend in follow-up work. Cc: Andrew Morton Cc: Greg KH Signed-off-by: Jani Nikula --- kernel/panic.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/kernel/panic.c b/kernel/panic.c index b6d4d1da1eaa..d2d5f0a4b514 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include =20 @@ -498,6 +499,25 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT]= =3D { [ TAINT_TEST ] =3D { 'N', ' ', true }, }; =20 +static void print_tainted_seq(struct seq_buf *s) +{ + int i; + + if (!tainted_mask) { + seq_buf_puts(s, "Not tainted"); + return; + } + + seq_buf_printf(s, "Tainted: "); + for (i =3D 0; i < TAINT_FLAGS_COUNT; i++) { + const struct taint_flag *t =3D &taint_flags[i]; + bool is_set =3D test_bit(i, &tainted_mask); + char c =3D is_set ? t->c_true : t->c_false; + + seq_buf_putc(s, c); + } +} + /** * print_tainted - return a string to represent the kernel taint state. * @@ -509,25 +529,15 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT= ] =3D { const char *print_tainted(void) { static char buf[TAINT_FLAGS_COUNT + sizeof("Tainted: ")]; - char *s; - int i; + struct seq_buf s; =20 BUILD_BUG_ON(ARRAY_SIZE(taint_flags) !=3D TAINT_FLAGS_COUNT); =20 - if (!tainted_mask) { - snprintf(buf, sizeof(buf), "Not tainted"); - return buf; - } + seq_buf_init(&s, buf, sizeof(buf)); =20 - s =3D buf + sprintf(buf, "Tainted: "); - for (i =3D 0; i < TAINT_FLAGS_COUNT; i++) { - const struct taint_flag *t =3D &taint_flags[i]; - *s++ =3D test_bit(i, &tainted_mask) ? - t->c_true : t->c_false; - } - *s =3D 0; + print_tainted_seq(&s); =20 - return buf; + return seq_buf_str(&s); } =20 int test_taint(unsigned flag) --=20 2.39.2 From nobody Sat Feb 7 11:31:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 970121304AD for ; Mon, 25 Mar 2024 15:36:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381017; cv=none; b=K744/741lbUH77LEOqEwpGjYOUxvlnCvcNQsB7u4NTz8qTcVsHrF7qOLHgnibpr98vDHr79SR+nuKWGqKEfgRMo7OUddeOloB0LTD5wGIdn0X80XRhXHeLD0ZXvjdf6nXDPBmhWFBmFNkvKQ/pl0LpSE59w2DYcc1iHq2dtr9nE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381017; c=relaxed/simple; bh=wMsPr5Ua8rI3QCm1XRXIe808ikAt5n5DeLEZcsm/1xw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jTKKfI8tSE1UtTnavcx33x+od+7X7RhWH5ArhDEGpdyQWWO6s1gpcewI0BV3eRziMmY2zJJJzLE2xToZlVkMkOWVxIIIKGpm9tEFmaGAKk8peponm3ixw54rvU7iE8J9bEMi93/MYkOHLNmhyIYW91Yvca4iX0y5FZ+MO8tkxV0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=d3qeQ5ot; arc=none smtp.client-ip=192.198.163.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="d3qeQ5ot" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1711381016; x=1742917016; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wMsPr5Ua8rI3QCm1XRXIe808ikAt5n5DeLEZcsm/1xw=; b=d3qeQ5otQonddW59pMPvmNTbyLB3gP4pu06TfJVzuKFZRH7djIo0GJYI rBJ/+on70+vtjduzL79AveoZC57Y25POFGzGcB3+B+OZikIdR9GJiMAyB /sH7AblbBKgPhcwqgRsjh8OIZRozpB+7sjed5CD1BnV7kvdUjfP7Z6cCn QiAIe9cCyf98TIWdz76LwSL05+d4vg/iSdOvAx8YyqZJAhGoextnD5jpt tP8/xB/HIX4MDOn+qpsoYGlIgcwPsae3ayy9JNasMu/6Ipn5kLUG+HU1m OPnHD2DDqx2FfU2y773ycFSFtGd4AYgxYPOj/LYGKQQuuK7Oyb9JLq6jU w==; X-IronPort-AV: E=McAfee;i="6600,9927,11023"; a="17125100" X-IronPort-AV: E=Sophos;i="6.07,153,1708416000"; d="scan'208";a="17125100" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 08:36:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,153,1708416000"; d="scan'208";a="15523966" Received: from idirlea-mobl.ger.corp.intel.com (HELO localhost) ([10.252.55.171]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 08:36:53 -0700 From: Jani Nikula To: Andrew Morton , Greg KH , linux-kernel@vger.kernel.org Cc: jani.nikula@intel.com Subject: [RFC 3/4] kernel/panic: initialize taint_flags[] using a macro Date: Mon, 25 Mar 2024 17:36:34 +0200 Message-Id: X-Mailer: git-send-email 2.39.2 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make it easier to extend struct taint_flags in follow-up. Cc: Andrew Morton Cc: Greg KH Signed-off-by: Jani Nikula --- kernel/panic.c | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/kernel/panic.c b/kernel/panic.c index d2d5f0a4b514..e1f87ba51ba1 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -473,32 +473,40 @@ void panic(const char *fmt, ...) =20 EXPORT_SYMBOL(panic); =20 +#define TAINT_FLAG(taint, _c_true, _c_false, _module) \ + [ TAINT_##taint ] =3D { \ + .c_true =3D _c_true, .c_false =3D _c_false, \ + .module =3D _module, \ + } + /* * TAINT_FORCED_RMMOD could be a per-module flag but the module * is being removed anyway. */ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] =3D { - [ TAINT_PROPRIETARY_MODULE ] =3D { 'P', 'G', true }, - [ TAINT_FORCED_MODULE ] =3D { 'F', ' ', true }, - [ TAINT_CPU_OUT_OF_SPEC ] =3D { 'S', ' ', false }, - [ TAINT_FORCED_RMMOD ] =3D { 'R', ' ', false }, - [ TAINT_MACHINE_CHECK ] =3D { 'M', ' ', false }, - [ TAINT_BAD_PAGE ] =3D { 'B', ' ', false }, - [ TAINT_USER ] =3D { 'U', ' ', false }, - [ TAINT_DIE ] =3D { 'D', ' ', false }, - [ TAINT_OVERRIDDEN_ACPI_TABLE ] =3D { 'A', ' ', false }, - [ TAINT_WARN ] =3D { 'W', ' ', false }, - [ TAINT_CRAP ] =3D { 'C', ' ', true }, - [ TAINT_FIRMWARE_WORKAROUND ] =3D { 'I', ' ', false }, - [ TAINT_OOT_MODULE ] =3D { 'O', ' ', true }, - [ TAINT_UNSIGNED_MODULE ] =3D { 'E', ' ', true }, - [ TAINT_SOFTLOCKUP ] =3D { 'L', ' ', false }, - [ TAINT_LIVEPATCH ] =3D { 'K', ' ', true }, - [ TAINT_AUX ] =3D { 'X', ' ', true }, - [ TAINT_RANDSTRUCT ] =3D { 'T', ' ', true }, - [ TAINT_TEST ] =3D { 'N', ' ', true }, + TAINT_FLAG(PROPRIETARY_MODULE, 'P', 'G', true), + TAINT_FLAG(FORCED_MODULE, 'F', ' ', true), + TAINT_FLAG(CPU_OUT_OF_SPEC, 'S', ' ', false), + TAINT_FLAG(FORCED_RMMOD, 'R', ' ', false), + TAINT_FLAG(MACHINE_CHECK, 'M', ' ', false), + TAINT_FLAG(BAD_PAGE, 'B', ' ', false), + TAINT_FLAG(USER, 'U', ' ', false), + TAINT_FLAG(DIE, 'D', ' ', false), + TAINT_FLAG(OVERRIDDEN_ACPI_TABLE, 'A', ' ', false), + TAINT_FLAG(WARN, 'W', ' ', false), + TAINT_FLAG(CRAP, 'C', ' ', true), + TAINT_FLAG(FIRMWARE_WORKAROUND, 'I', ' ', false), + TAINT_FLAG(OOT_MODULE, 'O', ' ', true), + TAINT_FLAG(UNSIGNED_MODULE, 'E', ' ', true), + TAINT_FLAG(SOFTLOCKUP, 'L', ' ', false), + TAINT_FLAG(LIVEPATCH, 'K', ' ', true), + TAINT_FLAG(AUX, 'X', ' ', true), + TAINT_FLAG(RANDSTRUCT, 'T', ' ', true), + TAINT_FLAG(TEST, 'N', ' ', true), }; =20 +#undef TAINT_FLAG + static void print_tainted_seq(struct seq_buf *s) { int i; --=20 2.39.2 From nobody Sat Feb 7 11:31:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8327F1304AD for ; Mon, 25 Mar 2024 15:37:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381023; cv=none; b=hikvVHxyIuZGonjCot+zwXc/uCxrDJd6PICYIs9viHN+in7/QgXOgE/25iS+hik3QjKVPE+JESiqVnr0vjjlQhG0qz4qIwoCf+RbZt62TKDimg+Cmb78Y54NDHxGAlV9ABYDrzd1qwW9dghfGvI8s34g6fk3p/ZYmKi6ofeCWHI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381023; c=relaxed/simple; bh=wb4kr08JDH+NnZLnT1A79izRE8BGA+Rpd9wAnH4wDR8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZGN9KUxf80VkhZlu8Jc9AyiZjr0XIyKAq3krlLVNIzF7yMwMo5D+eG+z1FjmURdK/37LIyVfYaVDUVd3h6a3eBSWfuZr6GthnNs5EMBNJLWj++KdVYhk/6GvXTzOxt2lq4VLRTIKXV5G1/MjD69Wm872C1Q+gZ0Wpek3RazWa68= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=eCpXN8qz; arc=none smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="eCpXN8qz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1711381021; x=1742917021; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wb4kr08JDH+NnZLnT1A79izRE8BGA+Rpd9wAnH4wDR8=; b=eCpXN8qzYwjjjQdWacQxyybs6iu3GBIE3pUnuThRqotjYRyiwMb5QEvY e11B5Da38PQ5m95E11bLmIYTxslyorBGgs8Dz1iYsES4J0uDweBG9eYpm M6N7VZ/4hCce+eFMwnFmUmy+W3FIJY75Ts2pFGpEUI1EqHrqqtTNoxJFB Xze0bJpwDxTvX/hN7v1zoiQAanj3SA7vlhWIh7OQy2o/GwWsE9n6zUL1M dL/QZrzTJucAYutVWZ28NlElll6SJE0emdj5ZNJybJO/C3946Xnkwn4Sl 3uU4CKSGG3y7AUPr8x2iLayRtc1SNQA5lGc0G9+zx9S/ncctARqH2Rqkz g==; X-IronPort-AV: E=McAfee;i="6600,9927,11023"; a="6221664" X-IronPort-AV: E=Sophos;i="6.07,153,1708416000"; d="scan'208";a="6221664" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 08:37:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,153,1708416000"; d="scan'208";a="38758551" Received: from idirlea-mobl.ger.corp.intel.com (HELO localhost) ([10.252.55.171]) by fmviesa002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2024 08:36:59 -0700 From: Jani Nikula To: Andrew Morton , Greg KH , linux-kernel@vger.kernel.org Cc: jani.nikula@intel.com Subject: [RFC 4/4] kernel/panic: add verbose logging of kernel taints in backtraces Date: Mon, 25 Mar 2024 17:36:35 +0200 Message-Id: X-Mailer: git-send-email 2.39.2 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" With nearly 20 taint flags and respective characters, it's getting a bit difficult to remember what each taint flag character means. Add verbose logging of the set taints in the format: Tainted: [P]=3DPROPRIETARY_MODULE, [W]=3DWARN in dump_stack_print_info() when there are taints. Note that the "negative flag" G is not included. Cc: Andrew Morton Cc: Greg KH Signed-off-by: Jani Nikula --- include/linux/panic.h | 8 +++++--- kernel/panic.c | 45 ++++++++++++++++++++++++++++++++----------- lib/dump_stack.c | 3 +++ 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/include/linux/panic.h b/include/linux/panic.h index 6717b15e798c..3130e0b5116b 100644 --- a/include/linux/panic.h +++ b/include/linux/panic.h @@ -77,9 +77,10 @@ static inline void set_arch_panic_timeout(int timeout, i= nt arch_default_timeout) #define TAINT_FLAGS_MAX ((1UL << TAINT_FLAGS_COUNT) - 1) =20 struct taint_flag { - char c_true; /* character printed when tainted */ - char c_false; /* character printed when not tainted */ - bool module; /* also show as a per-module taint flag */ + char c_true; /* character printed when tainted */ + char c_false; /* character printed when not tainted */ + bool module; /* also show as a per-module taint flag */ + const char *desc; /* verbose description of the set taint flag */ }; =20 extern const struct taint_flag taint_flags[TAINT_FLAGS_COUNT]; @@ -90,6 +91,7 @@ enum lockdep_ok { }; =20 extern const char *print_tainted(void); +extern const char *print_tainted_verbose(void); extern void add_taint(unsigned flag, enum lockdep_ok); extern int test_taint(unsigned flag); extern unsigned long get_taint(void); diff --git a/kernel/panic.c b/kernel/panic.c index e1f87ba51ba1..ed270d3b5f2b 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -477,6 +477,7 @@ EXPORT_SYMBOL(panic); [ TAINT_##taint ] =3D { \ .c_true =3D _c_true, .c_false =3D _c_false, \ .module =3D _module, \ + .desc =3D #taint, \ } =20 /* @@ -507,8 +508,9 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = =3D { =20 #undef TAINT_FLAG =20 -static void print_tainted_seq(struct seq_buf *s) +static void print_tainted_seq(struct seq_buf *s, bool verbose) { + const char *sep =3D ""; int i; =20 if (!tainted_mask) { @@ -522,10 +524,32 @@ static void print_tainted_seq(struct seq_buf *s) bool is_set =3D test_bit(i, &tainted_mask); char c =3D is_set ? t->c_true : t->c_false; =20 - seq_buf_putc(s, c); + if (verbose) { + if (is_set) { + seq_buf_printf(s, "%s[%c]=3D%s", sep, c, t->desc); + sep =3D ", "; + } + } else { + seq_buf_putc(s, c); + } } } =20 +static const char *_print_tainted(bool verbose) +{ + /* FIXME: what should the size be? */ + static char buf[sizeof(taint_flags)]; + struct seq_buf s; + + BUILD_BUG_ON(ARRAY_SIZE(taint_flags) !=3D TAINT_FLAGS_COUNT); + + seq_buf_init(&s, buf, sizeof(buf)); + + print_tainted_seq(&s, verbose); + + return seq_buf_str(&s); +} + /** * print_tainted - return a string to represent the kernel taint state. * @@ -536,16 +560,15 @@ static void print_tainted_seq(struct seq_buf *s) */ const char *print_tainted(void) { - static char buf[TAINT_FLAGS_COUNT + sizeof("Tainted: ")]; - struct seq_buf s; - - BUILD_BUG_ON(ARRAY_SIZE(taint_flags) !=3D TAINT_FLAGS_COUNT); - - seq_buf_init(&s, buf, sizeof(buf)); - - print_tainted_seq(&s); + return _print_tainted(false); +} =20 - return seq_buf_str(&s); +/** + * print_tainted_verbose - A more verbose version of print_tainted() + */ +const char *print_tainted_verbose(void) +{ + return _print_tainted(true); } =20 int test_taint(unsigned flag) diff --git a/lib/dump_stack.c b/lib/dump_stack.c index 222c6d6c8281..8b6b70eaf949 100644 --- a/lib/dump_stack.c +++ b/lib/dump_stack.c @@ -62,6 +62,9 @@ void dump_stack_print_info(const char *log_lvl) (int)strcspn(init_utsname()->version, " "), init_utsname()->version, BUILD_ID_VAL); =20 + if (get_taint()) + printk("%s%s\n", log_lvl, print_tainted_verbose()); + if (dump_stack_arch_desc_str[0] !=3D '\0') printk("%sHardware name: %s\n", log_lvl, dump_stack_arch_desc_str); --=20 2.39.2