Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2082689imu; Wed, 28 Nov 2018 22:04:40 -0800 (PST) X-Google-Smtp-Source: AFSGD/V9tvUqwRIjH+boU2CvQSCoYQxKuXpbsMLIubZoTFUZL0XeYAnVjx0RfwkyyAtyLe8zR3Wh X-Received: by 2002:a17:902:a50a:: with SMTP id s10mr200344plq.278.1543471480923; Wed, 28 Nov 2018 22:04:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543471480; cv=none; d=google.com; s=arc-20160816; b=CNnMIOvxGA/1X29qn5Ls04bNYx3J5Y4C61uoDrgyQ+BBBZCxPqkZmksdojmSVm1eU5 JfVYj9DeLMxEiQqbFQid6lZQ25gmeWg5QHJv7OUIAbbhNcfjzYgyRiJZYKetREkXLzPN LvK5NqtG49SSy6EPK2prWm1t4Fnlvh612JZeHWXRBLn2VcFY2GrAhQ5MvdbMB6OoV/G6 N1V1lfjO820HeQ8XS7kccBF4lySHbKyWZow4FkQyap64AoJ3Z/pefZcliyumzlPZ7XLL vjT99vDkP464y/+WQssAr/1aVvhNGl/kAE9OEUdT7OcJGxFG1am8Jw/Vlm3CZsLbUyqs FGJg== 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=w5Tmh9d4cUYMp8b/gOVZZRD9hFVcK1e5JoWG69nmFvk=; b=vLUpaQsr4BDbbcBE48Vdr4g6i02ktjuVZmUVzE2UlpQpyYQJDFNjXs6aSV8nYT1r51 vy8+od+DlAw1+PIMbEWYOiZWcVkbJ/spa1feh1T5eL/4F1gHj2ByaXdP2MxJQTATQFSE Uv9kY3GBfRz0fwPBWSjMWZRNQKPfLH/imqug58RFRgML2fRa63piBQdTfelCozmmfFmG NZOEyPx/lr1rehrcsXbbaTLdX81P56VduPEGMo4c76GObgXGy0GFgNRPJSvScKdkl2v6 phQAo+z4tTK+vymTIaDv0MGf9x5mBT5J9uP5XXtZbWkIxzsAS1tE921F07zc0x3+FVH3 x1dw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dArobZo+; 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 d2-v6si1170426pfa.150.2018.11.28.22.04.26; Wed, 28 Nov 2018 22:04: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=dArobZo+; 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 S1729465AbeK2RGA (ORCPT + 99 others); Thu, 29 Nov 2018 12:06:00 -0500 Received: from mail.kernel.org ([198.145.29.99]:41702 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727767AbeK2RF7 (ORCPT ); Thu, 29 Nov 2018 12:05:59 -0500 Received: from sasha-vm.mshome.net (unknown [37.142.5.207]) (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 9560821104; Thu, 29 Nov 2018 06:01:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543471308; bh=3pjTNHMSJIv3ge0q4+UT4yfiTSzTxwDGpR82iYL29Ro=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dArobZo+xJYjhscaGMshJCAlRGDJw/3LOdbDi98C92rDgXu29AaB20f2jAtvbr1jW k2KTZO2xKe6bp1BsmO9diHqm+h0g269Os54/aLd2ngeOEgL1qQMzvVMl3wLKmPyGB1 tLXDMt7a3FvdGn64R7DpFw0FoihHCw+SnXAK+JhQ= From: Sasha Levin To: stable@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Sven Eckelmann , Simon Wunderlich , Sasha Levin , netdev@vger.kernel.org Subject: [PATCH AUTOSEL 4.14 08/35] batman-adv: Use explicit tvlv padding for ELP packets Date: Thu, 29 Nov 2018 01:00:42 -0500 Message-Id: <20181129060110.159878-8-sashal@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181129060110.159878-1-sashal@kernel.org> References: <20181129060110.159878-1-sashal@kernel.org> 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: Sven Eckelmann [ Upstream commit f4156f9656feac21f4de712fac94fae964c5d402 ] The announcement messages of batman-adv COMPAT_VERSION 15 have the possibility to announce additional information via a dynamic TVLV part. This part is optional for the ELP packets and currently not parsed by the Linux implementation. Still out-of-tree versions are using it to transport things like neighbor hashes to optimize the rebroadcast behavior. Since the ELP broadcast packets are smaller than the minimal ethernet packet, it often has to be padded. This is often done (as specified in RFC894) with octets of zero and thus work perfectly fine with the TVLV part (making it a zero length and thus empty). But not all ethernet compatible hardware seems to follow this advice. To avoid ambiguous situations when parsing the TVLV header, just force the 4 bytes (TVLV length + padding) after the required ELP header to zero. Fixes: d6f94d91f766 ("batman-adv: ELP - adding basic infrastructure") Reported-by: Linus Lüssing Signed-off-by: Sven Eckelmann Signed-off-by: Simon Wunderlich Signed-off-by: Sasha Levin --- net/batman-adv/bat_v_elp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index e92dfedccc16..fbc132f4670e 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c @@ -338,19 +338,21 @@ static void batadv_v_elp_periodic_work(struct work_struct *work) */ int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface) { + static const size_t tvlv_padding = sizeof(__be32); struct batadv_elp_packet *elp_packet; unsigned char *elp_buff; u32 random_seqno; size_t size; int res = -ENOMEM; - size = ETH_HLEN + NET_IP_ALIGN + BATADV_ELP_HLEN; + size = ETH_HLEN + NET_IP_ALIGN + BATADV_ELP_HLEN + tvlv_padding; hard_iface->bat_v.elp_skb = dev_alloc_skb(size); if (!hard_iface->bat_v.elp_skb) goto out; skb_reserve(hard_iface->bat_v.elp_skb, ETH_HLEN + NET_IP_ALIGN); - elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb, BATADV_ELP_HLEN); + elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb, + BATADV_ELP_HLEN + tvlv_padding); elp_packet = (struct batadv_elp_packet *)elp_buff; elp_packet->packet_type = BATADV_ELP; -- 2.17.1