]> xenbits.xensource.com Git - people/andrewcoop/xen.git/commitdiff
altcall: fix __alt_call_maybe_initdata so it's safe for livepatch
authorRoger Pau Monné <roger.pau@citrix.com>
Tue, 21 May 2024 09:55:09 +0000 (11:55 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 21 May 2024 09:55:09 +0000 (11:55 +0200)
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é <roger.pau@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: af4cd0a6a61cdb03bc1afca9478b05b0c9703599
master date: 2024-04-11 18:51:36 +0100

xen/include/xen/alternative-call.h

index 5c6b9a562b92199b8c6f297dc8ae283f6b30a42e..10f7d7637e1e302f42b285deaa194d949b30bd4e 100644 (file)
 
 #include <asm/alternative.h>
 
-#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