Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp2745892ybi; Mon, 17 Jun 2019 09:58:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqyFlyXTCV4CRbx9OCYld3zh1TDmnZrU4mdQM/UDL4/ul7Yv4rF0ktvF0NIc6p7W57JxGvlO X-Received: by 2002:a17:902:1e9:: with SMTP id b96mr62525576plb.277.1560790688693; Mon, 17 Jun 2019 09:58:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560790688; cv=none; d=google.com; s=arc-20160816; b=za1iG3hIRA7JULDLTFxc3w6CwekQfgaId7IJP5JCgRn9nqtepnWjcjzSuBh8Tod+DF WuGIp3T8q+CIAd1X7HFqLkzOoDuDxTCcATSmfo/c15EI1BzQu38cLj7HTKNT9o858kiD p9RW9TJQv/Bu4znpdofOA1iOTheMu8xghSs9reOh6evzTW7OUSQkldM7k7OQYY5vdskf fzxm1C+Ip0sqqpEE12qQlx9v19UN/wAaiEslqrn+b8nniRdodGr78P0Y50Njr0MWexxY KR3lPFNJYgA639shJlJJjPNgc+3HLBxNY54lxqjfzimeINc1TyZULGGkHqW6h0X9lLhX o+Gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:date:from:dkim-signature; bh=uehbFKL1DtxLa2nl9V1qPHUSvv6mkzLbDy3FtI6IAQk=; b=H5xi/H7Jfs3uAUx5IWY4IrWklwSFCMjO1LtC+jW0fcBc27acdHqLhPi2LRaR2y0T9l 5lIGakuc1YfPdJoQdLU4Kfc7uF3+kb8T3HQpWV+UPEwCzGOQSVjdw4rIxZTYEMVM8XbR nCTHy/CDHyZJp5WveSyPViHTqd6HyoUIOx2xJrRLVE7FAULH4eHgYHnEldSDAu0yjYE3 37e3lZj0wdp65KOTNGOfoqbCck1mLYxn83/k6UDrXjRmS0KB++kucAe6vVtia3VCQJ1B p/09HzQsnZah8evZE162hu0Al6TRF0MGIOPsNu1AsIayHfDchUWj95ymqvWk+vVdnnh0 CHYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jL9LSwuQ; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o7si10937782pgi.74.2019.06.17.09.57.53; Mon, 17 Jun 2019 09:58:08 -0700 (PDT) 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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=jL9LSwuQ; 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=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728385AbfFQQ5n (ORCPT + 99 others); Mon, 17 Jun 2019 12:57:43 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:46041 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726005AbfFQQ5m (ORCPT ); Mon, 17 Jun 2019 12:57:42 -0400 Received: by mail-lj1-f194.google.com with SMTP id m23so9972468lje.12 for ; Mon, 17 Jun 2019 09:57:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:date:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=uehbFKL1DtxLa2nl9V1qPHUSvv6mkzLbDy3FtI6IAQk=; b=jL9LSwuQohV/9tClkUG/oVuCZeBdjbOcw9xBRe7rtSGIyTK1YLcmWUGHHaEi0SnFge rLkIFXy9a/v/FmfE++BaNmF4MHGSM6fWraE9+1nKcHvkCZReSDbgYf2++8EPwWNe88iM R22gUiDyD4G2kg/HAbU8M0Oze0b9cyc0OqBW+Tkk4rIBalMKMzq3c4dvGzi5po380p0k XsHmDlkTWsprGF33/pJfmJz3nHgGz2O+ffcYCQC59iU+naMow6ilS2zfzXKmN6MPvZ/O gMtRDlV4khPGvBFo3z9wTpo++6PNgweNGKaJdJeW6rb6KdhfUlkPuoj+L15TqOt2m33Y Yg/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:date:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=uehbFKL1DtxLa2nl9V1qPHUSvv6mkzLbDy3FtI6IAQk=; b=qhc3Ihpl2oLuHwuOL9zNZhGzD5I/bReV+aXjVLhpeW2Itg/ARV80ntSyYwLasdvQGp nNTIlWOSYqJX9kjzp3A9kd2MAXxNOjOSqp23fe9A0AHWQg3Lrwum7I36H/pRQZ7pHmn+ FMLiqjgw3591HZAIVgLG/2yHuCP9lDKlP0nnCqYqlVbAurZa68jBeISMx3CP3Aco3kdC MG1UK9BnfmoTAOv+SfkwEVZfMvkx3vscUjZkiEyqrv490ngIpt1Fp3chh3QIC7Uk4xe5 L558y12nQ/4Hz3miBiQO49geDn57VGmN6+LEhFXenDHNSc5UWBExIwNsmWzu6i1SNuJt PIDQ== X-Gm-Message-State: APjAAAWG8Zslti80la347RepIIZHiEd2gl8OhNtht4dJNq2mQbap+CeX bAgqFC14gVQRmJFWky/wpuM= X-Received: by 2002:a2e:5d92:: with SMTP id v18mr52653870lje.9.1560790660091; Mon, 17 Jun 2019 09:57:40 -0700 (PDT) Received: from pc636 ([37.139.158.167]) by smtp.gmail.com with ESMTPSA id v12sm2175804ljk.22.2019.06.17.09.57.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 17 Jun 2019 09:57:39 -0700 (PDT) From: Uladzislau Rezki X-Google-Original-From: Uladzislau Rezki Date: Mon, 17 Jun 2019 18:57:30 +0200 To: Arnd Bergmann Cc: Uladzislau Rezki , Roman Gushchin , Michal Hocko , Matthew Wilcox , Thomas Garnier , Oleksiy Avramchenko , Steven Rostedt , Joel Fernandes , Thomas Gleixner , Ingo Molnar , Tejun Heo , Andrew Morton , Linus Torvalds , Stephen Rothwell , Roman Penyaev , Rick Edgecombe , Andrey Ryabinin , Mike Rapoport , Linux-MM , Linux Kernel Mailing List Subject: Re: [BUG]: mm/vmalloc: uninitialized variable access in pcpu_get_vm_areas Message-ID: <20190617165730.5l7z47n3vg73q7mp@pc636> References: <20190617121427.77565-1-arnd@arndb.de> <20190617141244.5x22nrylw7hodafp@pc636> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > > I managed to un-confuse gcc-8 by turning the if/else if/else into > a switch statement. If you all think this is an acceptable solution, > I'll submit that after some more testing to ensure it addresses > all configurations: > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index a9213fc3802d..5b7e50de008b 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -915,7 +915,8 @@ adjust_va_to_fit_type(struct vmap_area *va, > { > struct vmap_area *lva; > > - if (type == FL_FIT_TYPE) { > + switch (type) { > + case FL_FIT_TYPE: > /* > * No need to split VA, it fully fits. > * > @@ -925,7 +926,8 @@ adjust_va_to_fit_type(struct vmap_area *va, > */ > unlink_va(va, &free_vmap_area_root); > kmem_cache_free(vmap_area_cachep, va); > - } else if (type == LE_FIT_TYPE) { > + break; > + case LE_FIT_TYPE: > /* > * Split left edge of fit VA. > * > @@ -934,7 +936,8 @@ adjust_va_to_fit_type(struct vmap_area *va, > * |-------|-------| > */ > va->va_start += size; > - } else if (type == RE_FIT_TYPE) { > + break; > + case RE_FIT_TYPE: > /* > * Split right edge of fit VA. > * > @@ -943,7 +946,8 @@ adjust_va_to_fit_type(struct vmap_area *va, > * |-------|-------| > */ > va->va_end = nva_start_addr; > - } else if (type == NE_FIT_TYPE) { > + break; > + case NE_FIT_TYPE: > /* > * Split no edge of fit VA. > * > @@ -980,7 +984,8 @@ adjust_va_to_fit_type(struct vmap_area *va, > * Shrink this VA to remaining size. > */ > va->va_start = nva_start_addr + size; > - } else { > + break; > + default: > return -1; > } > To me it is not clear how it would solve the warning. It sounds like your GCC after this change is able to keep track of that variable probably because of less generated code. But i am not sure about other versions. For example i have: gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) and it totally OK, i.e. it does not emit any related warning. Another thing is that, if we add mode code there or change the function prototype, we might run into the same warning. Therefore i proposed that we just set the variable to NULL, i.e. Initialize it. diff --git a/mm/vmalloc.c b/mm/vmalloc.c index b1bb5fc6eb05..10cfb93aba1e 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -913,7 +913,11 @@ adjust_va_to_fit_type(struct vmap_area *va, unsigned long nva_start_addr, unsigned long size, enum fit_type type) { - struct vmap_area *lva; + /* + * Some GCC versions can emit bogus warning that it + * may be used uninitialized, therefore set it NULL. + */ + struct vmap_area *lva = NULL; if (type == FL_FIT_TYPE) { /* -- Vlad Rezki