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
next prev 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