From 8d1c36d25a777bed97a8b5da0128fa7b9320f911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Date: Tue, 21 May 2024 11:55:09 +0200 Subject: [PATCH] altcall: fix __alt_call_maybe_initdata so it's safe for livepatch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Setting alternative call variables as __init is not safe for use with livepatch, as livepatches can rightfully introduce new alternative calls to structures marked as __alt_call_maybe_initdata (possibly just indirectly due to replacing existing functions that use those). Attempting to resolve those alternative calls then results in page faults as the variable that holds the function pointer address has been freed. When livepatch is supported use the __ro_after_init attribute instead of __initdata for __alt_call_maybe_initdata. Fixes: f26bb285949b ('xen: Implement xen/alternative-call.h for use in common code') Signed-off-by: Roger Pau Monné Reviewed-by: Andrew Cooper master commit: af4cd0a6a61cdb03bc1afca9478b05b0c9703599 master date: 2024-04-11 18:51:36 +0100 --- xen/include/xen/alternative-call.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/xen/include/xen/alternative-call.h b/xen/include/xen/alternative-call.h index 5c6b9a562b..10f7d7637e 100644 --- a/xen/include/xen/alternative-call.h +++ b/xen/include/xen/alternative-call.h @@ -50,7 +50,12 @@ #include -#define __alt_call_maybe_initdata __initdata +#ifdef CONFIG_LIVEPATCH +/* Must keep for livepatches to resolve alternative calls. */ +# define __alt_call_maybe_initdata __ro_after_init +#else +# define __alt_call_maybe_initdata __initdata +#endif #else