From patchwork Fri Feb 24 19:43:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 732286 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vVMFf3bqXz9s7R for ; Sat, 25 Feb 2017 06:52:22 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="jHER7eoY"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751428AbdBXTuw (ORCPT ); Fri, 24 Feb 2017 14:50:52 -0500 Received: from mail-pg0-f42.google.com ([74.125.83.42]:35941 "EHLO mail-pg0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751232AbdBXTug (ORCPT ); Fri, 24 Feb 2017 14:50:36 -0500 Received: by mail-pg0-f42.google.com with SMTP id s67so15092223pgb.3 for ; Fri, 24 Feb 2017 11:50:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kR0qnRl7Y03saOWXCvQIMmtcT10AvJXUntn1NBC1/Uk=; b=jHER7eoY5Lx6ZtWYlLuOofmxsg3Pjbp6eyclyxzyg0/18vN832qf5Zrz3UkZParaHG AczKmKRAWG/NEXifWfhyBqGStzZTMLgbh1bRnGjYoHd4zoubwcgud3QjUMAe8YnaPBFl FpRS5fffO9iQjh/gk+1fuDZpCZeNRWFhvQx7ZqQS7KLJ2EytYtCWc49YqQQc1Lsl/5mn 6rf1JkW8y1vGSPkXudOvwEiYVx//3YWPrpi1BKqXZn8Klx/oNfuwxZQn5vwCb35odGoF C+rdBAmtvKwtIPDvqcN7ApbNwgnMy8ePvaSaYqTdIyP+3nZ0AP40sjZkvmwEhIuNhMnz UfnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kR0qnRl7Y03saOWXCvQIMmtcT10AvJXUntn1NBC1/Uk=; b=O0vmT20n+IqCNbzlqrKnJfU5LLCbMgHVMUZCBQbdpffUrtK0pHygLmKdmbeLxpVqkZ rl5o/AeceZrDN56Vm2MogTRuTmBFm1VtCtHTNVfXhBs8b34gOPJqnTIW7hEjcw/zYr2k lk4vQMMM4LC3McSeFQ3YMW83CHtSzmEtea5WMYX8VlK8VT0fkh3fyPS8yRg1Zmi9+T3A YSgjOdMqCQ5IWJQowf5nc9KHX1TYEq8aYj2SG3udbZfo0/WFh2ZWdJM5DXUMdvQ47pXT TMUFlFjJiRto6KPdxD+wb34PsP3OhKhVT0I19rRd/Q24GNoz8ejJhFe7U5NwdF9rZysD MJPA== X-Gm-Message-State: AMke39laqp3s+9tZ4P+SPOElSnkWSgLYqbQhFXV47nKUTKqGsh5Rqqgz+RHemHMH8n4eYIAH X-Received: by 10.99.108.74 with SMTP id h71mr5401818pgc.99.1487965426142; Fri, 24 Feb 2017 11:43:46 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([75.53.12.129]) by smtp.gmail.com with ESMTPSA id n70sm16571816pfg.34.2017.02.24.11.43.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 24 Feb 2017 11:43:45 -0800 (PST) From: Jakub Kicinski To: netdev@vger.kernel.org Cc: oss-drivers@netronome.com, kubakici@wp.pl, Cong Wang , Pravin Shelar , Jiri Benc , "John W . Linville" , Jakub Kicinski Subject: [PATCH net 1/2] vxlan: lock RCU on TX path Date: Fri, 24 Feb 2017 11:43:36 -0800 Message-Id: <20170224194337.67538-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170224194337.67538-1-jakub.kicinski@netronome.com> References: <20170224194337.67538-1-jakub.kicinski@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There is no guarantees that callers of the TX path will hold the RCU lock. Grab it explicitly. Fixes: c6fcc4fc5f8b ("vxlan: avoid using stale vxlan socket.") Signed-off-by: Jakub Kicinski --- drivers/net/vxlan.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 4e27c5b09600..e53ee696c962 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -2108,6 +2108,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, src_port = udp_flow_src_port(dev_net(dev), skb, vxlan->cfg.port_min, vxlan->cfg.port_max, true); + rcu_read_lock(); if (dst->sa.sa_family == AF_INET) { struct vxlan_sock *sock4 = rcu_dereference(vxlan->vn4_sock); struct rtable *rt; @@ -2130,7 +2131,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, dst_port, vni, &rt->dst, rt->rt_flags); if (err) - return; + goto out_unlock; } else if (info->key.tun_flags & TUNNEL_DONT_FRAGMENT) { df = htons(IP_DF); } @@ -2169,7 +2170,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, dst_port, vni, ndst, rt6i_flags); if (err) - return; + goto out_unlock; } tos = ip_tunnel_ecn_encap(tos, old_iph, skb); @@ -2186,6 +2187,8 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, label, src_port, dst_port, !udp_sum); #endif } +out_unlock: + rcu_read_unlock(); return; drop: @@ -2194,6 +2197,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, return; tx_error: + rcu_read_unlock(); if (err == -ELOOP) dev->stats.collisions++; else if (err == -ENETUNREACH)