Received: by 2002:a25:b323:0:0:0:0:0 with SMTP id l35csp356156ybj; Thu, 19 Sep 2019 15:38:50 -0700 (PDT) X-Google-Smtp-Source: APXvYqzYaUmxrmMbPAKLMgePANqGRIYwN7yCWvjIrsA2IPbCEJc8w3iFKnkGC79vDo0lXyAlkAcX X-Received: by 2002:aa7:dc55:: with SMTP id g21mr14914703edu.210.1568932730395; Thu, 19 Sep 2019 15:38:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568932730; cv=none; d=google.com; s=arc-20160816; b=lIcObi84VAZzvjfijwKMm0GgnpjGqt5r3we3TUBjjRX74vW1I1J/vMByZcst2DBpom ZOkBDji5Qx+pew1gmaTxbLFcP1l2j3RKKlnaJvudMB6qWBbGM4Lp8jaHXkuBId7s5l+N dCYw4kizdK76HOL8XdOp9meX6CRC8m4mxmTa3qGrXfqZ9FqZwnJcbpijgkCG2h1oht5o D14gXCMDLgVEAKk4zW6FC0G8G8IKjRxrlL82kQ80fNX8k1NSS5fEkj67pUObXg8kjt88 BoWcaiG3iFki1j7Hpgh2mxb6e3Gn+QJk4ti18IGCEUqd+uLadZIi1BZ2JkXfoXkH5BUO o7mg== 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:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=cRQRUx6rMVDugd8azq+OrEAz3UoT/y71HHxIvUV78As=; b=EQZDxCl8MFZeMX5Ace3j8NVV3OVAwENFUuE/1FV48TF5gllGR01TDLHqJMFXlaN1Y5 l2J5CW7x4vA7xfNvkLhXAdUkwP4/pzDc+DsnNOOv7NZhneERbkyqPz+U+Njx6BiegToH TRmMS5dsxvgCYAQXFhUNH0izv4PEkeRICSMXVUdOR/Cg1POTKZ3cLsP7A36PN4xmoakw 4mDeeThHE15CHexKfHbuP8Yq6GSKZyLe5JFppJBYQtYM8N6hHf3NWI3i7bGy7pVkz94S Y+K7nBzPLIzWG88Fcju0DlW6nNzeEccuPt1Rl6695/b8aOES13ossWSu5hRJj/X0EAmk E3XQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=NoPzogLP; 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 f21si94576eda.216.2019.09.19.15.38.27; Thu, 19 Sep 2019 15:38:50 -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=@kernel.org header.s=default header.b=NoPzogLP; 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 S2436533AbfISW1B (ORCPT + 99 others); Thu, 19 Sep 2019 18:27:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:36072 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2394053AbfISWVc (ORCPT ); Thu, 19 Sep 2019 18:21:32 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6FA2E217D6; Thu, 19 Sep 2019 22:21:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568931692; bh=rO2RwMACkUszNANNxDC6D0TMvE+3mD6LeC2S+2w5DLs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NoPzogLPgMGeD4m+PpwJpqsvodTbRo3vM2j8v9uZtOADW1jsa+1bljNx58LXg+B8x Pe0YqOFJ8Wzce7m0/vGdOZErz4h8eO5DIhw7pJ0brgbmE1FIEOBroe+KvZ17+Qp6bz w6iSdQJebK8EQNenN8oP4wWX1JCH5S8dfWTVs4cw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wen Huang , Ganapathi Bhat , Kalle Valo Subject: [PATCH 4.9 43/74] mwifiex: Fix three heap overflow at parsing element in cfg80211_ap_settings Date: Fri, 20 Sep 2019 00:03:56 +0200 Message-Id: <20190919214809.018619144@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190919214800.519074117@linuxfoundation.org> References: <20190919214800.519074117@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wen Huang commit 7caac62ed598a196d6ddf8d9c121e12e082cac3a upstream. mwifiex_update_vs_ie(),mwifiex_set_uap_rates() and mwifiex_set_wmm_params() call memcpy() without checking the destination size.Since the source is given from user-space, this may trigger a heap buffer overflow. Fix them by putting the length check before performing memcpy(). This fix addresses CVE-2019-14814,CVE-2019-14815,CVE-2019-14816. Signed-off-by: Wen Huang Acked-by: Ganapathi Bhat Signed-off-by: Kalle Valo Signed-off-by: Greg Kroah-Hartman --- drivers/net/wireless/marvell/mwifiex/ie.c | 3 +++ drivers/net/wireless/marvell/mwifiex/uap_cmd.c | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) --- a/drivers/net/wireless/marvell/mwifiex/ie.c +++ b/drivers/net/wireless/marvell/mwifiex/ie.c @@ -240,6 +240,9 @@ static int mwifiex_update_vs_ie(const u8 } vs_ie = (struct ieee_types_header *)vendor_ie; + if (le16_to_cpu(ie->ie_length) + vs_ie->len + 2 > + IEEE_MAX_IE_SIZE) + return -EINVAL; memcpy(ie->ie_buffer + le16_to_cpu(ie->ie_length), vs_ie, vs_ie->len + 2); le16_add_cpu(&ie->ie_length, vs_ie->len + 2); --- a/drivers/net/wireless/marvell/mwifiex/uap_cmd.c +++ b/drivers/net/wireless/marvell/mwifiex/uap_cmd.c @@ -287,6 +287,8 @@ mwifiex_set_uap_rates(struct mwifiex_uap rate_ie = (void *)cfg80211_find_ie(WLAN_EID_SUPP_RATES, var_pos, len); if (rate_ie) { + if (rate_ie->len > MWIFIEX_SUPPORTED_RATES) + return; memcpy(bss_cfg->rates, rate_ie + 1, rate_ie->len); rate_len = rate_ie->len; } @@ -294,8 +296,11 @@ mwifiex_set_uap_rates(struct mwifiex_uap rate_ie = (void *)cfg80211_find_ie(WLAN_EID_EXT_SUPP_RATES, params->beacon.tail, params->beacon.tail_len); - if (rate_ie) + if (rate_ie) { + if (rate_ie->len > MWIFIEX_SUPPORTED_RATES - rate_len) + return; memcpy(bss_cfg->rates + rate_len, rate_ie + 1, rate_ie->len); + } return; } @@ -413,6 +418,8 @@ mwifiex_set_wmm_params(struct mwifiex_pr params->beacon.tail_len); if (vendor_ie) { wmm_ie = (struct ieee_types_header *)vendor_ie; + if (*(vendor_ie + 1) > sizeof(struct mwifiex_types_wmm_info)) + return; memcpy(&bss_cfg->wmm_info, wmm_ie + 1, sizeof(bss_cfg->wmm_info)); priv->wmm_enabled = 1;