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>
This commit is contained in:
@@ -1328,7 +1328,7 @@ void rt_bind_peer(struct rtable *rt, __be32 daddr, int create)
|
||||
struct net *net = dev_net(rt->dst.dev);
|
||||
struct inet_peer *peer;
|
||||
|
||||
peer = inet_getpeer_v4(net, daddr, create);
|
||||
peer = inet_getpeer_v4(net->ipv4.peers, daddr, create);
|
||||
|
||||
if (peer && cmpxchg(&rt->peer, NULL, peer) != NULL)
|
||||
inet_putpeer(peer);
|
||||
@@ -1684,7 +1684,7 @@ unsigned short ip_rt_frag_needed(struct net *net, const struct iphdr *iph,
|
||||
unsigned short est_mtu = 0;
|
||||
struct inet_peer *peer;
|
||||
|
||||
peer = inet_getpeer_v4(net, iph->daddr, 1);
|
||||
peer = inet_getpeer_v4(net->ipv4.peers, iph->daddr, 1);
|
||||
if (peer) {
|
||||
unsigned short mtu = new_mtu;
|
||||
|
||||
@@ -1929,7 +1929,7 @@ static void rt_init_metrics(struct rtable *rt, const struct flowi4 *fl4,
|
||||
if (fl4 && (fl4->flowi4_flags & FLOWI_FLAG_PRECOW_METRICS))
|
||||
create = 1;
|
||||
|
||||
rt->peer = peer = inet_getpeer_v4(net, rt->rt_dst, create);
|
||||
rt->peer = peer = inet_getpeer_v4(net->ipv4.peers, rt->rt_dst, create);
|
||||
if (peer) {
|
||||
rt->rt_peer_genid = rt_peer_genid();
|
||||
if (inet_metrics_new(peer))
|
||||
|
||||
Reference in New Issue
Block a user