Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp2256333imm; Thu, 18 Oct 2018 11:30:29 -0700 (PDT) X-Google-Smtp-Source: ACcGV60njKG0ao6Eeaji/Y5dQrY9U/1SIlpYgqvRYqjqzkpv/t3plPO9+hNOUUAS8B0dsCuLoU5W X-Received: by 2002:a63:2323:: with SMTP id j35-v6mr29782605pgj.337.1539887429538; Thu, 18 Oct 2018 11:30:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539887429; cv=none; d=google.com; s=arc-20160816; b=syGGzrD45EJVQ4wju7Ud3PM5UTNGr457u5ZQyIb05FFh9c9XHnWd0hnLUjJGGUtXRu c9qbFdjbZrvnyGX20PwwkzSVMnEtk2FOdCL9T0VhBubk8cYmwJsLb2El4zKXliSR57Pl dxFXRqOnuRquKrhfat2yJcGh8RcM++wYjZZVYiuw/XK/CSvu0uSWJPvVrtx5bWkEXp+N Cz0uuGq1SrdOptiIYcveRD3xnJAP/Eb+6n8pLCxyvn2XIY8ocuMF0zs/CDY2NW/Yw0/u iUxKKETd7l9FrwxwPakFU6G/5BeP1hmFeRdWagesIJrrBwqkrnGQrDwVxJG1qMd1TZtf 7I0A== 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=AYGCAMOnltSXyOziQSEKDqHM/C4RfAbCbkFXsUQ9Efo=; b=G2AP1FOM451osgdpmYUi3eIarlgbZ82lhE75yBAZPDg371qAwPXC3vcDV+u4EPqFLG N5b2OqRvACb9pQhrk70rEexqda3tncJgB74gcyMoOr/h32UKoBfXS8yBdp40kHtK23eO NA+h1HiMds0VU4WyRM+BabwHTb2KaN9ttgJ95Iqch7LRoIh2Aqqgi/ESHTe0X162vXW7 qjNbv3UrZ5lOu9uciYkDxHBEnp1uQxQZcy4Mep480/EKJmJgQu4CZv1dHiXXY8VeytMI EOqU8c2hlXXYug9LgPJKCqZilNePloES3NtpGIz5wygIxhMy8UzkZikp7oOBEN6mHNpK wwMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=KQKLwlRv; 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 w24-v6si21443992ply.370.2018.10.18.11.30.14; Thu, 18 Oct 2018 11:30:29 -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=KQKLwlRv; 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 S1730105AbeJSCGe (ORCPT + 99 others); Thu, 18 Oct 2018 22:06:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:54936 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728416AbeJSCGd (ORCPT ); Thu, 18 Oct 2018 22:06:33 -0400 Received: from localhost (ip-213-127-77-176.ip.prioritytelecom.net [213.127.77.176]) (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 C7EAE21476; Thu, 18 Oct 2018 18:04:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1539885866; bh=UaPDVxIwT9+jOnkxMdaWPsfiFNfg/kI39TETVh+57d4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KQKLwlRvg6zpRVYtZlntGtc5qp9FPxpO/AqsFDlus+i7KkhPGnPBodCKjLgKzhieC M480TdDe+c0aRwbNaURo+DFJ5jAZDQRIYG7+n6YiS1XH6wG9u+AVyFI2sDE4tYkR2x iuIJYGCad6FZyvV5kWCalgytSNjphH89IjEzvzLg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sven Eckelmann , Simon Wunderlich , Sasha Levin Subject: [PATCH 4.9 07/35] batman-adv: Prevent duplicated tvlv handler Date: Thu, 18 Oct 2018 19:54:36 +0200 Message-Id: <20181018175423.545311007@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181018175422.506152522@linuxfoundation.org> References: <20181018175422.506152522@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review 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 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Sven Eckelmann [ Upstream commit ae3cdc97dc10c7a3b31f297dab429bfb774c9ccb ] The function batadv_tvlv_handler_register is responsible for adding new tvlv_handler to the handler_list. It first checks whether the entry already is in the list or not. If it is, then the creation of a new entry is aborted. 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: ef26157747d4 ("batman-adv: tvlv - basic infrastructure") Signed-off-by: Sven Eckelmann Signed-off-by: Simon Wunderlich Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- net/batman-adv/tvlv.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --- a/net/batman-adv/tvlv.c +++ b/net/batman-adv/tvlv.c @@ -528,15 +528,20 @@ void batadv_tvlv_handler_register(struct { struct batadv_tvlv_handler *tvlv_handler; + spin_lock_bh(&bat_priv->tvlv.handler_list_lock); + tvlv_handler = batadv_tvlv_handler_get(bat_priv, type, version); if (tvlv_handler) { + spin_unlock_bh(&bat_priv->tvlv.handler_list_lock); batadv_tvlv_handler_put(tvlv_handler); return; } tvlv_handler = kzalloc(sizeof(*tvlv_handler), GFP_ATOMIC); - if (!tvlv_handler) + if (!tvlv_handler) { + spin_unlock_bh(&bat_priv->tvlv.handler_list_lock); return; + } tvlv_handler->ogm_handler = optr; tvlv_handler->unicast_handler = uptr; @@ -546,7 +551,6 @@ void batadv_tvlv_handler_register(struct kref_init(&tvlv_handler->refcount); INIT_HLIST_NODE(&tvlv_handler->list); - spin_lock_bh(&bat_priv->tvlv.handler_list_lock); kref_get(&tvlv_handler->refcount); hlist_add_head_rcu(&tvlv_handler->list, &bat_priv->tvlv.handler_list); spin_unlock_bh(&bat_priv->tvlv.handler_list_lock);