Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8045679ybl; Thu, 16 Jan 2020 09:41:56 -0800 (PST) X-Google-Smtp-Source: APXvYqws1Guh+qNzVX8uOsFuHm4QoX4BPrkuocXJ+NS9MY2HOdzaNW8AtNMUoCulAgNkMEPA5X+A X-Received: by 2002:a9d:7984:: with SMTP id h4mr3047291otm.297.1579196516584; Thu, 16 Jan 2020 09:41:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579196516; cv=none; d=google.com; s=arc-20160816; b=b+hvxTyg2pK0DXWA9jFr6Tqck0iU7bRb0eQUe2oEow8DlBxrODVWhXs/GqjtQsdIxv uik6aGvvMjfX34A6o0luo1U+2NU9d/cfJJX45jDxjmtnG+39EsXnPRGfzLUKFPNZUqvD mr7PQUMzYZ09bwML13KZ6VEewEucpGC6APneVf5KSN45Ci1ODCVUrbiEKx9EKOO9qU11 T+G0c6i0YaKtnWf3cLdGInLrDSTpAHHW0/L1zet6gyHyLP3xrXALfoWfLCN8akE0nj+/ /U2z2CUJVYV+vW2I9HFVoNn5stWuycY0sdoGfFPJEa54PjY38PxMEhxdNBRRTtYJONU7 O9+g== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HaTJWWiPBowd/KGqgz2D+3gl2yYm9/Bhu+UNQjaODeQ=; b=vJ0iHdcfSm6zQUZUVsJd0gnAucIBC7D0IWlxupQhyLUlDom+xvih7giVStwujcb/iQ jXwUYZ0hBrPpy4+W5jwBZqlHyMWRKv5mIxezp6//Y7l3+PyW8lP0Y2bwkhEbfLkbalUy UVsIhTWP2B5g2AG8xcRWQa84aOidi6Zi4L/ZypSGGMQLTUKbr/K316ecTfATK06sl+5n yqM0281jiK2Io0OZasJ5sRj23YugTnyzrD5MLI9UyUyuYc01L90iUAD7Uc5CRVvY3Wwd FnNb1nEsIPUrjv61BN1hYmwD2IdmHbcMI2Ujku5cIIPpNR6bfGm0QSZ+O3kldr6kWid1 UcQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=jDaIfLWv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k9si12512740oih.157.2020.01.16.09.41.44; Thu, 16 Jan 2020 09:41:56 -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=jDaIfLWv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730242AbgAPRj2 (ORCPT + 99 others); Thu, 16 Jan 2020 12:39:28 -0500 Received: from mail.kernel.org ([198.145.29.99]:54584 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730736AbgAPRij (ORCPT ); Thu, 16 Jan 2020 12:38:39 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A3E6724700; Thu, 16 Jan 2020 17:38:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579196319; bh=Co41Z/wBvzHDblLd0WWZn9h+FN45ex3ykUseQ0plszg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jDaIfLWveEo9Xbb1ZjBlpJaqXTTvSVB/UBk3a8bYhliMT7l2afwHCtUNfYtvZMLXM kBCBy4BrE1mdanXeO4hCTRZiWmO1okpWaOyhJ0gmcNxaqBkZXTaxuPQS2A74dqP5hK HUhY+rgQyxW5/bs2yllfJZrKw6BYgRMdkAJbD8Y0= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Willem de Bruijn , David Laight , "David S . Miller" , Sasha Levin , netdev@vger.kernel.org Subject: [PATCH AUTOSEL 4.9 123/251] packet: in recvmsg msg_name return at least sizeof sockaddr_ll Date: Thu, 16 Jan 2020 12:34:32 -0500 Message-Id: <20200116173641.22137-83-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116173641.22137-1-sashal@kernel.org> References: <20200116173641.22137-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Willem de Bruijn [ Upstream commit b2cf86e1563e33a14a1c69b3e508d15dc12f804c ] Packet send checks that msg_name is at least sizeof sockaddr_ll. Packet recv must return at least this length, so that its output can be passed unmodified to packet send. This ceased to be true since adding support for lladdr longer than sll_addr. Since, the return value uses true address length. Always return at least sizeof sockaddr_ll, even if address length is shorter. Zero the padding bytes. Change v1->v2: do not overwrite zeroed padding again. use copy_len. Fixes: 0fb375fb9b93 ("[AF_PACKET]: Allow for > 8 byte hardware addresses.") Suggested-by: David Laight Signed-off-by: Willem de Bruijn Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- net/packet/af_packet.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 40cade140222..47a862cc7b34 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -3404,20 +3404,29 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, sock_recv_ts_and_drops(msg, sk, skb); if (msg->msg_name) { + int copy_len; + /* If the address length field is there to be filled * in, we fill it in now. */ if (sock->type == SOCK_PACKET) { __sockaddr_check_size(sizeof(struct sockaddr_pkt)); msg->msg_namelen = sizeof(struct sockaddr_pkt); + copy_len = msg->msg_namelen; } else { struct sockaddr_ll *sll = &PACKET_SKB_CB(skb)->sa.ll; msg->msg_namelen = sll->sll_halen + offsetof(struct sockaddr_ll, sll_addr); + copy_len = msg->msg_namelen; + if (msg->msg_namelen < sizeof(struct sockaddr_ll)) { + memset(msg->msg_name + + offsetof(struct sockaddr_ll, sll_addr), + 0, sizeof(sll->sll_addr)); + msg->msg_namelen = sizeof(struct sockaddr_ll); + } } - memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa, - msg->msg_namelen); + memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa, copy_len); } if (pkt_sk(sk)->auxdata) { -- 2.20.1