Received: by 2002:a17:90a:88:0:0:0:0 with SMTP id a8csp34668pja; Fri, 22 Nov 2019 03:06:40 -0800 (PST) X-Google-Smtp-Source: APXvYqxI7b+G4KQA+2DEI5n/vEsD7bi4hC/NKPNwR25FbYxAAgInHh3J5v5J4/xVLZkl7JV0iWmx X-Received: by 2002:a17:906:76cf:: with SMTP id q15mr4269608ejn.247.1574420800859; Fri, 22 Nov 2019 03:06:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574420800; cv=none; d=google.com; s=arc-20160816; b=JYLNbakis0P3YX5KwC0lELppepz+x6rGhV5kr8qDu58USSwjfK8/9Mv4P+qOKAZjnC 6jgDUzl1KH138OqxItlNCZmBv88m68pwwpHmf6ag/ZdQ/SkLcUDHGrhe5UKj93CzvJAE O7EnhU42aZmPCoilqubUkneocw0CxAOMVmH1KVsWGoAHGz3FH05HYkgEpmh9HR5o2Tku v0AlJFokNT69PkJYj0iM/9u/e7rTfsIbUpYMyrabxwPEbynrxAfqsUcKbMg7tjnPhkmF xKZgfYumQCh8kbe/D+bHndTeaC6QfDVk9Yt4rs9rVe18nAw35Gb2UrwbgWQCXsLo48rJ oewQ== 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=Ju8baz7GkodbH+3i8Vd33O1biGkA0vdL+d8cN+dcgOk=; b=Zy8y82FCo9MEPk4qAelqjBJyDB08pSbUIE+6gEKlcGVxSIW2ePkGubJOURj5w+GfR6 6+x83ktly4zpzZAIeSsNRwyYZLpWF9PI967hPmIZGcDEftrsx9kfhtEln7V1ZEqMAHAi CI2avU7ZY6LoUgGgxYd9LFEjsVUVOOSW5OnWlWu9GBqUftwKXC9ifDWvkYQJX7R+SvtR fYc1kNFsFUiusCgpvCSfpdXEyON/Oc4VYqW2OIXasvzlNuNfI5ol+w0wvV4UE3pTFDSI IFEa1Cu2Hw9uQV1//7LHKbRI5yatQoZMAuSCWnxeU5/lwCIcANjimQP3l3r8aQxvRu4P zlAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Z4KbDFC6; 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 c10si4586263eda.284.2019.11.22.03.06.16; Fri, 22 Nov 2019 03:06:40 -0800 (PST) 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=Z4KbDFC6; 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 S1730667AbfKVLEk (ORCPT + 99 others); Fri, 22 Nov 2019 06:04:40 -0500 Received: from mail.kernel.org ([198.145.29.99]:59710 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731579AbfKVLEh (ORCPT ); Fri, 22 Nov 2019 06:04:37 -0500 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 812BC20840; Fri, 22 Nov 2019 11:04:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574420677; bh=2mZNh7vjMLJ8VzjcNt4mAP3gxaWYiCtdp11s1HXRELc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z4KbDFC6YuuIS9TPRRYYPTcvf7ChlrkfW3D0MG4tm0WzhwnJeTURykEmD8Vf2xIRw DHJ6VS8P3N+YRXGTR7YVhYeFoXTIDCdKrpjRrhtl9hfv3YJSBrtxOPVv5gqQ6vB+xP 15dydPuzbxKfZihscMfMsHm8LrGct2CDrBtFHL1w= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wenwen Wang , Song Liu , Alexei Starovoitov , Sasha Levin Subject: [PATCH 4.19 188/220] bpf: btf: Fix a missing check bug Date: Fri, 22 Nov 2019 11:29:13 +0100 Message-Id: <20191122100927.690308335@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191122100912.732983531@linuxfoundation.org> References: <20191122100912.732983531@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: Wenwen Wang [ Upstream commit 8af03d1ae2e154a8be3631e8694b87007e1bdbc2 ] In btf_parse_hdr(), the length of the btf data header is firstly copied from the user space to 'hdr_len' and checked to see whether it is larger than 'btf_data_size'. If yes, an error code EINVAL is returned. Otherwise, the whole header is copied again from the user space to 'btf->hdr'. However, after the second copy, there is no check between 'btf->hdr->hdr_len' and 'hdr_len' to confirm that the two copies get the same value. Given that the btf data is in the user space, a malicious user can race to change the data between the two copies. By doing so, the user can provide malicious data to the kernel and cause undefined behavior. This patch adds a necessary check after the second copy, to make sure 'btf->hdr->hdr_len' has the same value as 'hdr_len'. Otherwise, an error code EINVAL will be returned. Signed-off-by: Wenwen Wang Acked-by: Song Liu Signed-off-by: Alexei Starovoitov Signed-off-by: Sasha Levin --- kernel/bpf/btf.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 138f0302692ec..378cef70341c4 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -2114,6 +2114,9 @@ static int btf_parse_hdr(struct btf_verifier_env *env, void __user *btf_data, hdr = &btf->hdr; + if (hdr->hdr_len != hdr_len) + return -EINVAL; + btf_verifier_log_hdr(env, btf_data_size); if (hdr->magic != BTF_MAGIC) { -- 2.20.1