Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Linus Torvalds
On Wed, Feb 13, 2019 at 7:45 AM Peter Zijlstra wrote: > > Before that, x86_64 switch_to() read like (much simplified): > > asm volatile ( /* do RSP twiddle */ > : /* output */ > : /* input */ > : "memory", "cc", "flags"); > > (see __EXTRA_CLOBBER) > >

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Andy Lutomirski
> On Feb 13, 2019, at 2:21 PM, Peter Zijlstra wrote: > > On Wed, Feb 13, 2019 at 10:51:24AM -0800, Andy Lutomirski wrote: >>> On Feb 13, 2019, at 7:45 AM, Peter Zijlstra wrote: > >>> Which I suppose means that GCC generates the PUSHF/POPF to preserve the >>> EFLAGS, since we mark those

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 10:51:24AM -0800, Andy Lutomirski wrote: > > On Feb 13, 2019, at 7:45 AM, Peter Zijlstra wrote: > > Which I suppose means that GCC generates the PUSHF/POPF to preserve the > > EFLAGS, since we mark those explicitly clobbered. > > > > Not quite. A flags clobber doesn’t

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 04:45:32PM +0100, Peter Zijlstra wrote: > On Wed, Feb 13, 2019 at 03:41:45PM +0100, Peter Zijlstra wrote: > > On Wed, Feb 13, 2019 at 02:39:22PM +, Julien Thierry wrote: > > > Hi Peter, > > > > > > On 13/02/2019 14:25, Peter Zijlstra wrote: > > > > On Wed, Feb 13, 2019

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 03:41:45PM +0100, Peter Zijlstra wrote: > On Wed, Feb 13, 2019 at 02:39:22PM +, Julien Thierry wrote: > > Hi Peter, > > > > On 13/02/2019 14:25, Peter Zijlstra wrote: > > > On Wed, Feb 13, 2019 at 02:00:26PM +, Will Deacon wrote: > > >> The difference is because

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 03:40:00PM +0100, Peter Zijlstra wrote: > So far, all 6 in-tree users are indeed free of dodgy code, but *groan*. because of this, there must also not be tracepoints (even implicit ones like function-trace) between user_access_{begin,end}(). And while that is unlikely

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 02:39:22PM +, Julien Thierry wrote: > Hi Peter, > > On 13/02/2019 14:25, Peter Zijlstra wrote: > > On Wed, Feb 13, 2019 at 02:00:26PM +, Will Deacon wrote: > >> The difference is because getting preempted in the sequence above is > >> triggered off the back of an

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 02:24:34PM +, Julien Thierry wrote: > On 13/02/2019 14:17, Peter Zijlstra wrote: > > On Wed, Feb 13, 2019 at 02:00:26PM +, Will Deacon wrote: > >>> This; how is getting preempted fundamentally different from scheduling > >>> ourselves? > >> > >> The difference is

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Julien Thierry
Hi Peter, On 13/02/2019 14:25, Peter Zijlstra wrote: > On Wed, Feb 13, 2019 at 02:00:26PM +, Will Deacon wrote: >> The difference is because getting preempted in the sequence above is >> triggered off the back of an interrupt. On arm64, and I think also on x86, >> the user access state (SMAP

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Julien Thierry
On 13/02/2019 14:17, Peter Zijlstra wrote: > On Wed, Feb 13, 2019 at 02:00:26PM +, Will Deacon wrote: >>> This; how is getting preempted fundamentally different from scheduling >>> ourselves? >> >> The difference is because getting preempted in the sequence above is >> triggered off the

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 02:00:26PM +, Will Deacon wrote: > The difference is because getting preempted in the sequence above is > triggered off the back of an interrupt. On arm64, and I think also on x86, > the user access state (SMAP or PAN) is saved and restored across exceptions > but not

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 02:00:26PM +, Will Deacon wrote: > > This; how is getting preempted fundamentally different from scheduling > > ourselves? > > The difference is because getting preempted in the sequence above is > triggered off the back of an interrupt. On arm64, and I think also on

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Julien Thierry
On 13/02/2019 14:00, Will Deacon wrote: > Hi Peter, > > On Wed, Feb 13, 2019 at 02:17:20PM +0100, Peter Zijlstra wrote: >> On Wed, Feb 13, 2019 at 10:50:21AM +, Julien Thierry wrote: >>> On 13/02/2019 10:35, Peter Zijlstra wrote: On Tue, Feb 12, 2019 at 09:15:13AM +, Julien

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Will Deacon
Hi Peter, On Wed, Feb 13, 2019 at 02:17:20PM +0100, Peter Zijlstra wrote: > On Wed, Feb 13, 2019 at 10:50:21AM +, Julien Thierry wrote: > > On 13/02/2019 10:35, Peter Zijlstra wrote: > > > On Tue, Feb 12, 2019 at 09:15:13AM +, Julien Thierry wrote: > > > > > > diff --git

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 02:17:20PM +0100, Peter Zijlstra wrote: > On Wed, Feb 13, 2019 at 10:50:21AM +, Julien Thierry wrote: > > On 13/02/2019 10:35, Peter Zijlstra wrote: > > > On Tue, Feb 12, 2019 at 09:15:13AM +, Julien Thierry wrote: > > > > > > diff --git a/kernel/sched/core.c

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Wed, Feb 13, 2019 at 10:50:21AM +, Julien Thierry wrote: > On 13/02/2019 10:35, Peter Zijlstra wrote: > > On Tue, Feb 12, 2019 at 09:15:13AM +, Julien Thierry wrote: > > > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > > index a674c7db..b1bb7e9 100644 > > ---

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Julien Thierry
On 13/02/2019 10:35, Peter Zijlstra wrote: > On Tue, Feb 12, 2019 at 09:15:13AM +, Julien Thierry wrote: > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index a674c7db..b1bb7e9 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -3289,6

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Peter Zijlstra
On Tue, Feb 12, 2019 at 09:15:13AM +, Julien Thierry wrote: > >>> diff --git a/kernel/sched/core.c b/kernel/sched/core.c > >>> index a674c7db..b1bb7e9 100644 > >>> --- a/kernel/sched/core.c > >>> +++ b/kernel/sched/core.c > >>> @@ -3289,6 +3289,14 @@ static inline void schedule_debug(struct

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-13 Thread Ingo Molnar
* Julien Thierry wrote: > I guess I'll drop the might_resched() part of this patch if that sounds > alright. That sounds perfect - that bit was pretty much the only problem I had with the series. Thanks, Ingo

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-12 Thread Julien Thierry
On 11/02/2019 13:51, Peter Zijlstra wrote: > On Mon, Feb 11, 2019 at 02:45:27PM +0100, Ingo Molnar wrote: >>> diff --git a/kernel/sched/core.c b/kernel/sched/core.c >>> index a674c7db..b1bb7e9 100644 >>> --- a/kernel/sched/core.c >>> +++ b/kernel/sched/core.c >>> @@ -3289,6 +3289,14 @@ static

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-11 Thread Peter Zijlstra
On Mon, Feb 11, 2019 at 02:45:27PM +0100, Ingo Molnar wrote: > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > > index a674c7db..b1bb7e9 100644 > > --- a/kernel/sched/core.c > > +++ b/kernel/sched/core.c > > @@ -3289,6 +3289,14 @@ static inline void schedule_debug(struct task_struct >

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-11 Thread Ingo Molnar
* Julien Thierry wrote: > While running a user_access regions, it is not supported to reschedule. > Add an overridable primitive to indicate whether a user_access region is > active and check that this is not the case when calling rescheduling > functions. > > These checks are only performed

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-02-04 Thread Julien Thierry
On 30/01/2019 16:58, Valentin Schneider wrote: > On 15/01/2019 13:58, Julien Thierry wrote: > [...]> @@ -6151,6 +6159,20 @@ void ___might_sleep(const char *file, int line, > int preempt_offset) >> EXPORT_SYMBOL(___might_sleep); >> #endif >> >> +#ifdef CONFIG_DEBUG_UACCESS_SLEEP >> +void

Re: [PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-01-30 Thread Valentin Schneider
On 15/01/2019 13:58, Julien Thierry wrote: [...]> @@ -6151,6 +6159,20 @@ void ___might_sleep(const char *file, int line, int preempt_offset) > EXPORT_SYMBOL(___might_sleep); > #endif > > +#ifdef CONFIG_DEBUG_UACCESS_SLEEP > +void __might_resched(const char *file, int line) > +{ > + if

[PATCH v3 3/4] uaccess: Check no rescheduling function is called in unsafe region

2019-01-15 Thread Julien Thierry
While running a user_access regions, it is not supported to reschedule. Add an overridable primitive to indicate whether a user_access region is active and check that this is not the case when calling rescheduling functions. These checks are only performed when DEBUG_UACCESS_SLEEP is selected.