public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
From: Fengguang Wu <wfg-VuQAYsv1563Yd54FQh9/CA@public•gmane.org>
To: David Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public•gmane.org>
Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public•gmane.org,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public•gmane.org
Subject: Re: [PATCH] inet: Initialize per-netns inetpeer roots in net/ipv{4,6}/route.c
Date: Sun, 10 Jun 2012 18:16:40 +0800	[thread overview]
Message-ID: <20120610101640.GA14476@localhost> (raw)
In-Reply-To: <20120609.221801.2226110181753212240.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>

On Sat, Jun 09, 2012 at 10:18:01PM -0400, David Miller wrote:
> From: David Miller <davem@davemloft•net>
> Date: Sat, 09 Jun 2012 19:09:29 -0700 (PDT)
> 
> > From: Fengguang Wu <wfg@linux•intel.com>
> > Date: Sun, 10 Jun 2012 10:08:01 +0800
> > 
> >> And in another config, an old error still triggers:
> >> 
> >> net/ipv4/inetpeer.c: In function ‘family_to_base’:
> >> net/ipv4/inetpeer.c:397:50: error: ‘struct net’ has no member named ‘ipv6’
> >> net/ipv4/inetpeer.c:398:1: warning: control reaches end of non-void function [-Wreturn-type]
> >> 
> >> I'm building this patch on top of net-next master.
> > 
> > What a fucking mess Gao created, I'll fix this.
> > 
> > Thanks for the report.
> 
> I just pushed the following to net-next:
> 
> --------------------
> inet: Pass inetpeer root into inet_getpeer*() interfaces.
> 
> Otherwise we reference potentially non-existing members when
> ipv6 is disabled.
> 
> Signed-off-by: David S. Miller <davem@davemloft•net>
> ---
>  include/net/inetpeer.h |   10 +++++-----
>  net/ipv4/inetpeer.c    |    9 +--------
>  net/ipv4/ip_fragment.c |    2 +-
>  net/ipv4/route.c       |    6 +++---
>  net/ipv6/route.c       |    2 +-
>  5 files changed, 11 insertions(+), 18 deletions(-)

It triggers some other errors:

net/ipv4/inetpeer.c: In function ‘inetpeer_invalidate_tree’:
net/ipv4/inetpeer.c:585:9: error: implicit declaration of function ‘family_to_base’ [-Werror=implicit-function-declaration]
net/ipv4/inetpeer.c:585:32: warning: initialization makes pointer from integer without a cast [enabled by default]
net/ipv6/tcp_ipv6.c:1758:2: warning: passing argument 1 of ‘inet_getpeer_v6’ from incompatible pointer type [enabled by default]
include/net/inetpeer.h:101:33: note: expected ‘struct inet_peer_base *’ but argument is of type ‘struct net *’
net/ipv4/tcp_ipv4.c:1843:2: warning: passing argument 1 of ‘inet_getpeer_v4’ from incompatible pointer type [enabled by default]
include/net/inetpeer.h:90:33: note: expected ‘struct inet_peer_base *’ but argument is of type ‘struct net *’

which can be fixed by the following diff.

Thanks,
Fengguang
---
 net/ipv4/inetpeer.c |    6 ++++++
 net/ipv4/tcp_ipv4.c |    2 +-
 net/ipv6/tcp_ipv6.c |    2 +-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
index 98cf1f8..7ad6b76 100644
--- a/net/ipv4/inetpeer.c
+++ b/net/ipv4/inetpeer.c
@@ -391,6 +391,12 @@ static void unlink_from_pool(struct inet_peer *p, struct inet_peer_base *base,
 	call_rcu(&p->rcu, inetpeer_free_rcu);
 }
 
+static struct inet_peer_base *family_to_base(struct net *net,
+					     int family)
+{
+	return family == AF_INET ? net->ipv4.peers : net->ipv6.peers;
+}
+
 /* perform garbage collect on all items stacked during a lookup */
 static int inet_peer_gc(struct inet_peer_base *base,
 			struct inet_peer __rcu **stack[PEER_MAXDEPTH],
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 77f049d..cf7fe92 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1840,7 +1840,7 @@ void *tcp_v4_tw_get_peer(struct sock *sk)
 	const struct inet_timewait_sock *tw = inet_twsk(sk);
 	struct net *net = sock_net(sk);
 
-	return inet_getpeer_v4(net, tw->tw_daddr, 1);
+	return inet_getpeer_v4(net->ipv4.peers, tw->tw_daddr, 1);
 }
 EXPORT_SYMBOL(tcp_v4_tw_get_peer);
 
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index b5ecf37..927c029 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1755,7 +1755,7 @@ static void *tcp_v6_tw_get_peer(struct sock *sk)
 	if (tw->tw_family == AF_INET)
 		return tcp_v4_tw_get_peer(sk);
 
-	return inet_getpeer_v6(net, &tw6->tw_v6_daddr, 1);
+	return inet_getpeer_v6(net->ipv6.peers, &tw6->tw_v6_daddr, 1);
 }
 
 static struct timewait_sock_ops tcp6_timewait_sock_ops = {
-- 
1.7.10

_______________________________________________
Containers mailing list
Containers@lists•linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/containers

  parent reply	other threads:[~2012-06-10 10:16 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-09 23:32 [PATCH] inet: Initialize per-netns inetpeer roots in net/ipv{4,6}/route.c David Miller
2012-06-10  1:58 ` Fengguang Wu
2012-06-10  2:04   ` David Miller
     [not found]     ` <20120609.190451.182034193302304295.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2012-06-10  3:16       ` Fengguang Wu
2012-06-10  4:21         ` David Miller
     [not found]           ` <20120609.212147.1738198233131370927.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2012-06-10  4:43             ` Fengguang Wu
2012-06-10  4:49               ` Fengguang Wu
2012-06-10  5:04                 ` David Miller
     [not found]                   ` <20120609.220421.2043389435765629622.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2012-06-10  6:47                     ` Fengguang Wu
2012-06-10  5:03               ` David Miller
2012-06-10  2:08   ` Fengguang Wu
2012-06-10  2:09     ` David Miller
     [not found]       ` <20120609.190929.1165462964087672866.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2012-06-10  2:18         ` David Miller
     [not found]           ` <20120609.221801.2226110181753212240.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2012-06-10  2:37             ` Fengguang Wu
2012-06-10 10:16             ` Fengguang Wu [this message]
2012-06-11  0:27               ` [PATCH] inet: Initialize per-netns inetpeer roots in net/ipv{4, 6}/route.c Gao feng
     [not found]                 ` <4FD53B74.1050409-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2012-06-11  1:44                   ` [PATCH] inet: Initialize per-netns inetpeer roots in net/ipv{4,6}/route.c Fengguang Wu
2012-06-11  3:03               ` David Miller
2012-06-10  5:14         ` [PATCH] inet: Initialize per-netns inetpeer roots in net/ipv{4, 6}/route.c Gao feng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120610101640.GA14476@localhost \
    --to=wfg-vuqaysv1563yd54fqh9/ca@public$(echo .)gmane.org \
    --cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public$(echo .)gmane.org \
    --cc=davem-fT/PcQaiUtIeIZ0/mPfg9Q@public$(echo .)gmane.org \
    --cc=netdev-u79uwXL29TY76Z2rM5mHXA@public$(echo .)gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox