summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliav Farber <farbere@amazon.com>2022-01-13 10:06:19 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-02-23 11:57:35 +0100
commit4feddbe547306fd9054f1f4074446e5afe410d9d (patch)
treed2ba901d575117e4a906d2f489e3a9278682810e
parent2e4841a2e31c942a07950c9e11db0f1a43736ed6 (diff)
EDAC: Fix calculation of returned address and next offset in edac_align_ptr()
commit f8efca92ae509c25e0a4bd5d0a86decea4f0c41e upstream. Do alignment logic properly and use the "ptr" local variable for calculating the remainder of the alignment. This became an issue because struct edac_mc_layer has a size that is not zero modulo eight, and the next offset that was prepared for the private data was unaligned, causing an alignment exception. The patch in Fixes: which broke this actually wanted to "what we actually care about is the alignment of the actual pointer that's about to be returned." But it didn't check that alignment. Use the correct variable "ptr" for that. [ bp: Massage commit message. ] Fixes: 8447c4d15e35 ("edac: Do alignment logic properly in edac_align_ptr()") Signed-off-by: Eliav Farber <farbere@amazon.com> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: <stable@vger.kernel.org> Link: https://lore.kernel.org/r/20220113100622.12783-2-farbere@amazon.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/edac/edac_mc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index 329021189c38..60b7b9b7fde9 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -264,7 +264,7 @@ void *edac_align_ptr(void **p, unsigned size, int n_elems)
else
return (char *)ptr;
- r = (unsigned long)p % align;
+ r = (unsigned long)ptr % align;
if (r == 0)
return (char *)ptr;