Skip to content

Commit 5494c3a

Browse files
keessuryasaimadhu
authored andcommitted
x86/mm: Report which part of kernel image is freed
The memory freeing report wasn't very useful for figuring out which parts of the kernel image were being freed. Add the details for clearer reporting in dmesg. Before: Freeing unused kernel image memory: 1348K Write protecting the kernel read-only data: 20480k Freeing unused kernel image memory: 2040K Freeing unused kernel image memory: 172K After: Freeing unused kernel image (initmem) memory: 1348K Write protecting the kernel read-only data: 20480k Freeing unused kernel image (text/rodata gap) memory: 2040K Freeing unused kernel image (rodata/data gap) memory: 172K Signed-off-by: Kees Cook <[email protected]> Signed-off-by: Borislav Petkov <[email protected]> Cc: Andy Lutomirski <[email protected]> Cc: Arnd Bergmann <[email protected]> Cc: Dave Hansen <[email protected]> Cc: Heiko Carstens <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: Michael Ellerman <[email protected]> Cc: Michal Simek <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Rick Edgecombe <[email protected]> Cc: Segher Boessenkool <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Will Deacon <[email protected]> Cc: x86-ml <[email protected]> Cc: Yoshinori Sato <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent 2d0004d commit 5494c3a

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

arch/x86/include/asm/processor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
958958

959959
extern unsigned long arch_align_stack(unsigned long sp);
960960
void free_init_pages(const char *what, unsigned long begin, unsigned long end);
961-
extern void free_kernel_image_pages(void *begin, void *end);
961+
extern void free_kernel_image_pages(const char *what, void *begin, void *end);
962962

963963
void default_idle(void);
964964
#ifdef CONFIG_XEN

arch/x86/mm/init.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -829,14 +829,13 @@ void free_init_pages(const char *what, unsigned long begin, unsigned long end)
829829
* used for the kernel image only. free_init_pages() will do the
830830
* right thing for either kind of address.
831831
*/
832-
void free_kernel_image_pages(void *begin, void *end)
832+
void free_kernel_image_pages(const char *what, void *begin, void *end)
833833
{
834834
unsigned long begin_ul = (unsigned long)begin;
835835
unsigned long end_ul = (unsigned long)end;
836836
unsigned long len_pages = (end_ul - begin_ul) >> PAGE_SHIFT;
837837

838-
839-
free_init_pages("unused kernel image", begin_ul, end_ul);
838+
free_init_pages(what, begin_ul, end_ul);
840839

841840
/*
842841
* PTI maps some of the kernel into userspace. For performance,
@@ -865,7 +864,8 @@ void __ref free_initmem(void)
865864

866865
mem_encrypt_free_decrypted_mem();
867866

868-
free_kernel_image_pages(&__init_begin, &__init_end);
867+
free_kernel_image_pages("unused kernel image (initmem)",
868+
&__init_begin, &__init_end);
869869
}
870870

871871
#ifdef CONFIG_BLK_DEV_INITRD

arch/x86/mm/init_64.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,8 +1334,10 @@ void mark_rodata_ro(void)
13341334
set_memory_ro(start, (end-start) >> PAGE_SHIFT);
13351335
#endif
13361336

1337-
free_kernel_image_pages((void *)text_end, (void *)rodata_start);
1338-
free_kernel_image_pages((void *)rodata_end, (void *)_sdata);
1337+
free_kernel_image_pages("unused kernel image (text/rodata gap)",
1338+
(void *)text_end, (void *)rodata_start);
1339+
free_kernel_image_pages("unused kernel image (rodata/data gap)",
1340+
(void *)rodata_end, (void *)_sdata);
13391341

13401342
debug_checkwx();
13411343
}

0 commit comments

Comments
 (0)