Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751929AbdF3G5c (ORCPT ); Fri, 30 Jun 2017 02:57:32 -0400 Received: from mout.gmx.net ([212.227.15.19]:56451 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751866AbdF3G5b (ORCPT ); Fri, 30 Jun 2017 02:57:31 -0400 Subject: Re: [PATCH] mm: Fix overflow check in expand_upwards() To: =?UTF-8?Q?J=c3=b6rn_Engel?= , Hugh Dickins , linux-kernel@vger.kernel.org References: <20170629230256.GB494@cork> From: Helge Deller Message-ID: <747944b6-ffb8-14db-d574-efc03e11f2a5@gmx.de> Date: Fri, 30 Jun 2017 08:57:27 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170629230256.GB494@cork> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K0:mi6vg1WUVEVpJRbn2DHzhNeV8FtZdNaRxrQdethCa1e+kdRTfbG FUIyj0ywxXfrf9HBVDw298DXC1O2vCnajLkMM+Uh3xhG+f8yPL3p1xaxz31TGvgSdwcOvgy jSo8Wttsj/otOrjo6mdMEEDFjPSl4w5468VWxKruk+0OhzrohnlClDAGswlz3MDnox+RwRf e55SHsOJhv8M1CcT5EGkg== X-UI-Out-Filterresults: notjunk:1;V01:K0:hK2Uxd3l3DU=:57hvYG86I7G+cNMpjcheSF QMBop95xkeX3SgPhqAuNgZcWM9m0bI//Smkq0hx97GNTLL291hUvdkv3+Q0ChCk3MX75Vs1JR EZKryz89q+9Qi1dTAs+ZzTVts+dSHv4OFZ6kRJ5DojPr2BMLqkl1m5wxoGIImWdQD625ZiYNu 6Tk4kQLJzKCtVGWm1oJcjoSXw+MUJq9vfTdr8lg2lgtHsyfrodURIuiUQlEJyn/ssUPe9S3mK WyE1BzZYQ+Hjrv8Sl/YZFDWWTSPFxbaH9wsZ5j3gxddwsrIzABsJwdO9RmxKFqtsuJaz7RN2f kqXE2Pq+03ml9Se5Zd7ze0YnnAYNHP0dtMBp1J8G8QSMQeSvkf9vBouJqI9fKTWXFzxH9henU t0ip52TSq0PqYGbx81FIeTXgFQbm2puBlzKBzK6eSQU32qFbCWlXV93lQE7RKlGSm7bWG9fo8 YpFaG2f2NQrlqpzeArtJzuWecsxw1aMrDpwGMpEc0EpzBng/mCpFIbV1mGd863jPzhHt99W99 uQW2Ulm06FGb02J+MYCPd8PJwDDzyHXjc2yYH+9OPsPD1wba9ePymFdF1HV/fkpMKJFOSEe7S V4bDDldYXGFzG17DD4YS9jSCm2BQaUsnYnmjqXbFFJaKppKDqwVB7mUqjw8zUv/YU/Q2ncmGW pz2KIJgcFlqRP9LGwBObP5ZMlBhaLGqU9/bo7fpI7u86dy+UZgo0CDWMdl0oyqB/kd5YtdpeQ wDiazqyK5kpFNT4M0gTt5Fo93XvtJKrPkGluYWy4O2MleF87Rt4CYud79ZQo83CYKRkFzmfKY iLTbomU Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1729 Lines: 55 On 30.06.2017 01:02, J?rn Engel wrote: > I believe the overflow check was correct, then got subtly broken by > commit bd726c90b6b8 > Author: Helge Deller > Date: Mon Jun 19 17:34:05 2017 +0200 > > Allow stack to grow up to address space limit > > The old overflow check may have been a bit subtle and I suppose Helge > missed its importance. > > if (!address) > return -ENOMEM; > > Functionally the my check is identical to the old one. I just hope the > alternative form (and comment!) make it harder to miss and break things > in a future patch. > > Signed-off-by: Joern Engel > --- > mm/mmap.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/mm/mmap.c b/mm/mmap.c > index a5e3dcd75e79..7366f62c31f4 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -2232,7 +2232,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) > > /* Guard against exceeding limits of the address space. */ > address &= PAGE_MASK; > - if (address >= TASK_SIZE) > + /* second check is for integer overflow */ > + if (address >= TASK_SIZE || address + PAGE_SIZE < address) > return -ENOMEM; > address += PAGE_SIZE; That overflow check is still there. Look at the next few lines in mmap.c: /* Enforce stack_guard_gap */ gap_addr = address + stack_guard_gap; /* Guard against overflow */ if (gap_addr < address || gap_addr > TASK_SIZE) gap_addr = TASK_SIZE; If the requested page plus the gap (=gap_addr) wraps around, then the code will limit it to TASK_SIZE. So, the code should already take care of all possible areas >=TASK_SIZE, including wrap-arounds. Did you faced a real issue? Helge