From patchwork Mon Jun 19 18:32:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Willy Tarreau X-Patchwork-Id: 105911 Delivered-To: patch@linaro.org Received: by 10.140.91.2 with SMTP id y2csp1011025qgd; Mon, 19 Jun 2017 11:41:16 -0700 (PDT) X-Received: by 10.101.70.129 with SMTP id h1mr27775081pgr.50.1497897675882; Mon, 19 Jun 2017 11:41:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1497897675; cv=none; d=google.com; s=arc-20160816; b=KqkX0wK2cGjc6KxBkMy5chPrMXJMiTyZUTShRc3mSJuPzEkUcTYUOoSIIqZoWJuTct YA7qtnKiMoXgEWDa5LUOZhvliOEKCcSeiLIeMOUHUXwLWdISdhSkik4TgkiiVR0Th6Pn 7EegbDQwUjMKEi1/KXfiK50llO6/uw2p4cduDof8ZurxbpOS2PZ+Wi5tm/mCWbGFCRgN X4JQ9GSR/9eeEwM4bh32TU0fQBEm7Hvwml8k3ySxzBBj42ZVP485uO/yrymDmhX2E6fM dNz+/39guKx8YWOvvOq4qBbAuWV5WkhSDGaXpvffZttubNJ4E/9zQ0r1FUpcMSnQinSY i5pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=Dnl72v+b5xJnFakvu/V5CICTGSyX2edSrYJsXAMSYKw=; b=m7a7hMeKEvltLuqPr8KhPcbT+WuFFgOuV1/PHkrnYbaxIbVS5lSeXYVTW2iTEdLJGX L95Twe4CXGjyHNuMQpW0lKa/zLsPFPKPqpndnWpJDpi3bMydFO0MHzUSrS8SOEw4QVA/ AaBJ5OuiqgTfBslULY7+DmIBjwFc0T1dWJ0Rwda98fI8PGaXGIqI75e/e8K1SmUmngJK vw1ISO3X4v3L9U073rQP+BM+6mVq4Qlg/LBlWc4w+egJJziTV/MBjuBw6pPE/JZwranl e/fdr/18F5+2yrUqMWnUJwjAPi4EBfLVjpSUY4c8YCek17kaPEBql3ILTeL1u3IRoI8x Xqgg== 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 n1si9396425pld.585.2017.06.19.11.41.15; Mon, 19 Jun 2017 11:41:15 -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 S1754484AbdFSSlM (ORCPT + 25 others); Mon, 19 Jun 2017 14:41:12 -0400 Received: from wtarreau.pck.nerim.net ([62.212.114.60]:52802 "EHLO 1wt.eu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754090AbdFSSlK (ORCPT ); Mon, 19 Jun 2017 14:41:10 -0400 Received: (from willy@localhost) by pcw.home.local (8.15.2/8.15.2/Submit) id v5JIY1GP015117; Mon, 19 Jun 2017 20:34:01 +0200 From: Willy Tarreau To: linux-kernel@vger.kernel.org, stable@vger.kernel.org, linux@roeck-us.net Cc: Arnd Bergmann , Kalle Valo , Willy Tarreau Subject: [PATCH 3.10 251/268] hostap: avoid uninitialized variable use in hfa384x_get_rid Date: Mon, 19 Jun 2017 20:32:30 +0200 Message-Id: <1497897167-14556-252-git-send-email-w@1wt.eu> X-Mailer: git-send-email 2.8.0.rc2.1.gbe9624a In-Reply-To: <1497897167-14556-1-git-send-email-w@1wt.eu> References: <1497897167-14556-1-git-send-email-w@1wt.eu> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Arnd Bergmann commit 48dc5fb3ba53b20418de8514700f63d88c5de3a3 upstream. The driver reads a value from hfa384x_from_bap(), which may fail, and then assigns the value to a local variable. gcc detects that in in the failure case, the 'rlen' variable now contains uninitialized data: In file included from ../drivers/net/wireless/intersil/hostap/hostap_pci.c:220:0: drivers/net/wireless/intersil/hostap/hostap_hw.c: In function 'hfa384x_get_rid': drivers/net/wireless/intersil/hostap/hostap_hw.c:842:5: warning: 'rec' may be used uninitialized in this function [-Wmaybe-uninitialized] if (le16_to_cpu(rec.len) == 0) { This restructures the function as suggested by Russell King, to make it more readable and get more reliable error handling, by handling each failure mode using a goto. Signed-off-by: Arnd Bergmann Signed-off-by: Kalle Valo Signed-off-by: Willy Tarreau --- drivers/net/wireless/hostap/hostap_hw.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) -- 2.8.0.rc2.1.gbe9624a diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c index 6307a4e..f863900 100644 --- a/drivers/net/wireless/hostap/hostap_hw.c +++ b/drivers/net/wireless/hostap/hostap_hw.c @@ -836,25 +836,30 @@ static int hfa384x_get_rid(struct net_device *dev, u16 rid, void *buf, int len, spin_lock_bh(&local->baplock); res = hfa384x_setup_bap(dev, BAP0, rid, 0); - if (!res) - res = hfa384x_from_bap(dev, BAP0, &rec, sizeof(rec)); + if (res) + goto unlock; + + res = hfa384x_from_bap(dev, BAP0, &rec, sizeof(rec)); + if (res) + goto unlock; if (le16_to_cpu(rec.len) == 0) { /* RID not available */ res = -ENODATA; + goto unlock; } rlen = (le16_to_cpu(rec.len) - 1) * 2; - if (!res && exact_len && rlen != len) { + if (exact_len && rlen != len) { printk(KERN_DEBUG "%s: hfa384x_get_rid - RID len mismatch: " "rid=0x%04x, len=%d (expected %d)\n", dev->name, rid, rlen, len); res = -ENODATA; } - if (!res) - res = hfa384x_from_bap(dev, BAP0, buf, len); + res = hfa384x_from_bap(dev, BAP0, buf, len); +unlock: spin_unlock_bh(&local->baplock); mutex_unlock(&local->rid_bap_mtx);