On 07.02.24 11:39, Jan Beulich wrote:
On 07.02.2024 11:31, Juergen Gross wrote:--- a/arch/x86/setup.c +++ b/arch/x86/setup.c @@ -184,6 +184,8 @@ arch_init(void *par) { static char hello[] = "Bootstrapping...\n";+ memset(&__bss_start, 0, &_end - &__bss_start);Doesn't / shouldn't the loader guarantee this? I ask in particular because doing this here implies earlier assembly code may not write to any variable in .bss (nothing like that looks to exist right now, but who knows what may be added at some point).
Oh, am I misremembering that the hypervisor doesn't do the clearing? I do remember a bug when dom0 Linux crashed due to a not zeroed .bss, so I added the zeroing in the paravirt startup code of the kernel. But maybe this was due to a bug in the linker script of the kernel.
--- a/include/mm.h +++ b/include/mm.h @@ -46,6 +46,8 @@ #define round_pgdown(_p) ((_p) & PAGE_MASK) #define round_pgup(_p) (((_p) + (PAGE_SIZE - 1)) & PAGE_MASK)+extern char _text, _etext, _erodata, _edata, _end, __bss_start;Maybe use the more conventional array form? Thus also eliminating the need for & at the use sites?
This was basically just a movement of code to another file. But I can make this change, of course. Juergen
OpenPGP_0xB0DE9DD628BF132F.asc
Description: OpenPGP public key
OpenPGP_signature.asc
Description: OpenPGP digital signature