Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1000005imu; Fri, 11 Jan 2019 13:02:30 -0800 (PST) X-Google-Smtp-Source: ALg8bN6jMnoMdd4pTzOc7QAtFVe0W6iirPoZ8qlGqKLUCI+Gmdgn5RJeelsGnTjNoD4Kt1k9Hvme X-Received: by 2002:a17:902:2c03:: with SMTP id m3mr15401362plb.6.1547240549966; Fri, 11 Jan 2019 13:02:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547240549; cv=none; d=google.com; s=arc-20160816; b=VriYnRzjd830NwNnEoOjF0124FPtl4mSst8U+u90+rRtBLpVTEOwPllaxo7xjM7CCH fugr+k6r7AnEb63Q04B4jgDTrSY5P8EZExdeNWA+dtFqqhm8bSE4aiBbl9tz7c7q9Un2 GLdi5pR0zacXabbm5qHmbyEB5RcKTJg2mNpxflVsrn6MYiMbyO5MZy1hsz3j6lznFR/y 8VPbDdJv/QnKl4KvZJ/0qwuOP/5jqbwHNw96TnsO+uCKQ7ijvX3GJMdWD+MksohJnPUT O3mlPH7v1e4+/PDjitTrMRcpYb7gYrSULjcz8gMmerAMjQHuVZixW3lAKVgVJct4nnTS Lzuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=K+ky4mzeypLS4WpkBEi2KuGMGM1dwvogVT02i/9XvAg=; b=PP2t488Hn8SMxL5V43WTFI6BrN5DOmvaS5BwDOLEIDzd9XE+kiH7mOmGgPzAxnhnSA 5aMluu/Ufs6/hSEhPP/Tf5sUeYcJd6Qt0dmhlUh5i8dt/7rDvk0d+MMd3rbtkGj5rfQn RuGS9cZjVGsk//90nn5V9rgLifwzJ+ubmVgp0FQKQ5t40se5dGUkxLYRjIrK1OB3Zs0k epqL68T6xoxiM+d1q7A2/BKZR01n8hJWVDTAjfOLHG6UmFD37shs2yTOQ7ui7/Ub3+2B ajXVZmwvvN50nZs6C+un50xwTsiDVP1UI9QWZ4Zszt/Ft4+tDZMFYuTYnhxvcYlRWqIZ R99Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 133si80978585pfc.61.2019.01.11.13.02.14; Fri, 11 Jan 2019 13:02:29 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388463AbfAKT0W (ORCPT + 99 others); Fri, 11 Jan 2019 14:26:22 -0500 Received: from relay.sw.ru ([185.231.240.75]:43152 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726201AbfAKT0V (ORCPT ); Fri, 11 Jan 2019 14:26:21 -0500 Received: from [172.16.25.12] by relay.sw.ru with esmtp (Exim 4.91) (envelope-from ) id 1gi2Rd-0006qF-Sv; Fri, 11 Jan 2019 22:26:18 +0300 Subject: Re: [PATCH 2/3] mm/vmalloc: do not call kmemleak_free() on not yet accounted memory To: Roman Penyaev Cc: Andrew Morton , Michal Hocko , Joe Perches , "Luis R. Rodriguez" , linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20190103145954.16942-1-rpenyaev@suse.de> <20190103145954.16942-3-rpenyaev@suse.de> From: Andrey Ryabinin Message-ID: Date: Fri, 11 Jan 2019 22:26:39 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <20190103145954.16942-3-rpenyaev@suse.de> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/3/19 5:59 PM, Roman Penyaev wrote: > __vmalloc_area_node() calls vfree() on error path, which in turn calls > kmemleak_free(), but area is not yet accounted by kmemleak_vmalloc(). > > Signed-off-by: Roman Penyaev > Cc: Andrew Morton > Cc: Michal Hocko > Cc: Andrey Ryabinin > Cc: Joe Perches > Cc: "Luis R. Rodriguez" > Cc: linux-mm@kvack.org > Cc: linux-kernel@vger.kernel.org > --- > mm/vmalloc.c | 16 +++++++++++----- > 1 file changed, 11 insertions(+), 5 deletions(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 2cd24186ba84..dc6a62bca503 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -1565,6 +1565,14 @@ void vfree_atomic(const void *addr) > __vfree_deferred(addr); > } > > +static void __vfree(const void *addr) > +{ > + if (unlikely(in_interrupt())) > + __vfree_deferred(addr); > + else > + __vunmap(addr, 1); > +} > + > /** > * vfree - release memory allocated by vmalloc() > * @addr: memory base address > @@ -1591,10 +1599,8 @@ void vfree(const void *addr) > > if (!addr) > return; > - if (unlikely(in_interrupt())) > - __vfree_deferred(addr); > - else > - __vunmap(addr, 1); > + > + __vfree(addr); > } > EXPORT_SYMBOL(vfree); > > @@ -1709,7 +1715,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, > warn_alloc(gfp_mask, NULL, > "vmalloc: allocation failure, allocated %ld of %ld bytes", > (area->nr_pages*PAGE_SIZE), area->size); > - vfree(area->addr); > + __vfree(area->addr); This can't be an interrupt context for a several reasons. One of them is BUG_ON(in_interrupt()) in __get_vm_area_node() which is called right before __vmalloc_are_node(). So you can just do __vunmap(area->addr, 1); instead of __vfree(). > return NULL; > } > >