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

Attachment: OpenPGP_0xB0DE9DD628BF132F.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to