Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2197569imm; Mon, 28 May 2018 03:45:16 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJkyQ931AJZor32jKOzzCZOHn2dffIY+VyA8o9o1Qhv9ig/tNwZSL6efJ7UaaWraWWMzqB9 X-Received: by 2002:a65:5ac9:: with SMTP id d9-v6mr5787916pgt.238.1527504316765; Mon, 28 May 2018 03:45:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527504316; cv=none; d=google.com; s=arc-20160816; b=mKgxFCiVnVDWCJmngjs68mBohINJ4fGbTClVvtbYM5HQowTCZPIradJEm6TA+cCnjz ww98EDfDmTeyuF2gfFHoUQ/g3MbnOiwhYx+SE8JjXhQHL5kLrVVH6YV94dCj+7EjZ0Vm hI2nzOzCAo5vGhMNJV6s+xtGACKhUb1FnAzdARwIsDtxNjuYcfvHmL1MXvKWGv5zQxUY /TV3xbJnDo/6mUzqq0lEm9e+LdWZfBt73KKnrhYN8VZ3rX73GDIlu34OUjnvJ0LBjq6t uV+hkdgYRABwSUia3eGt4EeK4kILrIruesy70xhhOSXTJumvkk8s5OElSI3dFFGAuF/k GVVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=6kOZHozV+AYvP5WCjkvkWxMCHcqsOSYIDVu07eiOS4s=; b=VgpsGGQAz2R7BJFTwb9i3qRgownYw4VuwL3yE+Ha1fGi4Ch6NGWH3ZPn4AoUNuhhQ/ S75SgDzV8q8GYYbggMox/+8mSjxsc3X/wsTK/bv6E8xiUQb+aEi1fUb8ZU+0HoiGqIuI XxNNM4FrsJ/OlL1taK/w/s0kbHeaOmpcjeDPfHbiavQwVYo2Hii5z5IjGi6h3AyeTWtH eZbFh5/G+u7uozWuB27wUvk87PPpX9I/MjvkVvLmzvwsR4bqLSPXu7+7r7bnI2CQVzyo 4WWzeWwKd3xZrk1I2NINKH5luHQRopCZETkzfPJbm0t+fzonvGkeZB+3kLSsbpXMN8fl E3Vw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kyTfUK3R; 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 m13-v6si23698535pgp.542.2018.05.28.03.45.01; Mon, 28 May 2018 03:45:16 -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=kyTfUK3R; 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 S937618AbeE1Knp (ORCPT + 99 others); Mon, 28 May 2018 06:43:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:34632 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S937415AbeE1Knl (ORCPT ); Mon, 28 May 2018 06:43:41 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (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 5F29E2086D; Mon, 28 May 2018 10:43:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527504220; bh=yKJaA8v9PkSzGK1Q2sdWCiRGaSscDaBY8wURGMwnFMw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kyTfUK3R5eHAF8Hz0RCnMzQL2gidJ4qtbEF2nwahU5otnZFXaWEZ5w8gAw1d8t4u9 YdnW0FDz/ErjR08JvlW34C5UHuH/tCAIEgnezbAhAHC7tAaP9e5LEmW967zD8+xWBQ 7uP7VAJe8den644Vo9uDZKq6Mchk6XZ4O+fqqEsE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Peter Oh , Johannes Berg , Sasha Levin Subject: [PATCH 4.14 058/496] mac80211: mesh: fix wrong mesh TTL offset calculation Date: Mon, 28 May 2018 11:57:23 +0200 Message-Id: <20180528100322.244313412@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100319.498712256@linuxfoundation.org> References: <20180528100319.498712256@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Peter Oh [ Upstream commit c4de37ee2b55deac7d6aeac33e02e3d6be243898 ] mesh TTL offset in Mesh Channel Switch Parameters element depends on not only Secondary Channel Offset element, but also affected by HT Control field and Wide Bandwidth Channel Switch element. So use element structure to manipulate mesh channel swich param IE after removing its constant attribution to correct the miscalculation. Signed-off-by: Peter Oh Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- net/mac80211/ieee80211_i.h | 2 +- net/mac80211/mesh.c | 17 ++++++----------- 2 files changed, 7 insertions(+), 12 deletions(-) --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -1466,7 +1466,7 @@ struct ieee802_11_elems { const struct ieee80211_timeout_interval_ie *timeout_int; const u8 *opmode_notif; const struct ieee80211_sec_chan_offs_ie *sec_chan_offs; - const struct ieee80211_mesh_chansw_params_ie *mesh_chansw_params_ie; + struct ieee80211_mesh_chansw_params_ie *mesh_chansw_params_ie; const struct ieee80211_bss_max_idle_period_ie *max_idle_period_ie; /* length of them, respectively */ --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c @@ -1253,13 +1253,12 @@ int ieee80211_mesh_csa_beacon(struct iee } static int mesh_fwd_csa_frame(struct ieee80211_sub_if_data *sdata, - struct ieee80211_mgmt *mgmt, size_t len) + struct ieee80211_mgmt *mgmt, size_t len, + struct ieee802_11_elems *elems) { struct ieee80211_mgmt *mgmt_fwd; struct sk_buff *skb; struct ieee80211_local *local = sdata->local; - u8 *pos = mgmt->u.action.u.chan_switch.variable; - size_t offset_ttl; skb = dev_alloc_skb(local->tx_headroom + len); if (!skb) @@ -1267,13 +1266,9 @@ static int mesh_fwd_csa_frame(struct iee skb_reserve(skb, local->tx_headroom); mgmt_fwd = skb_put(skb, len); - /* offset_ttl is based on whether the secondary channel - * offset is available or not. Subtract 1 from the mesh TTL - * and disable the initiator flag before forwarding. - */ - offset_ttl = (len < 42) ? 7 : 10; - *(pos + offset_ttl) -= 1; - *(pos + offset_ttl + 1) &= ~WLAN_EID_CHAN_SWITCH_PARAM_INITIATOR; + elems->mesh_chansw_params_ie->mesh_ttl--; + elems->mesh_chansw_params_ie->mesh_flags &= + ~WLAN_EID_CHAN_SWITCH_PARAM_INITIATOR; memcpy(mgmt_fwd, mgmt, len); eth_broadcast_addr(mgmt_fwd->da); @@ -1321,7 +1316,7 @@ static void mesh_rx_csa_frame(struct iee /* forward or re-broadcast the CSA frame */ if (fwd_csa) { - if (mesh_fwd_csa_frame(sdata, mgmt, len) < 0) + if (mesh_fwd_csa_frame(sdata, mgmt, len, &elems) < 0) mcsa_dbg(sdata, "Failed to forward the CSA frame"); } }