Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp2263303ybg; Sun, 27 Oct 2019 14:42:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqz3RnstnH96Lqhu+Cx5CbJLge3Nb7n9LB6sMySm5VePSWD4XssDDd8TMRoXg6B2nI07O5eQ X-Received: by 2002:a17:906:4813:: with SMTP id w19mr13963948ejq.258.1572212525715; Sun, 27 Oct 2019 14:42:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572212525; cv=none; d=google.com; s=arc-20160816; b=E+kYE5Mt8UcF/oL1xLpCUYJuqhZ3HpqOJ5QZSm9+K2xL5OdFkFGOYbayfbNOyl/f7Q ELXDUaDaIx+6sayIgamABIp7iR3awkS90T2tj7Uk6I7FAgLXto6LkNhCGF3z0LPDOFAT hXeIf3WIVKXwnyVgJCE2xgo0RldnRrLCeachpZwl6hCbXOHRBGwapRo6PBaO5GNaIzNS W3RbTW0D0HEHZkTBWqGJX1wsvX1pz+j5h2VQ1wz5Yr18k67JvlVeoE3IcH9uRdPyz8wA zwL+23/zX9N/OFEDybl5yB5X9K/DPN7pHsRHfDD0oj+YG9JkpGUI9v6OUYx0BA+kN/wT VUfA== 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=Nb7rb8VQLQ2C4aBlQlVlTwCrcN7cB/ViBUyRndu4mAY=; b=uzHveRjpzDyHTJv2bT5O5i5wReyluPR/4Iq7eqKDlyLtPQ8gNvudLLV3VhlnSXBqsw ocDxvqwmO8DFOeELTLCse3Lee2LnBeDXfzPTRMSrFLyiH9jQlnW+WBIEoTTJjLMPSPYy ErkbNOVvy8UiVKFcPHh5XQWKO+OO3SPSuXwFOU4NTBoHB/4jFxRw9G6sZ5XErFY/oD6N oh6m/xfUcDPYGLSW7Vwv2QzTfLT/UIs6bE4IpCxg0xMKj7GL55e3jxA1IIEQyp0SRwOm 09A68siZvfOmyYSj+H/sAF8LZUdp0rsMwEluFAa9Kf+OBw+0048Krtd8fJOwHKWn7HlV EWvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=V5MFZTxo; 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 w32si6120439edc.443.2019.10.27.14.41.42; Sun, 27 Oct 2019 14:42:05 -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=V5MFZTxo; 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 S1727717AbfJ0VEF (ORCPT + 99 others); Sun, 27 Oct 2019 17:04:05 -0400 Received: from mail.kernel.org ([198.145.29.99]:49518 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727572AbfJ0VED (ORCPT ); Sun, 27 Oct 2019 17:04:03 -0400 Received: from localhost (100.50.158.77.rev.sfr.net [77.158.50.100]) (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 02FAB208C0; Sun, 27 Oct 2019 21:04:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572210242; bh=uowiTPItwsRrmuICZPSjEomKfgT65K0+Y34I2IFq3jw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=V5MFZTxotCQwSS1QgKxavccoXW5lgPv7hDSyWDqY4wb8u6Lfv74tknV++SBDnQQq4 dQA6F/8v9NADy47wpAiECWUrBAZz7jE4IIR7EbWYQcRMnTQD5VAitIKByVEF8PMrkg h1EJQnJs/Qxa3jSiDS3yNNGcKqNFli9z5dr/6v3k= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Al Viro , Jamal Hadi Salim , Cong Wang , Jiri Pirko , "David S. Miller" , netdev@vger.kernel.org, Kees Cook , Zubin Mithra Subject: [PATCH 4.4 40/41] net: sched: Fix memory exposure from short TCA_U32_SEL Date: Sun, 27 Oct 2019 22:01:18 +0100 Message-Id: <20191027203136.357413424@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191027203056.220821342@linuxfoundation.org> References: <20191027203056.220821342@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: Kees Cook commit 98c8f125fd8a6240ea343c1aa50a1be9047791b8 upstream. Via u32_change(), TCA_U32_SEL has an unspecified type in the netlink policy, so max length isn't enforced, only minimum. This means nkeys (from userspace) was being trusted without checking the actual size of nla_len(), which could lead to a memory over-read, and ultimately an exposure via a call to u32_dump(). Reachability is CAP_NET_ADMIN within a namespace. Reported-by: Al Viro Cc: Jamal Hadi Salim Cc: Cong Wang Cc: Jiri Pirko Cc: "David S. Miller" Cc: netdev@vger.kernel.org Signed-off-by: Kees Cook Acked-by: Jamal Hadi Salim Signed-off-by: David S. Miller Signed-off-by: Zubin Mithra Signed-off-by: Greg Kroah-Hartman --- net/sched/cls_u32.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -734,6 +734,7 @@ static int u32_change(struct net *net, s struct nlattr *opt = tca[TCA_OPTIONS]; struct nlattr *tb[TCA_U32_MAX + 1]; u32 htid; + size_t sel_size; int err; #ifdef CONFIG_CLS_U32_PERF size_t size; @@ -827,8 +828,11 @@ static int u32_change(struct net *net, s return -EINVAL; s = nla_data(tb[TCA_U32_SEL]); + sel_size = sizeof(*s) + sizeof(*s->keys) * s->nkeys; + if (nla_len(tb[TCA_U32_SEL]) < sel_size) + return -EINVAL; - n = kzalloc(sizeof(*n) + s->nkeys*sizeof(struct tc_u32_key), GFP_KERNEL); + n = kzalloc(offsetof(typeof(*n), sel) + sel_size, GFP_KERNEL); if (n == NULL) return -ENOBUFS; @@ -841,7 +845,7 @@ static int u32_change(struct net *net, s } #endif - memcpy(&n->sel, s, sizeof(*s) + s->nkeys*sizeof(struct tc_u32_key)); + memcpy(&n->sel, s, sel_size); RCU_INIT_POINTER(n->ht_up, ht); n->handle = handle; n->fshift = s->hmask ? ffs(ntohl(s->hmask)) - 1 : 0;