Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp2907896ybi; Mon, 17 Jun 2019 12:29:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqwtcF7lDCJmsUDvC9QHt8TyhSFQmWeEVG+bElmrdRh3lXk20p0o56sTPOHhANcaI/6e4Rs9 X-Received: by 2002:a17:902:6902:: with SMTP id j2mr37295718plk.321.1560799789813; Mon, 17 Jun 2019 12:29:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560799789; cv=none; d=google.com; s=arc-20160816; b=ostPCXKa5vYZdqNOk7/Mk3Va+9a6EyE8X8cV+2Cvz1/JA/VQTJQ+jrYQpaFlmj/6jB VqxfAab/B+OcdNcE0tPF641is13zJGQUm8luteWKjUlxO4PRxROZdRt/cLkCMPGr+XMc 5ePNvVArN3GiqwYMxhN2qOe83b1iVq1BC2JryEo3i2WzrJFlj3fkUJml+WCE6JZt6bJy 3jhvfkrEfSpxo2yraveBTTi2N+71gOaVMZHz+i6Ldtp5Ajxa/Rxm74kF1UNzQfWtoGMK uUQ4KDn5mV2H5jMhuzBM9nnDy4TSxS1uFLkOkIb4RAtewKpTv3+c4+FJ96ipD3X206FK 6kLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version; bh=/xlNlelotM+Dvc+xUSx9X17ASwHKHoVnlctg4TDQCb8=; b=b9KQBqzIVeua592VmnnKkpyHcEzVSrKxx9O1NHrZeiLEnfRp5jfNM1y5NpNfCTTSSr Rc3dyYl7xvIsih9rHUxLHsCxTRLpx9b5JCMG+KocPVOlR5GTNRbLJ19jhCg5tknCE3Lo ilBEPcMpLSL1JM3QeudXOkcb7GMpfunMiwBMPDZ2b22VKAXkXdLW8u0nlZG+b30CuN1n EyWXpZQ1GEh4L4x7AjEqaBQ/88lLVUmoyWOKGjKGDtaX8yQaCW1PC9tkbxHyYeszUYjn hir9WoZObfi6aYOP42P5nRoaEMBnxvhriTBxHKVaKSZbgxtGK2MoxpTul2GO3F6B2Aam 673A== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 33si315006pli.144.2019.06.17.12.29.34; Mon, 17 Jun 2019 12:29:49 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728903AbfFQT31 (ORCPT + 99 others); Mon, 17 Jun 2019 15:29:27 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:34418 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726331AbfFQT31 (ORCPT ); Mon, 17 Jun 2019 15:29:27 -0400 Received: by mail-qt1-f195.google.com with SMTP id m29so12256201qtu.1 for ; Mon, 17 Jun 2019 12:29:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=/xlNlelotM+Dvc+xUSx9X17ASwHKHoVnlctg4TDQCb8=; b=pnIKUK0yhUXApNPupv14FMaBkIH2OiOH6Sf3J5/ObemWPZtqBijS03f4MJgNGxY+uU PhJtz6FV0/CPcYo0Yz989d5/JA13jRL4Zl5D3ohpxPH6pJG1XIr342CzeEVKwMhbj9kT 41KPSLxODNy8PDXnhqKeSesxdRJ5rqbbO0Jq2k1aB6SlG0LdsA/4O/UlXjmfS+jp7ODh YcN/1qBq/82nId3P6X1y9+E28RctV/19t4rKqzwMaz2OpoSimP6wjxxp8Mdlzmv2Xtk/ c5fAYJm0AYrrJAWbFivZJ3vbr4dCYW5t7Z4dQAsyOoyyLYkR3QuZyDN0Cgl1/C6U4giC sXBA== X-Gm-Message-State: APjAAAUuGgBlVANVGlYka7W7Sll3XIYusjpo2O1YNwTO9Pkn7eSEgJ2s nzGxbuJ4L/62e1TAuCl7juX6SMa/02FIjsncfEg= X-Received: by 2002:ac8:3485:: with SMTP id w5mr18630643qtb.142.1560799765930; Mon, 17 Jun 2019 12:29:25 -0700 (PDT) MIME-Version: 1.0 References: <20190617121427.77565-1-arnd@arndb.de> <20190617141244.5x22nrylw7hodafp@pc636> <20190617165730.5l7z47n3vg73q7mp@pc636> In-Reply-To: <20190617165730.5l7z47n3vg73q7mp@pc636> From: Arnd Bergmann Date: Mon, 17 Jun 2019 21:29:08 +0200 Message-ID: Subject: Re: [BUG]: mm/vmalloc: uninitialized variable access in pcpu_get_vm_areas To: Uladzislau Rezki Cc: 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 Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 17, 2019 at 6:57 PM Uladzislau Rezki wrote: > > 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. To provide some background here, I'm doing randconfig tests, and this warning might be one that only shows up with a specific combination of options that add complexity to the build. I do run into a lot -Wmaybe-uninitialized warnings, and most of the time can figure out to change the code to be more readable by both humans and compilers in a way that shuts up the warning. The underlying algorithm in the compiler is NP-complete, so it can't ever get it right 100%, but it is a valuable warning in general. Using switch/case makes it easier for the compiler because it seems to turn this into a single conditional instead of a set of conditions. It also seems to be the much more common style in the kernel. > 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. The problem with adding explicit NULL initializations is that this is more likely to hide actual bugs if the code changes again, and the compiler no longer notices the problem, so I try to avoid ever initializing a variable to something that would cause a runtime bug in place of a compile time warning later. Arnd