From: Sasha Levin <sashal@kernel.org>
To: stable@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Sven Eckelmann <sven@narfation.org>,
Simon Wunderlich <sw@simonwunderlich.de>,
Sasha Levin <alexander.levin@microsoft.com>
Subject: [PATCH AUTOSEL 4.14 05/32] batman-adv: Prevent duplicated gateway_node entry
Date: Mon, 8 Oct 2018 11:26:02 -0400 [thread overview]
Message-ID: <20181008152629.70812-5-sashal@kernel.org> (raw)
In-Reply-To: <20181008152629.70812-1-sashal@kernel.org>
From: Sven Eckelmann <sven@narfation.org>
[ Upstream commit dff9bc42ab0b2d38c5e90ddd79b238fed5b4c7ad ]
The function batadv_gw_node_add is responsible for adding new gw_node to
the gateway_list. It is expecting that the caller already checked that
there is not already an entry with the same key or not.
But the lock for the list is only held when the list is really modified.
This could lead to duplicated entries because another context could create
an entry with the same key between the check and the list manipulation.
The check and the manipulation of the list must therefore be in the same
locked code section.
Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Acked-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
net/batman-adv/gateway_client.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
index 06276ae9f752..c6a7341f0527 100644
--- a/net/batman-adv/gateway_client.c
+++ b/net/batman-adv/gateway_client.c
@@ -31,6 +31,7 @@
#include <linux/kernel.h>
#include <linux/kref.h>
#include <linux/list.h>
+#include <linux/lockdep.h>
#include <linux/netdevice.h>
#include <linux/netlink.h>
#include <linux/rculist.h>
@@ -325,6 +326,9 @@ void batadv_gw_check_election(struct batadv_priv *bat_priv,
* @bat_priv: the bat priv with all the soft interface information
* @orig_node: originator announcing gateway capabilities
* @gateway: announced bandwidth information
+ *
+ * Has to be called with the appropriate locks being acquired
+ * (gw.list_lock).
*/
static void batadv_gw_node_add(struct batadv_priv *bat_priv,
struct batadv_orig_node *orig_node,
@@ -332,6 +336,8 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv,
{
struct batadv_gw_node *gw_node;
+ lockdep_assert_held(&bat_priv->gw.list_lock);
+
if (gateway->bandwidth_down == 0)
return;
@@ -346,10 +352,8 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv,
gw_node->bandwidth_down = ntohl(gateway->bandwidth_down);
gw_node->bandwidth_up = ntohl(gateway->bandwidth_up);
- spin_lock_bh(&bat_priv->gw.list_lock);
kref_get(&gw_node->refcount);
hlist_add_head_rcu(&gw_node->list, &bat_priv->gw.gateway_list);
- spin_unlock_bh(&bat_priv->gw.list_lock);
batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
"Found new gateway %pM -> gw bandwidth: %u.%u/%u.%u MBit\n",
@@ -405,11 +409,14 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv,
{
struct batadv_gw_node *gw_node, *curr_gw = NULL;
+ spin_lock_bh(&bat_priv->gw.list_lock);
gw_node = batadv_gw_node_get(bat_priv, orig_node);
if (!gw_node) {
batadv_gw_node_add(bat_priv, orig_node, gateway);
+ spin_unlock_bh(&bat_priv->gw.list_lock);
goto out;
}
+ spin_unlock_bh(&bat_priv->gw.list_lock);
if ((gw_node->bandwidth_down == ntohl(gateway->bandwidth_down)) &&
(gw_node->bandwidth_up == ntohl(gateway->bandwidth_up)))
--
2.17.1
next prev parent reply other threads:[~2018-10-08 15:33 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-08 15:25 [PATCH AUTOSEL 4.14 01/32] media: af9035: prevent buffer overflow on write Sasha Levin
2018-10-08 15:25 ` [PATCH AUTOSEL 4.14 02/32] batman-adv: Avoid probe ELP information leak Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 03/32] batman-adv: Fix segfault when writing to throughput_override Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 04/32] batman-adv: Fix segfault when writing to sysfs elp_interval Sasha Levin
2018-10-08 15:26 ` Sasha Levin [this message]
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 06/32] batman-adv: Prevent duplicated nc_node entry Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 07/32] batman-adv: Prevent duplicated softif_vlan entry Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 08/32] batman-adv: Prevent duplicated global TT entry Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 09/32] batman-adv: Prevent duplicated tvlv handler Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 10/32] batman-adv: fix backbone_gw refcount on queue_work() failure Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 11/32] batman-adv: fix hardif_neigh " Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 12/32] clocksource/drivers/ti-32k: Add CLOCK_SOURCE_SUSPEND_NONSTOP flag for non-am43 SoCs Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 13/32] ucma: fix a use-after-free in ucma_resolve_ip() Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 14/32] scsi: ibmvscsis: Fix a stringop-overflow warning Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 15/32] scsi: ibmvscsis: Ensure partition name is properly NUL terminated Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 16/32] intel_th: pci: Add Ice Lake PCH support Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 17/32] Input: atakbd - fix Atari keymap Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 18/32] Input: atakbd - fix Atari CapsLock behaviour Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 19/32] net: emac: fix fixed-link setup for the RTL8363SB switch Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 20/32] ravb: do not write 1 to reserved bits Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 21/32] bnxt_en: don't try to offload VLAN 'modify' action Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 22/32] PCI: dwc: Fix scheduling while atomic issues Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 23/32] drm: mali-dp: Call drm_crtc_vblank_reset on device init Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 24/32] scsi: ipr: System hung while dlpar adding primary ipr adapter back Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 25/32] scsi: sd: don't crash the host on invalid commands Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 26/32] net/mlx4: Use cpumask_available for eq->affinity_mask Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 27/32] clocksource/drivers/fttmr010: Fix set_next_event handler Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 28/32] net: aquantia: memory corruption on jumbo frames Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 29/32] RISC-V: include linux/ftrace.h in asm-prototypes.h Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 30/32] powerpc/tm: Fix userspace r13 corruption Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 31/32] powerpc/tm: Avoid possible userspace r1 corruption on reclaim Sasha Levin
2018-10-08 15:26 ` [PATCH AUTOSEL 4.14 32/32] iommu/amd: Return devid as alias for ACPI HID devices Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181008152629.70812-5-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=alexander.levin@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=sven@narfation.org \
--cc=sw@simonwunderlich.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox