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: <d6272d53-69a7-9238-d717-17574c859ce7@c-s.fr>
Date:   Fri, 30 Aug 2019 09:15:36 +0200
From:   Christophe Leroy <christophe.leroy@....fr>
To:     Michal Suchánek <msuchanek@...e.de>
Cc:     David Hildenbrand <david@...hat.com>,
        Heiko Carstens <heiko.carstens@...ibm.com>,
        David Howells <dhowells@...hat.com>,
        Paul Mackerras <paulus@...ba.org>,
        Breno Leitao <leitao@...ian.org>,
        Michael Neuling <mikey@...ling.org>,
        Nicolai Stange <nstange@...e.de>,
        Geert Uytterhoeven <geert@...ux-m68k.org>,
        Allison Randal <allison@...utok.net>,
        Firoz Khan <firoz.khan@...aro.org>,
        Joel Stanley <joel@....id.au>, Arnd Bergmann <arnd@...db.de>,
        Nicholas Piggin <npiggin@...il.com>,
        Thomas Gleixner <tglx@...utronix.de>,
        Christian Brauner <christian@...uner.io>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        linux-kernel@...r.kernel.org,
        "Eric W. Biederman" <ebiederm@...ssion.com>,
        Andrew Donnellan <andrew.donnellan@....ibm.com>,
        Hari Bathini <hbathini@...ux.ibm.com>,
        linuxppc-dev@...ts.ozlabs.org
Subject: Re: [PATCH v5 5/5] powerpc/perf: split callchain.c by bitness



Le 30/08/2019 à 09:12, Michal Suchánek a écrit :
> On Fri, 30 Aug 2019 08:42:25 +0200
> Michal Suchánek <msuchanek@...e.de> wrote:
> 
>> On Fri, 30 Aug 2019 06:35:11 +0000 (UTC)
>> Christophe Leroy <christophe.leroy@....fr> wrote:
>>
>>> On 08/29/2019 10:28 PM, Michal Suchanek wrote:
> 
>>>   obj-$(CONFIG_PPC_PERF_CTRS)	+= core-book3s.o bhrb.o
>>> diff --git a/arch/powerpc/perf/callchain_32.c b/arch/powerpc/perf/callchain_32.c
>>> index 0bd4484eddaa..17c43ae03084 100644
>>> --- a/arch/powerpc/perf/callchain_32.c
>>> +++ b/arch/powerpc/perf/callchain_32.c
>>> @@ -15,50 +15,13 @@
>>>   #include <asm/sigcontext.h>
>>>   #include <asm/ucontext.h>
>>>   #include <asm/vdso.h>
>>> -#ifdef CONFIG_PPC64
>>> -#include "../kernel/ppc32.h"
>>> -#endif
>>>   #include <asm/pte-walk.h>
>>>   
>>>   #include "callchain.h"
>>>   
>>>   #ifdef CONFIG_PPC64
>>> -static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
>>> -{
>>> -	if ((unsigned long)ptr > TASK_SIZE - sizeof(unsigned int) ||
>>> -	    ((unsigned long)ptr & 3))
>>> -		return -EFAULT;
>>> -
>>> -	pagefault_disable();
>>> -	if (!__get_user_inatomic(*ret, ptr)) {
>>> -		pagefault_enable();
>>> -		return 0;
>>> -	}
>>> -	pagefault_enable();
>>> -
>>> -	return read_user_stack_slow(ptr, ret, 4);
>>> -}
>>> -#else /* CONFIG_PPC64 */
>>> -/*
>>> - * On 32-bit we just access the address and let hash_page create a
>>> - * HPTE if necessary, so there is no need to fall back to reading
>>> - * the page tables.  Since this is called at interrupt level,
>>> - * do_page_fault() won't treat a DSI as a page fault.
>>> - */
>>> -static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
>>> -{
>>> -	int rc;
>>> -
>>> -	if ((unsigned long)ptr > TASK_SIZE - sizeof(unsigned int) ||
>>> -	    ((unsigned long)ptr & 3))
>>> -		return -EFAULT;
>>> -
>>> -	pagefault_disable();
>>> -	rc = __get_user_inatomic(*ret, ptr);
>>> -	pagefault_enable();
>>> -
>>> -	return rc;
>>> -}
>>> +#include "../kernel/ppc32.h"
>>> +#else
>>>   
>>>   #define __SIGNAL_FRAMESIZE32	__SIGNAL_FRAMESIZE
>>>   #define sigcontext32		sigcontext
>>> @@ -95,6 +58,30 @@ struct rt_signal_frame_32 {
>>>   	int			abigap[56];
>>>   };
>>>   
>>> +/*
>>> + * On 32-bit we just access the address and let hash_page create a
>>> + * HPTE if necessary, so there is no need to fall back to reading
>>> + * the page tables.  Since this is called at interrupt level,
>>> + * do_page_fault() won't treat a DSI as a page fault.
>>> + */
>>> +static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
>>> +{
>>> +	int rc;
>>> +
>>> +	if ((unsigned long)ptr > TASK_SIZE - sizeof(unsigned int) ||
>>> +	    ((unsigned long)ptr & 3))
>>> +		return -EFAULT;
>>> +
>>> +	pagefault_disable();
>>> +	rc = __get_user_inatomic(*ret, ptr);
>>> +	pagefault_enable();
>>> +
>>> +	if (IS_ENABLED(CONFIG_PPC32) || !rc)
>>> +		return rc;
>>> +
>>> +	return read_user_stack_slow(ptr, ret, 4);
>>> +}
>>> +
>>>   static int is_sigreturn_32_address(unsigned int nip, unsigned int fp)
>>>   {
>>>   	if (nip == fp + offsetof(struct signal_frame_32, mctx.mc_pad))
>>
>> I will leave consolidating this function to somebody who knows what the
>> desired semantic is. With a short ifdef section at the top of the file
>> it is a low-hanging fruit.
> 
> It looks ok if done as a separate patch.

Yes, doing it as a separate patch is good.

And if you do it before patch 3, then you don't need anymore this ugly 
hack to hide read_user_stack_32()

Christphe

> 
> Thanks
> 
> Michal
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ