Re: [PATCH 1/1] EDAC, sb_edac: Fix out of bound write during DIMM configuration on KNL

From: Borislav Petkov
Date: Fri Feb 23 2018 - 06:09:46 EST


On Thu, Feb 22, 2018 at 04:18:13PM +0100, Anna Karbownik wrote:
> From: akarbown <anna.karbownik@xxxxxxxxx>
>
> In one of the previous patches we decreased NUM_CHANNELS from 8 to 4, but

We say which patch it was.

Anyway, corrected and applied the below, thanks.

---
From: Anna Karbownik <anna.karbownik@xxxxxxxxx>
Date: Thu, 22 Feb 2018 16:18:13 +0100
Subject: [PATCH] EDAC, sb_edac: Fix out of bound writes during DIMM
configuration on KNL

Commit

3286d3eb906c ("EDAC, sb_edac: Drop NUM_CHANNELS from 8 back to 4")

decreased NUM_CHANNELS from 8 to 4, but this is not enough for Knights
Landing which supports up to 6 channels.

This caused out-of-bounds writes to pvt->mirror_mode and pvt->tolm
variables which don't pay critical role on KNL code path, so the memory
corruption wasn't causing any visible driver failures.

The easiest way of fixing it is to change NUM_CHANNELS to 6. Do that.

An alternative solution would be to restructure the KNL part of the
driver to 2MC/3channel representation.

Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
Signed-off-by: Anna Karbownik <anna.karbownik@xxxxxxxxx>
Cc: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
Cc: Tony Luck <tony.luck@xxxxxxxxx>
Cc: jim.m.snow@xxxxxxxxx
Cc: krzysztof.paliswiat@xxxxxxxxx
Cc: lukasz.odzioba@xxxxxxxxx
Cc: qiuxu.zhuo@xxxxxxxxx
Cc: linux-edac <linux-edac@xxxxxxxxxxxxxxx>
Cc: <stable@xxxxxxxxxxxxxxx>
Fixes: 3286d3eb906c ("EDAC, sb_edac: Drop NUM_CHANNELS from 8 back to 4")
Link: http://lkml.kernel.org/r/1519312693-4789-1-git-send-email-anna.karbownik@xxxxxxxxx
[ Massage commit message. ]
Signed-off-by: Borislav Petkov <bp@xxxxxxx>
---
drivers/edac/sb_edac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
index f34430f99fd8..872100215ca0 100644
--- a/drivers/edac/sb_edac.c
+++ b/drivers/edac/sb_edac.c
@@ -279,7 +279,7 @@ static const u32 correrrthrsld[] = {
* sbridge structs
*/

-#define NUM_CHANNELS 4 /* Max channels per MC */
+#define NUM_CHANNELS 6 /* Max channels per MC */
#define MAX_DIMMS 3 /* Max DIMMS per channel */
#define KNL_MAX_CHAS 38 /* KNL max num. of Cache Home Agents */
#define KNL_MAX_CHANNELS 6 /* KNL max num. of PCI channels */
--
2.13.0

--
Regards/Gruss,
Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.