lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <658cb684-5250-6acb-f3d5-308456d81938@oracle.com>
Date:   Tue, 1 Mar 2022 14:06:45 -0600
From:   Eric DeVolder <eric.devolder@...cle.com>
To:     Baoquan He <bhe@...hat.com>
Cc:     linux-kernel@...r.kernel.org, x86@...nel.org,
        kexec@...ts.infradead.org, ebiederm@...ssion.com,
        dyoung@...hat.com, vgoyal@...hat.com, tglx@...utronix.de,
        mingo@...hat.com, bp@...en8.de, dave.hansen@...ux.intel.com,
        hpa@...or.com, nramas@...ux.microsoft.com, thomas.lendacky@....com,
        robh@...nel.org, efault@....de, rppt@...nel.org,
        konrad.wilk@...cle.com, boris.ostrovsky@...cle.com
Subject: Re: [PATCH v4 05/10] crash hp: introduce helper functions
 un/map_crash_pages



On 2/22/22 21:58, Baoquan He wrote:
> On 02/09/22 at 02:57pm, Eric DeVolder wrote:
>> This change introduces two new functions un/map_crash_pages()
>> which are used to enable/disable access to the segments in the
>> crash memory region. (Upon loading of a crash kernel, the
>> crash memory regions are made inaccessible for integrity purposes.)
>>
>> For example, on x86_64, one of the segments is the elfcorehdr,
>> which contains the list of CPUs and memories. This segment
>> needs to be modified in response to hotplug events. These functions
>> are used to obtain (and subsequenntly release) access to the crash
>> memory region in order to make the modifications.
>>
>> QUESTION: These might need to be in arch/x86 as I'm not certain
>> the implementatin is valid for all archs?
> 
> Since only x86_64 uses them, I would suggest putting them into x86_64,
> near the caller.

I've moved these to arch/x86/kernel/crash.c within the #ifdef CONFIG_CRASH_HOTPLUG.
eric

> 
>>
>> Signed-off-by: Eric DeVolder <eric.devolder@...cle.com>
>> ---
>>   include/linux/kexec.h |  2 ++
>>   kernel/crash_core.c   | 32 ++++++++++++++++++++++++++++++++
>>   2 files changed, 34 insertions(+)
>>
>> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
>> index b11d75a6b2bc..e00c373c4095 100644
>> --- a/include/linux/kexec.h
>> +++ b/include/linux/kexec.h
>> @@ -324,6 +324,8 @@ struct kimage {
>>   };
>>   
>>   #ifdef CONFIG_CRASH_HOTPLUG
>> +void *map_crash_pages(unsigned long paddr, unsigned long size);
>> +void unmap_crash_pages(void **ptr);
>>   void arch_crash_hotplug_handler(struct kimage *image,
>>   	unsigned int hp_action, unsigned long a, unsigned long b);
>>   #define KEXEC_CRASH_HP_REMOVE_CPU   0
>> diff --git a/kernel/crash_core.c b/kernel/crash_core.c
>> index 256cf6db573c..0ff06d0698ad 100644
>> --- a/kernel/crash_core.c
>> +++ b/kernel/crash_core.c
>> @@ -9,6 +9,7 @@
>>   #include <linux/init.h>
>>   #include <linux/utsname.h>
>>   #include <linux/vmalloc.h>
>> +#include <linux/highmem.h>
>>   
>>   #include <asm/page.h>
>>   #include <asm/sections.h>
>> @@ -491,3 +492,34 @@ static int __init crash_save_vmcoreinfo_init(void)
>>   }
>>   
>>   subsys_initcall(crash_save_vmcoreinfo_init);
>> +
>> +#ifdef CONFIG_CRASH_HOTPLUG
>> +void *map_crash_pages(unsigned long paddr, unsigned long size)
>> +{
>> +	/*
>> +	 * NOTE: The addresses and sizes passed to this routine have
>> +	 * already been fully aligned on page boundaries. There is no
>> +	 * need for massaging the address or size.
>> +	 */
>> +	void *ptr = NULL;
>> +
>> +	/* NOTE: requires arch_kexec_[un]protect_crashkres() for write access */
>> +	if (size > 0) {
>> +		struct page *page = pfn_to_page(paddr >> PAGE_SHIFT);
>> +
>> +		ptr = kmap(page);
>> +	}
>> +
>> +	return ptr;
>> +}
>> +
>> +void unmap_crash_pages(void **ptr)
>> +{
>> +	if (ptr) {
>> +		if (*ptr)
>> +			kunmap(*ptr);
>> +		*ptr = NULL;
>> +	}
>> +}
>> +#endif
>> +
>> -- 
>> 2.27.0
>>
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ