Message ID | 20230220-rtas-queue-for-6-4-v1-2-010e4416f13f@linux.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 271208ee5e335cb1ad280d22784940daf7ddf820 |
Headers | show |
Series | RTAS changes for 6.4 | expand |
On Mon, 2023-03-06 at 15:33 -0600, Nathan Lynch via B4 Relay wrote: > From: Nathan Lynch <nathanl@linux.ibm.com> > > Using memcpy() isn't safe when buf is identical to rtas_err_buf, > which > can happen during boot before slab is up. Full context which may not > be obvious from the diff: > > if (altbuf) { > buf = altbuf; > } else { > buf = rtas_err_buf; > if (slab_is_available()) > buf = kmalloc(RTAS_ERROR_LOG_MAX, > GFP_ATOMIC); > } > if (buf) > memcpy(buf, rtas_err_buf, RTAS_ERROR_LOG_MAX); > > This was found by inspection and I'm not aware of it causing problems > in practice. It appears to have been introduced by commit > 033ef338b6e0 ("powerpc: Merge rtas.c into arch/powerpc/kernel"); the > old ppc64 version of this code did not have this problem. > > Use memmove() instead. > > Fixes: 033ef338b6e0 ("powerpc: Merge rtas.c into > arch/powerpc/kernel") > Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com> Reviewed-by: Andrew Donnellan <ajd@linux.ibm.com>
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 31175b34856a..9256cfaa8b6f 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -981,7 +981,7 @@ static char *__fetch_rtas_last_error(char *altbuf) buf = kmalloc(RTAS_ERROR_LOG_MAX, GFP_ATOMIC); } if (buf) - memcpy(buf, rtas_err_buf, RTAS_ERROR_LOG_MAX); + memmove(buf, rtas_err_buf, RTAS_ERROR_LOG_MAX); } return buf;