Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753330AbdLHKuN (ORCPT ); Fri, 8 Dec 2017 05:50:13 -0500 Received: from bombadil.infradead.org ([65.50.211.133]:53184 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752604AbdLHKuJ (ORCPT ); Fri, 8 Dec 2017 05:50:09 -0500 Date: Fri, 8 Dec 2017 11:50:04 +0100 From: Peter Zijlstra To: Darren Hart Cc: Cheng Jian , tglx@linutronix.de, mingo@redhat.com, linux-kernel@vger.kernel.org, xiexiuqi@huawei.com, huawei.libin@huawei.com Subject: Re: [PATCH] futex: use fault_in to avoid infinite loop Message-ID: <20171208105004.5o2vuagtfaayf3ej@hirez.programming.kicks-ass.net> References: <1512570067-79946-1-git-send-email-cj.chengjian@huawei.com> <20171206160400.yzewed5juhytfwyy@hirez.programming.kicks-ass.net> <20171206214007.GI3857@worktop> <20171208052136.GA28773@fury> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171208052136.GA28773@fury> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1511 Lines: 40 On Thu, Dec 07, 2017 at 09:21:36PM -0800, Darren Hart wrote: > On Wed, Dec 06, 2017 at 10:40:08PM +0100, Peter Zijlstra wrote: > > diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h > > index cf9c51ac49f9..4cb80d4ac160 100644 > > --- a/include/uapi/asm-generic/errno.h > > +++ b/include/uapi/asm-generic/errno.h > > @@ -119,5 +119,6 @@ > > #define ERFKILL 132 /* Operation not possible due to RF-kill */ > > > > #define EHWPOISON 133 /* Memory page has hardware error */ > > +#define EMORON 134 /* User did something particularly silly */ > > It's baaa-aaack... > Had to try... will keep trying, we need this! :-) > > --- a/kernel/futex.c > > +++ b/kernel/futex.c > > @@ -3262,6 +3262,8 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags, > > SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head, > > size_t, len) > > { > > + unsigned long address = (unsigned long)head; > > + > > if (!futex_cmpxchg_enabled) > > return -ENOSYS; > > /* > > @@ -3270,6 +3272,9 @@ SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head, > > if (unlikely(len != sizeof(*head))) > > return -EINVAL; > > > > + if (unlikely(address % __alignof__(*head))) > > + return -EMORON; > > Seeing as how this is performing the test as early as possible, would it make > sense to also catch unaligned uaddr and uaddr2 as early as possible too - in > sys_futex? Probably makes it clearer that we have this requirement, yes.