From patchwork Thu May 26 17:16:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shmulik Ladkani X-Patchwork-Id: 626806 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 3rFwnC6br8z9t6D for ; Fri, 27 May 2016 03:17:19 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=uDXo3ypB; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754649AbcEZRRR (ORCPT ); Thu, 26 May 2016 13:17:17 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:34088 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753612AbcEZRRQ (ORCPT ); Thu, 26 May 2016 13:17:16 -0400 Received: by mail-wm0-f67.google.com with SMTP id n129so6862716wmn.1 for ; Thu, 26 May 2016 10:17:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=0tGbZdH/pK2F3pq60VsTjamS7COGe4MdX1AHbmS+5/4=; b=uDXo3ypBDqXIbGLZxqgv56Fwoey7EAa7xRcWStVPjACh7ZUBZ3xD4vK0FgVQYjQx+k eJD62VCn0/5TIEhDl7K9N0vUZ1Q6cdLaSDq9hbtBJJaaCctuM75wrGDzuz69n2ckmLTB dqST/S7lKYhmSsBWsJwOPvxYamPoJq2uIwlDWJ7ReZnYj3gOsCwjObd1J5tviXw9H0jL WsyMjegI2a4aEImb58+9lBPAKBp/bb059hxzpImvl+epynxwQv9XbTB9/5ajnS1iJZTG nEJxa2sEBIPSF2nmgBM3zF46bpjC89gRA3DXGmYa9BT5YesfX4+64W2WSPj5cVuq2mp/ xmxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=0tGbZdH/pK2F3pq60VsTjamS7COGe4MdX1AHbmS+5/4=; b=Px8e4pV0/MLhFziGD7d+Jp5Q7UgJ6Xg84/3eUt/9t/DKm7bxailuTXGYc2r/mRM5vs 9cfSMRdVQt/O8Yp2BK6ccsxirN/1+Qdd3qSBJdswVzIyKQmB8iNwcmrwbWeU9X3aJZz2 8fOFtR0xjKO+6o+VrNYMliEfyCaKvn28CPYfvvTTearQtvV3ykVJf4baT4wFDP48HGqa 8FvEPavcpPqOLevrBaUeGThpIBZ1RF79jLM72TG+3gVA2iqfMX/GiqLm47gXyTH2kcFx DMQKEwXMbZEU1+zsa8gXfmI7oiEi+W3lCSlATLVKfs6r4Zupz4hy2Mw5MPUruhmUuWCj fysA== X-Gm-Message-State: ALyK8tI9y+Az8c87QiuC0HHbAW2jYBfLxxR/1Y6M8eK5FW/wekjEQI1190X9th1KONs3bw== X-Received: by 10.28.98.215 with SMTP id w206mr4573382wmb.79.1464283035057; Thu, 26 May 2016 10:17:15 -0700 (PDT) Received: from halley.home ([5.102.254.121]) by smtp.gmail.com with ESMTPSA id r123sm4490080wmg.20.2016.05.26.10.17.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 26 May 2016 10:17:14 -0700 (PDT) From: Shmulik Ladkani To: "David S . Miller" , netdev@vger.kernel.org Cc: Hannes Frederic Sowa , Chris Elston , James Chapman , Shmulik Ladkani Subject: [PATCH] net: l2tp: Make l2tp_ip6 namespace aware Date: Thu, 26 May 2016 20:16:36 +0300 Message-Id: <1464282996-9323-1-git-send-email-shmulik.ladkani@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org l2tp_ip6 tunnel and session lookups were still using init_net, although the l2tp core infrastructure already supports lookups keyed by 'net'. As a result, l2tp_ip6_recv discarded packets for tunnels/sessions created in namespaces other than the init_net. Fix, by using dev_net(skb->dev) or sock_net(sk) where appropriate. Signed-off-by: Shmulik Ladkani --- net/l2tp/l2tp_ip6.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c index c6f5df1bed..6c54e03fe9 100644 --- a/net/l2tp/l2tp_ip6.c +++ b/net/l2tp/l2tp_ip6.c @@ -128,6 +128,7 @@ static inline struct sock *l2tp_ip6_bind_lookup(struct net *net, */ static int l2tp_ip6_recv(struct sk_buff *skb) { + struct net *net = dev_net(skb->dev); struct sock *sk; u32 session_id; u32 tunnel_id; @@ -154,7 +155,7 @@ static int l2tp_ip6_recv(struct sk_buff *skb) } /* Ok, this is a data packet. Lookup the session. */ - session = l2tp_session_find(&init_net, NULL, session_id); + session = l2tp_session_find(net, NULL, session_id); if (session == NULL) goto discard; @@ -188,14 +189,14 @@ pass_up: goto discard; tunnel_id = ntohl(*(__be32 *) &skb->data[4]); - tunnel = l2tp_tunnel_find(&init_net, tunnel_id); + tunnel = l2tp_tunnel_find(net, tunnel_id); if (tunnel != NULL) sk = tunnel->sock; else { struct ipv6hdr *iph = ipv6_hdr(skb); read_lock_bh(&l2tp_ip6_lock); - sk = __l2tp_ip6_bind_lookup(&init_net, &iph->daddr, + sk = __l2tp_ip6_bind_lookup(net, &iph->daddr, 0, tunnel_id); read_unlock_bh(&l2tp_ip6_lock); } @@ -263,6 +264,7 @@ static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) struct inet_sock *inet = inet_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk); struct sockaddr_l2tpip6 *addr = (struct sockaddr_l2tpip6 *) uaddr; + struct net *net = sock_net(sk); __be32 v4addr = 0; int addr_type; int err; @@ -286,7 +288,7 @@ static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) err = -EADDRINUSE; read_lock_bh(&l2tp_ip6_lock); - if (__l2tp_ip6_bind_lookup(&init_net, &addr->l2tp_addr, + if (__l2tp_ip6_bind_lookup(net, &addr->l2tp_addr, sk->sk_bound_dev_if, addr->l2tp_conn_id)) goto out_in_use; read_unlock_bh(&l2tp_ip6_lock); @@ -456,7 +458,7 @@ static int l2tp_ip6_backlog_recv(struct sock *sk, struct sk_buff *skb) return 0; drop: - IP_INC_STATS(&init_net, IPSTATS_MIB_INDISCARDS); + IP_INC_STATS(sock_net(sk), IPSTATS_MIB_INDISCARDS); kfree_skb(skb); return -1; }