From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754129AbcHXRTW (ORCPT ); Wed, 24 Aug 2016 13:19:22 -0400 Received: from skprod2.natinst.com ([130.164.80.23]:40209 "EHLO ni.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750879AbcHXRTT (ORCPT ); Wed, 24 Aug 2016 13:19:19 -0400 X-Greylist: delayed 1658 seconds by postgrey-1.27 at vger.kernel.org; Wed, 24 Aug 2016 13:19:18 EDT Date: Wed, 24 Aug 2016 11:51:02 -0500 From: Josh Cartwright To: Andy Lutomirski Cc: x86@kernel.org, Borislav Petkov , linux-kernel@vger.kernel.org, Brian Gerst , Oleg Nesterov Subject: Re: [PATCH v6 1/3] fork: Add generic vmalloced stack support Message-ID: <20160824165102.GB22613@jcartwri.amer.corp.natinst.com> References: <14c07d4fd173a5b117f51e8b939f9f4323e39899.1470907718.git.luto@kernel.org> MIME-Version: 1.0 In-Reply-To: <14c07d4fd173a5b117f51e8b939f9f4323e39899.1470907718.git.luto@kernel.org> User-Agent: Mutt/1.6.1 (2016-04-27) X-MIMETrack: Itemize by SMTP Server on US-AUS-MGWOut1/AUS/H/NIC(Release 8.5.3FP6 HF1218|December 12, 2014) at 08/24/2016 11:51:02 AM, Serialize by Router on US-AUS-MGWOut1/AUS/H/NIC(Release 8.5.3FP6 HF1218|December 12, 2014) at 08/24/2016 11:51:02 AM, Serialize complete at 08/24/2016 11:51:02 AM Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="cmJC7u66zC7hs+87" Content-Disposition: inline X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-08-24_09:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --cmJC7u66zC7hs+87 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hey Andy- Small non-critical/potential future optimization comment below: On Thu, Aug 11, 2016 at 02:35:21AM -0700, Andy Lutomirski wrote: > If CONFIG_VMAP_STACK is selected, kernel stacks are allocated with > vmalloc_node. >=20 > grsecurity has had a similar feature (called > GRKERNSEC_KSTACKOVERFLOW) for a long time. >=20 > Cc: Oleg Nesterov > Signed-off-by: Andy Lutomirski > --- [..] > diff --git a/kernel/fork.c b/kernel/fork.c > index 52e725d4a866..05f7ef796fb4 100644 > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -158,19 +158,39 @@ void __weak arch_release_thread_stack(unsigned long= *stack) > * Allocate pages if THREAD_SIZE is >=3D PAGE_SIZE, otherwise use a > * kmemcache based allocator. > */ > -# if THREAD_SIZE >=3D PAGE_SIZE > -static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, > - int node) > +# if THREAD_SIZE >=3D PAGE_SIZE || defined(CONFIG_VMAP_STACK) > +static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, i= nt node) > { > +#ifdef CONFIG_VMAP_STACK > + void *stack =3D __vmalloc_node_range(THREAD_SIZE, THREAD_SIZE, > + VMALLOC_START, VMALLOC_END, > + THREADINFO_GFP | __GFP_HIGHMEM, > + PAGE_KERNEL, > + 0, node, > + __builtin_return_address(0)); > + > + /* > + * We can't call find_vm_area() in interrupt context, and > + * free_thread_stack can be called in interrupt context, so cache > + * the vm_struct. > + */ > + if (stack) > + tsk->stack_vm_area =3D find_vm_area(stack); This is annoying, we end up having to walk the vm_area tree twice (once for the allocation, then here to get a handle on area). Perhaps it's time the vmalloc code learned an allocation API that returned the vm_area handle as well. Josh --cmJC7u66zC7hs+87 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAABCAAGBQJXvdByAAoJEKp7ZBKwQFAr2l8H/AmiBGxj1y+Ediq/FxiIqK7x igRaNHSnaW9ACMdmxgar/53qUXzRJR7OQRSJU1Dz4bBDI6p0iZ5114uZqnwMz37+ ahsxJF0AmfyxpKAs5TN2NxVGK456RnWG9vgbA9sSgXdxOT/+FmxTcRLD5SxrCV9G Q++dQCWV+2H1rE1ch2vsbpyll2vzExjDOArUd41fNeqTI1lM9wJQTYf+d+e2AEBg VV0IRRbDychMUcBSuHjKouA5h3B7AbIWhnc3cn3bZ07tFynqIFM43eyjgnpjLi87 MxGBY5d468oVDusrchxkn4C9JcBJb64g6IqnOiLDiT6SyqNIUPQb3QpvlTL8PSw= =nMZx -----END PGP SIGNATURE----- --cmJC7u66zC7hs+87--