[linux-next] LinuxNextTracking branch, master, updated. next-20180921

batman at open-mesh.org batman at open-mesh.org
Sat Sep 22 00:20:40 CEST 2018


The following commit has been merged in the master branch:
commit 4c4af6900844ab04c9434c972021d7b48610e06a
Author: Marek Lindner <mareklindner at neomailbox.ch>
Date:   Fri Sep 7 05:45:55 2018 +0800

    batman-adv: fix hardif_neigh refcount on queue_work() failure
    
    The hardif_neigh refcounter is to be decreased by the queued work and
    currently is never decreased if the queue_work() call fails.
    Fix by checking the queue_work() return value and decrease refcount
    if necessary.
    
    Signed-off-by: Marek Lindner <mareklindner at neomailbox.ch>
    Signed-off-by: Sven Eckelmann <sven at narfation.org>
    Signed-off-by: Simon Wunderlich <sw at simonwunderlich.de>

diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c
index e103c759b7ab..9f481cfdf77d 100644
--- a/net/batman-adv/bat_v_elp.c
+++ b/net/batman-adv/bat_v_elp.c
@@ -268,6 +268,7 @@ static void batadv_v_elp_periodic_work(struct work_struct *work)
 	struct batadv_priv *bat_priv;
 	struct sk_buff *skb;
 	u32 elp_interval;
+	bool ret;
 
 	bat_v = container_of(work, struct batadv_hard_iface_bat_v, elp_wq.work);
 	hard_iface = container_of(bat_v, struct batadv_hard_iface, bat_v);
@@ -329,8 +330,11 @@ static void batadv_v_elp_periodic_work(struct work_struct *work)
 		 * may sleep and that is not allowed in an rcu protected
 		 * context. Therefore schedule a task for that.
 		 */
-		queue_work(batadv_event_workqueue,
-			   &hardif_neigh->bat_v.metric_work);
+		ret = queue_work(batadv_event_workqueue,
+				 &hardif_neigh->bat_v.metric_work);
+
+		if (!ret)
+			batadv_hardif_neigh_put(hardif_neigh);
 	}
 	rcu_read_unlock();
 

-- 
LinuxNextTracking


More information about the linux-merge mailing list