Patchwork [3.5.yuz,extended,stable] Patch "amd64_edac:__amd64_set_scrub_rate(): avoid overindexing" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Nov. 22, 2012, 4:48 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/200975/
State New
Headers show


Herton Ronaldo Krzesinski - Nov. 22, 2012, 4:48 a.m.
This is a note to let you know that I have just added a patch titled

    amd64_edac:__amd64_set_scrub_rate(): avoid overindexing

to the linux-3.5.y-queue branch of the 3.5.yuz extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.yuz tree, see



From c41e0bb334eb41b90440f0b2fa88622a331303d7 Mon Sep 17 00:00:00 2001
From: Andrew Morton <>
Date: Tue, 23 Oct 2012 14:09:39 -0700
Subject: [PATCH] amd64_edac:__amd64_set_scrub_rate(): avoid overindexing

commit 168bfeef7bba3f9784f7540b053e4ac72b769ce9 upstream.

If none of the elements in scrubrates[] matches, this loop will cause
__amd64_set_scrub_rate() to incorrectly use the n+1th element.

As the function is designed to use the final scrubrates[] element in the
case of no match, we can fix this bug by simply terminating the array
search at the n-1th element.

Boris: this code is fragile anyway, see here why:

It will be rewritten more robustly soonish.

Reported-by: Denis Kirjanov <>
Cc: Doug Thompson <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Borislav Petkov <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 drivers/edac/amd64_edac.c |   11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)



diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
index 7be9b72..a814ea8 100644
--- a/drivers/edac/amd64_edac.c
+++ b/drivers/edac/amd64_edac.c
@@ -170,8 +170,11 @@  static int __amd64_set_scrub_rate(struct pci_dev *ctl, u32 new_bw, u32 min_rate)
 	 * memory controller and apply to register. Search for the first
 	 * bandwidth entry that is greater or equal than the setting requested
 	 * and program that. If at last entry, turn off DRAM scrubbing.
+	 *
+	 * If no suitable bandwidth is found, turn off DRAM scrubbing entirely
+	 * by falling back to the last element in scrubrates[].
-	for (i = 0; i < ARRAY_SIZE(scrubrates); i++) {
+	for (i = 0; i < ARRAY_SIZE(scrubrates) - 1; i++) {
 		 * skip scrub rates which aren't recommended
 		 * (see F10 BKDG, F3x58)
@@ -181,12 +184,6 @@  static int __amd64_set_scrub_rate(struct pci_dev *ctl, u32 new_bw, u32 min_rate)

 		if (scrubrates[i].bandwidth <= new_bw)
-		/*
-		 * if no suitable bandwidth found, turn off DRAM scrubbing
-		 * entirely by falling back to the last element in the
-		 * scrubrates array.
-		 */

 	scrubval = scrubrates[i].scrubval;