From mboxrd@z Thu Jan 1 00:00:00 1970 From: Borislav Petkov Subject: Re: [PATCH v2 1/4] syscalls: Restore address limit after a syscall Date: Thu, 9 Mar 2017 09:42:08 +0100 Message-ID: <20170309084208.ims3ehcnieo7uqew@pd.tnic> References: <20170309012456.5631-1-thgarnie@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Return-path: List-Post: List-Help: List-Unsubscribe: List-Subscribe: Content-Disposition: inline In-Reply-To: <20170309012456.5631-1-thgarnie@google.com> To: Thomas Garnier Cc: David Howells , Dave Hansen , Arnd Bergmann , Al Viro , =?utf-8?B?UmVuw6k=?= Nyffenegger , Andrew Morton , Kees Cook , "Paul E . McKenney" , "David S . Miller" , Andy Lutomirski , Ard Biesheuvel , Nicolas Pitre , Petr Mladek , Sebastian Andrzej Siewior , Sergey Senozhatsky , Helge Deller , Rik van Riel , Ingo Molnar , Oleg Nesterov , John Stultz , Thomas Gleixner , Pavel Tikhomirov , Fre List-Id: linux-api@vger.kernel.org On Wed, Mar 08, 2017 at 05:24:53PM -0800, Thomas Garnier wrote: > @@ -191,6 +191,22 @@ extern struct trace_event_functions exit_syscall_print_funcs; > SYSCALL_METADATA(sname, x, __VA_ARGS__) \ > __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) > > +asmlinkage void verify_pre_usermode_state(void); > + > +#ifndef CONFIG_ARCH_NO_SYSCALL_VERIFY_PRE_USERMODE_STATE > +static inline bool has_user_ds(void) { > + bool ret = segment_eq(get_fs(), USER_DS); > + // Prevent re-ordering the call This is not the kernel comments style. Use /* */ instead. > + barrier(); > + return ret; > +} > +#else > +static inline bool has_user_ds(void) { > + return false; > +} > +#endif ... and then you could slim down the ifdeffery a bit: static inline bool has_user_ds(void) { bool ret = false; #ifndef CONFIG_ARCH_NO_SYSCALL_VERIFY_PRE_USERMODE_STATE ret = segment_eq(get_fs(), USER_DS); /* Prevent re-ordering the call. */ barrier(); #endif return ret; } -- Regards/Gruss, Boris. Good mailing practices for 400: avoid top-posting and trim the reply. From mboxrd@z Thu Jan 1 00:00:00 1970 From: bp@alien8.de (Borislav Petkov) Date: Thu, 9 Mar 2017 09:42:08 +0100 Subject: [PATCH v2 1/4] syscalls: Restore address limit after a syscall In-Reply-To: <20170309012456.5631-1-thgarnie@google.com> References: <20170309012456.5631-1-thgarnie@google.com> Message-ID: <20170309084208.ims3ehcnieo7uqew@pd.tnic> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wed, Mar 08, 2017 at 05:24:53PM -0800, Thomas Garnier wrote: > @@ -191,6 +191,22 @@ extern struct trace_event_functions exit_syscall_print_funcs; > SYSCALL_METADATA(sname, x, __VA_ARGS__) \ > __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) > > +asmlinkage void verify_pre_usermode_state(void); > + > +#ifndef CONFIG_ARCH_NO_SYSCALL_VERIFY_PRE_USERMODE_STATE > +static inline bool has_user_ds(void) { > + bool ret = segment_eq(get_fs(), USER_DS); > + // Prevent re-ordering the call This is not the kernel comments style. Use /* */ instead. > + barrier(); > + return ret; > +} > +#else > +static inline bool has_user_ds(void) { > + return false; > +} > +#endif ... and then you could slim down the ifdeffery a bit: static inline bool has_user_ds(void) { bool ret = false; #ifndef CONFIG_ARCH_NO_SYSCALL_VERIFY_PRE_USERMODE_STATE ret = segment_eq(get_fs(), USER_DS); /* Prevent re-ordering the call. */ barrier(); #endif return ret; } -- Regards/Gruss, Boris. Good mailing practices for 400: avoid top-posting and trim the reply. From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Thu, 9 Mar 2017 09:42:08 +0100 From: Borislav Petkov Message-ID: <20170309084208.ims3ehcnieo7uqew@pd.tnic> References: <20170309012456.5631-1-thgarnie@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20170309012456.5631-1-thgarnie@google.com> Subject: [kernel-hardening] Re: [PATCH v2 1/4] syscalls: Restore address limit after a syscall To: Thomas Garnier Cc: David Howells , Dave Hansen , Arnd Bergmann , Al Viro , =?utf-8?B?UmVuw6k=?= Nyffenegger , Andrew Morton , Kees Cook , "Paul E . McKenney" , "David S . Miller" , Andy Lutomirski , Ard Biesheuvel , Nicolas Pitre , Petr Mladek , Sebastian Andrzej Siewior , Sergey Senozhatsky , Helge Deller , Rik van Riel , Ingo Molnar , Oleg Nesterov , John Stultz , Thomas Gleixner , Pavel Tikhomirov , Frederic Weisbecker , Stephen Smalley , Stanislav Kinsburskiy , Ingo Molnar , "H . Peter Anvin" , Paolo Bonzini , Josh Poimboeuf , Brian Gerst , Jan Beulich , Christian Borntraeger , "Luis R . Rodriguez" , He Chen , Russell King , Will Deacon , Catalin Marinas , Mark Rutland , James Morse , Pratyush Anand , Vladimir Murzin , Chris Metcalf , Andre Przywara , linux-api@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, linux-arm-kernel@lists.infradead.org, kernel-hardening@lists.openwall.com List-ID: On Wed, Mar 08, 2017 at 05:24:53PM -0800, Thomas Garnier wrote: > @@ -191,6 +191,22 @@ extern struct trace_event_functions exit_syscall_print_funcs; > SYSCALL_METADATA(sname, x, __VA_ARGS__) \ > __SYSCALL_DEFINEx(x, sname, __VA_ARGS__) > > +asmlinkage void verify_pre_usermode_state(void); > + > +#ifndef CONFIG_ARCH_NO_SYSCALL_VERIFY_PRE_USERMODE_STATE > +static inline bool has_user_ds(void) { > + bool ret = segment_eq(get_fs(), USER_DS); > + // Prevent re-ordering the call This is not the kernel comments style. Use /* */ instead. > + barrier(); > + return ret; > +} > +#else > +static inline bool has_user_ds(void) { > + return false; > +} > +#endif ... and then you could slim down the ifdeffery a bit: static inline bool has_user_ds(void) { bool ret = false; #ifndef CONFIG_ARCH_NO_SYSCALL_VERIFY_PRE_USERMODE_STATE ret = segment_eq(get_fs(), USER_DS); /* Prevent re-ordering the call. */ barrier(); #endif return ret; } -- Regards/Gruss, Boris. Good mailing practices for 400: avoid top-posting and trim the reply.