Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp2222141imm; Thu, 18 Oct 2018 10:57:01 -0700 (PDT) X-Google-Smtp-Source: ACcGV627Oxi3mNlfmRi0YsQjoyA+2QDfEU8fEEV/Fn7DDlsQXqtCIRV9jfnND28ZQeEISOgqteML X-Received: by 2002:a17:902:e088:: with SMTP id cb8-v6mr31110149plb.31.1539885421029; Thu, 18 Oct 2018 10:57:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539885420; cv=none; d=google.com; s=arc-20160816; b=zaKhZW2cUKc7a40+PxJ9XYUY5ig7CPJSY++9L9Poam+CQEJT6s6GQcWdSmv670lLbc WlLJtkcW3icmBLQyk2Xv2JN8SGJDnG2Owf8IVWaebN3yH9vSiwjbHOPmigHEW9y9Apil pXxjqpww0khTdoTKocZTvI0FnDiJESjjNOstzv/RialFT9vB8tHnnPnkefPBC5s+2MpK asDOcLsdrqTgzrwcw5H+yZgIk7OmInNdK3r/hHqzAyNl186v3FEXC5SU2OTSFFUxRKB0 rB5DJag6rKZlEyP9wLTI7DsXMrWJH1QZviVgszTGlUnoUnEBbNURMC7fQq1OPSzDXyXJ r69w== 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=i/UX4EZv0XsElK3YE4pkD7PUX03TPbmfYFPQBbeQ7Qc=; b=kjB5AZHFrL3obNanfvpObqpvDAQYqVItzqKatSzix4bIRMx3WS+vrAjh7xeyn9UmaJ HD/UdQDz4soEvSresyGBFYNu0/u0Q/A7+6jDty3jBitjcAMwTWXR4EwtiLwJTbnDs1TS SUScneUCFlMQZ4uCdFvUykmMUdF6aiUxGQuS6Re/IKonDf5ShVwSOed2MluVq9A7GVhr vr7OSy1Y/ThnlySzsYEo//QUEqvJL+mYOFIX009AFwkj/37CwklhB4Lweaz77WgThAyg ziDujoWMFg1aOKZfueLNcW6EpbY6Wm1sHM+HzlwR1/EzQMwQ3alid0zTvifGAWQa//Eo E9iw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=eRL4ea93; 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 30-v6si22295673pla.282.2018.10.18.10.56.45; Thu, 18 Oct 2018 10:57:00 -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=eRL4ea93; 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 S1728521AbeJSB6O (ORCPT + 99 others); Thu, 18 Oct 2018 21:58:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:46100 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727417AbeJSB6O (ORCPT ); Thu, 18 Oct 2018 21:58:14 -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 3B47E204FD; Thu, 18 Oct 2018 17:56:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1539885369; bh=Hz2/SX+he6vUf9b33OdGWzljMpVc1LCLhsse4m1MMTY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eRL4ea9327DOrmPT3u5VP1DkGTrqOv8/DtVVviopGLqNsml5ZztyUhWbcwYaILfE1 m9FL34ZYR92jZqg9sEVn6uMR4WZ7Tm7hdzRCPMPT1yp0CVttujhCT7Xw/Tlt+O1ITH 0d5Y9Q3jsW8D1F6xEHfKnkiSSARnakxDnwq1wEq0= 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.18 13/53] batman-adv: Prevent duplicated tvlv handler Date: Thu, 18 Oct 2018 19:54:06 +0200 Message-Id: <20181018175419.109961553@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181018175416.561567978@linuxfoundation.org> References: <20181018175416.561567978@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.18-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 @@ -529,15 +529,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; @@ -547,7 +552,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);