From patchwork Fri May 5 19:47:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 98704 Delivered-To: patch@linaro.org Received: by 10.140.96.100 with SMTP id j91csp292931qge; Fri, 5 May 2017 12:48:54 -0700 (PDT) X-Received: by 10.84.128.47 with SMTP id 44mr66811741pla.35.1494013734478; Fri, 05 May 2017 12:48:54 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n5si2698005pgk.367.2017.05.05.12.48.54; Fri, 05 May 2017 12:48:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-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 stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755870AbdEETsw (ORCPT + 6 others); Fri, 5 May 2017 15:48:52 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:55746 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755707AbdEETsi (ORCPT ); Fri, 5 May 2017 15:48:38 -0400 Received: from wuerfel.lan ([78.42.17.5]) by mrelayeu.kundenserver.de (mreue002 [212.227.15.129]) with ESMTPA (Nemesis) id 0MTbOB-1dWoHr00cp-00SNR4; Fri, 05 May 2017 21:48:28 +0200 From: Arnd Bergmann To: Ben Hutchings Cc: stable@vger.kernel.org, Arnd Bergmann , Kalle Valo Subject: [PATCH 3.16-stable 56/87] hostap: avoid uninitialized variable use in hfa384x_get_rid Date: Fri, 5 May 2017 21:47:14 +0200 Message-Id: <20170505194745.3627137-57-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20170505194745.3627137-1-arnd@arndb.de> References: <20170505194745.3627137-1-arnd@arndb.de> X-Provags-ID: V03:K0:wQgkpkWTFRatR/RStdwEN/8UySQelDpcJ/03jLaDGnHauzdlkdN 5TUevJpLHHUVWnsXVHyTKEdmZbVgGpBp9e/ObJGfYukoEIMkQmFIEBP/Ngthw3rt7XbqAu+ eWHyGQP/v0xtp6RQK/SBQIG21HNEfygACinv8Aj16RrdmYtdfDQOut82OFEQCeDOStEA55b z9wjGClyysL/bNrnLC1Kw== X-UI-Out-Filterresults: notjunk:1; V01:K0:qSOLsVNywcM=:8BMgZhnfoVXAEhbXv0tui/ s+C5czrzfOXchgdXZHPalFCWJqsKxX3CRRZAxyb5lIWA8pt5bXVM866QfvtKUzrANhs53MSNC IUCy8Fd1vT0NkKqDdMmRq0BAllY35ViZNF9tSxvO9Lcc1J5u+UFtoEj/kStEXL4QFzcyj8jil PfmQfSJmznswimWalaJCGBChpIQ0nhZWSoRZYD2LBZ0F7abwxqX6BcZLB6JWDBj3ntnr2m8zI QTK6HWEN6oZe2cwVL9+cTfDLQ1zOIN1z0PxIBV/BoygY8NJchdO94woz63oOp15DGHIQlEkM+ yA5tHPIoU5/5vcR2FR6UqkPqTCeU1ySBLquHxNbljAmf+OISluX6yzfDe7iDm2I1qiz94sHgp nr56VEsVRFKryEFXRT12C9Vxf4WXc6No9ukwP3sPUY90cl9pqjAsI/FCvteXHlG9KnvdV8782 a0IM9fWAJzmibNBEMv5W+HxZXTHr4mD0kYVvfyOcEpPnXPDiz4kthRLzW4MNCd2FIEQkg5X2P o+Jv4gnB+V5QZziY5r6o8VebBcLBXgp+e6cZiAQZoUOrozxjG2ZLxcVq2eqYxNtvssC6K2vc0 QpzDtx6kZrB2NvJ6CdgM1u5fKIKC/Y9JdmqkF+sq53ZHPtSaWN79rWFdMgLb2rQzN3wi4WhFX 2PvhUrUqSWbusohLz8PUgZz/Qy6Bmt3hepcOe5J5FE0LhG59pvlMP2XRYRGzu5LPXMaI= Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org Commit 4dc690c46508d23c143a9e8f12ebde6e11e901d6 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: Arnd Bergmann --- drivers/net/wireless/hostap/hostap_hw.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) -- 2.9.0 diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c index 6df3ee561d52..515aa3f993f3 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);