powerpc/rtas: use memmove for potentially overlapping buffer copy
[ Upstream commit 271208ee5e335cb1ad280d22784940daf7ddf820 ] 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 commit033ef338b6
("powerpc: Merge rtas.c into arch/powerpc/kernel"); the old ppc64 version of this code did not have this problem. Use memmove() instead. Fixes:033ef338b6
("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> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20230220-rtas-queue-for-6-4-v1-2-010e4416f13f@linux.ibm.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
333a2a9846
commit
ff3edfb3c8
@ -398,7 +398,7 @@ static char *__fetch_rtas_last_error(char *altbuf)
|
|||||||
buf = kmalloc(RTAS_ERROR_LOG_MAX, GFP_ATOMIC);
|
buf = kmalloc(RTAS_ERROR_LOG_MAX, GFP_ATOMIC);
|
||||||
}
|
}
|
||||||
if (buf)
|
if (buf)
|
||||||
memcpy(buf, rtas_err_buf, RTAS_ERROR_LOG_MAX);
|
memmove(buf, rtas_err_buf, RTAS_ERROR_LOG_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
|
Loading…
Reference in New Issue
Block a user