{
        struct mctp_route *tmp, *rt = NULL;
 
+       rcu_read_lock();
+
        list_for_each_entry_rcu(tmp, &net->mctp.routes, list) {
                /* TODO: add metrics */
                if (mctp_rt_match_eid(tmp, dnet, daddr)) {
                }
        }
 
+       rcu_read_unlock();
+
        return rt;
 }
 
 static struct mctp_route *mctp_route_lookup_null(struct net *net,
                                                 struct net_device *dev)
 {
-       struct mctp_route *rt;
+       struct mctp_route *tmp, *rt = NULL;
 
-       list_for_each_entry_rcu(rt, &net->mctp.routes, list) {
-               if (rt->dev->dev == dev && rt->type == RTN_LOCAL &&
-                   refcount_inc_not_zero(&rt->refs))
-                       return rt;
+       rcu_read_lock();
+
+       list_for_each_entry_rcu(tmp, &net->mctp.routes, list) {
+               if (tmp->dev->dev == dev && tmp->type == RTN_LOCAL &&
+                   refcount_inc_not_zero(&tmp->refs)) {
+                       rt = tmp;
+                       break;
+               }
        }
 
-       return NULL;
+       rcu_read_unlock();
+
+       return rt;
 }
 
 static int mctp_do_fragment_route(struct mctp_route *rt, struct sk_buff *skb,