Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp244204ybi; Wed, 29 May 2019 20:31:34 -0700 (PDT) X-Google-Smtp-Source: APXvYqw5rx12BLYKtIDqtigafZkXtJyySnu18yWmmQ48uJRboSU5ysfLt7du2TmbL6eQVMsDw4LD X-Received: by 2002:a17:902:7897:: with SMTP id q23mr1654032pll.21.1559187093880; Wed, 29 May 2019 20:31:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559187093; cv=none; d=google.com; s=arc-20160816; b=GDK1mGUNkMUwBfgfsQ0cIKoj28t6KUTBMWBLbm2Cbac54h7UbFyjbLyrtTLPIQms1L rc8eTAzKjblJUDyWGoE6EF+tcPQ7S5pzlQ6QWYgsP5Lv+n9WiJMc1tprGqKOAf4fqO82 Wh3tRF1SdIUq7lj9vFico4H0y8OGD/Jp7D+4CPwaKfxkJ2iEoXLQh4vOXXjxZBVHlugt tRdRHPZtaxTNnM6K48sY8qYf3bLPZEaH6k5YZLqoZSCG7/P5CAWwvF47YJl9I2/oSGR1 a/2AkuFH69lpY0fE4eGY05HocSvz33+u0+Z1YM7P0Y7eN02qBtb8AsArx9sSBT6Ipzxl 8UCg== 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=d7QtVytz/lndNZ9NkuWaocwCEuP2PlAypJ7J6hc++VQ=; b=qrId4b0YphCctNdfYXajlT3IO67/y9QexMEpNGgUpwUzyey8yHD5YUSIkEeOQ+P6Sd Gdkm/icS7JNzG8hnYhcG7GT/Ef63U2mvoH1gTraBVI6t6f554dbekOL2YpSDp0g37G7E grR0MOMm3tDvpQr5iNfK+O9G7jvE5RtJK5vYkWRiOT5v5RUsKck/v6iSP07RVWj0x/RC bgGJdZh/zY7SQIuhYPFqyrO2sHRyz29uplpJSYQOsKl+8+6XfBlSYMPkJQ52X8t6GtRw 1T9UppqR0EI9VdUUquAIQam+24W9hGF8z5AMe3Hr/ttSaXuN5RWjlP7T4pcbvxMUlnL5 JQ0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IitRkRem; 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 g8si1948560pgd.64.2019.05.29.20.31.16; Wed, 29 May 2019 20:31:33 -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=IitRkRem; 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 S2388150AbfE3D2U (ORCPT + 99 others); Wed, 29 May 2019 23:28:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:57060 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732060AbfE3DTx (ORCPT ); Wed, 29 May 2019 23:19:53 -0400 Received: from localhost (ip67-88-213-2.z213-88-67.customer.algx.net [67.88.213.2]) (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 E1E55248DD; Thu, 30 May 2019 03:19:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559186393; bh=1l+uLQ5PpwC1pRKuZh+AeJdYqL965Z1CZfsnWZkPdWs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IitRkRem5Os5XyY1T8oxfBGN4c9wL9gXrQMfVKuhHFfsPcvncAeaVd5n/jVeKGC3p FQoaHlcDxVqtsAfJ0n9/wL+jtLCsP2AZgyfgbtySpOoXM0mytm5QNR7cLUgnl1cJjP 0GKddm5vvcF6UyJXRItLxYXpBvAWA8lQ4Mgt9C5o= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dan Carpenter , Hans Verkuil , Mauro Carvalho Chehab , Sasha Levin Subject: [PATCH 4.14 165/193] media: wl128x: prevent two potential buffer overflows Date: Wed, 29 May 2019 20:06:59 -0700 Message-Id: <20190530030511.012969660@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190530030446.953835040@linuxfoundation.org> References: <20190530030446.953835040@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 [ Upstream commit 9c2ccc324b3a6cbc865ab8b3e1a09e93d3c8ade9 ] Smatch marks skb->data as untrusted so it warns that "evt_hdr->dlen" can copy up to 255 bytes and we only have room for two bytes. Even if this comes from the firmware and we trust it, the new policy generally is just to fix it as kernel hardenning. I can't test this code so I tried to be very conservative. I considered not allowing "evt_hdr->dlen == 1" because it doesn't initialize the whole variable but in the end I decided to allow it and manually initialized "asic_id" and "asic_ver" to zero. Fixes: e8454ff7b9a4 ("[media] drivers:media:radio: wl128x: FM Driver Common sources") Signed-off-by: Dan Carpenter Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/radio/wl128x/fmdrv_common.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/media/radio/wl128x/fmdrv_common.c b/drivers/media/radio/wl128x/fmdrv_common.c index ab3428bf63fee..26895ae42fcf4 100644 --- a/drivers/media/radio/wl128x/fmdrv_common.c +++ b/drivers/media/radio/wl128x/fmdrv_common.c @@ -489,7 +489,8 @@ int fmc_send_cmd(struct fmdev *fmdev, u8 fm_op, u16 type, void *payload, return -EIO; } /* Send response data to caller */ - if (response != NULL && response_len != NULL && evt_hdr->dlen) { + if (response != NULL && response_len != NULL && evt_hdr->dlen && + evt_hdr->dlen <= payload_len) { /* Skip header info and copy only response data */ skb_pull(skb, sizeof(struct fm_event_msg_hdr)); memcpy(response, skb->data, evt_hdr->dlen); @@ -583,6 +584,8 @@ static void fm_irq_handle_flag_getcmd_resp(struct fmdev *fmdev) return; fm_evt_hdr = (void *)skb->data; + if (fm_evt_hdr->dlen > sizeof(fmdev->irq_info.flag)) + return; /* Skip header info and copy only response data */ skb_pull(skb, sizeof(struct fm_event_msg_hdr)); @@ -1308,7 +1311,7 @@ static int load_default_rx_configuration(struct fmdev *fmdev) static int fm_power_up(struct fmdev *fmdev, u8 mode) { u16 payload; - __be16 asic_id, asic_ver; + __be16 asic_id = 0, asic_ver = 0; int resp_len, ret; u8 fw_name[50]; -- 2.20.1