Linux-EDAC Archive on lore.kernel.org
 help / color / Atom feed
From: Robert Richter <rrichter@marvell.com>
To: Borislav Petkov <bp@alien8.de>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Tony Luck <tony.luck@intel.com>
Cc: James Morse <james.morse@arm.com>,
	Robert Richter <rrichter@marvell.com>,
	"linux-edac@vger.kernel.org" <linux-edac@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [PATCH v2 06/10] EDAC/mc: Report "unknown memory" on too many DIMM labels found
Date: Thu, 5 Dec 2019 09:38:08 +0000
Message-ID: <20191205093739.4040-7-rrichter@marvell.com> (raw)
In-Reply-To: <20191205093739.4040-1-rrichter@marvell.com>

There is a limitation to report only EDAC_MAX_LABELS in e->label of
the error descriptor. This is to prevent a possible string overflow.
Current implementation falls back to "any memory" in this case and
also stops all further processing to find a unique row and channel of
the possible error location. Reporting "any memory" is wrong as the
memory controller reported an error location for one of the layers.
Instead, report "unknown memory" and also do not break early in the
loop to further check row and channel for uniqueness.

Signed-off-by: Robert Richter <rrichter@marvell.com>
---
 drivers/edac/edac_mc.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index e81d33960a0c..2b12320ce2f1 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -1243,20 +1243,21 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
 		 * channel/memory controller/...  may be affected.
 		 * Also, don't show errors for empty DIMM slots.
 		 */
-		if (!e->enable_per_layer_report || !dimm->nr_pages)
+		if (!dimm->nr_pages)
 			continue;
 
-		if (n_labels >= EDAC_MAX_LABELS) {
-			e->enable_per_layer_report = false;
-			break;
-		}
 		n_labels++;
-		if (p != e->label) {
-			strcpy(p, OTHER_LABEL);
-			p += strlen(OTHER_LABEL);
+		if (n_labels > EDAC_MAX_LABELS) {
+			p = e->label;
+			*p = '\0';
+		} else {
+			if (p != e->label) {
+				strcpy(p, OTHER_LABEL);
+				p += strlen(OTHER_LABEL);
+			}
+			strcpy(p, dimm->label);
+			p += strlen(p);
 		}
-		strcpy(p, dimm->label);
-		p += strlen(p);
 
 		/*
 		 * get csrow/channel of the DIMM, in order to allow
-- 
2.20.1


  parent reply index

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-05  9:37 [PATCH v2 00/10] EDAC: Rework core and ghes drivers, part two Robert Richter
2019-12-05  9:37 ` [PATCH v2 01/10] EDAC/mc: Split edac_mc_alloc() into smaller functions Robert Richter
2019-12-05  9:37 ` [PATCH v2 02/10] EDAC/mc: Reorder functions edac_mc_alloc*() Robert Richter
2019-12-05  9:38 ` [PATCH v2 03/10] EDAC: Store error type in struct edac_raw_error_desc Robert Richter
2019-12-05  9:38 ` [PATCH v2 04/10] EDAC/mc: Determine mci pointer from the error descriptor Robert Richter
2019-12-05  9:38 ` [PATCH v2 05/10] EDAC/mc: Create new function edac_inc_csrow() Robert Richter
2019-12-05  9:38 ` Robert Richter [this message]
2019-12-05  9:38 ` [PATCH v2 07/10] EDAC/mc: Remove enable_per_layer_report function arguments Robert Richter
2019-12-05  9:38 ` [PATCH v2 08/10] EDAC/mc: Pass the error descriptor to error reporting functions Robert Richter
2019-12-05  9:38 ` [PATCH v2 09/10] EDAC/mc: Remove detail[] string and cleanup error string generation Robert Richter
2019-12-05  9:38 ` [PATCH v2 10/10] EDAC/mc: Remove per layer counters Robert Richter
2019-12-17 15:16 ` [PATCH v2 00/10] EDAC: Rework core and ghes drivers, part two Robert Richter
2020-01-22 17:02 ` Aristeu Rozanski

Reply instructions:

You may reply publically 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=20191205093739.4040-7-rrichter@marvell.com \
    --to=rrichter@marvell.com \
    --cc=bp@alien8.de \
    --cc=james.morse@arm.com \
    --cc=linux-edac@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=tony.luck@intel.com \
    /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

Linux-EDAC Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-edac/0 linux-edac/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-edac linux-edac/ https://lore.kernel.org/linux-edac \
		linux-edac@vger.kernel.org
	public-inbox-index linux-edac

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-edac


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git