Commit 2c7b5d5d authored by Vasily Averin's avatar Vasily Averin Committed by Pablo Neira Ayuso

netfilter: nf_conntrack_h323: lookup route from proper net namespace

Signed-off-by: default avatarVasily Averin <vvs@parallels.com>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent e59ea3df
...@@ -728,7 +728,8 @@ static int expect_h245(struct sk_buff *skb, struct nf_conn *ct, ...@@ -728,7 +728,8 @@ static int expect_h245(struct sk_buff *skb, struct nf_conn *ct,
/* If the calling party is on the same side of the forward-to party, /* If the calling party is on the same side of the forward-to party,
* we don't need to track the second call */ * we don't need to track the second call */
static int callforward_do_filter(const union nf_inet_addr *src, static int callforward_do_filter(struct net *net,
const union nf_inet_addr *src,
const union nf_inet_addr *dst, const union nf_inet_addr *dst,
u_int8_t family) u_int8_t family)
{ {
...@@ -750,9 +751,9 @@ static int callforward_do_filter(const union nf_inet_addr *src, ...@@ -750,9 +751,9 @@ static int callforward_do_filter(const union nf_inet_addr *src,
memset(&fl2, 0, sizeof(fl2)); memset(&fl2, 0, sizeof(fl2));
fl2.daddr = dst->ip; fl2.daddr = dst->ip;
if (!afinfo->route(&init_net, (struct dst_entry **)&rt1, if (!afinfo->route(net, (struct dst_entry **)&rt1,
flowi4_to_flowi(&fl1), false)) { flowi4_to_flowi(&fl1), false)) {
if (!afinfo->route(&init_net, (struct dst_entry **)&rt2, if (!afinfo->route(net, (struct dst_entry **)&rt2,
flowi4_to_flowi(&fl2), false)) { flowi4_to_flowi(&fl2), false)) {
if (rt_nexthop(rt1, fl1.daddr) == if (rt_nexthop(rt1, fl1.daddr) ==
rt_nexthop(rt2, fl2.daddr) && rt_nexthop(rt2, fl2.daddr) &&
...@@ -774,9 +775,9 @@ static int callforward_do_filter(const union nf_inet_addr *src, ...@@ -774,9 +775,9 @@ static int callforward_do_filter(const union nf_inet_addr *src,
memset(&fl2, 0, sizeof(fl2)); memset(&fl2, 0, sizeof(fl2));
fl2.daddr = dst->in6; fl2.daddr = dst->in6;
if (!afinfo->route(&init_net, (struct dst_entry **)&rt1, if (!afinfo->route(net, (struct dst_entry **)&rt1,
flowi6_to_flowi(&fl1), false)) { flowi6_to_flowi(&fl1), false)) {
if (!afinfo->route(&init_net, (struct dst_entry **)&rt2, if (!afinfo->route(net, (struct dst_entry **)&rt2,
flowi6_to_flowi(&fl2), false)) { flowi6_to_flowi(&fl2), false)) {
if (ipv6_addr_equal(rt6_nexthop(rt1), if (ipv6_addr_equal(rt6_nexthop(rt1),
rt6_nexthop(rt2)) && rt6_nexthop(rt2)) &&
...@@ -807,6 +808,7 @@ static int expect_callforwarding(struct sk_buff *skb, ...@@ -807,6 +808,7 @@ static int expect_callforwarding(struct sk_buff *skb,
__be16 port; __be16 port;
union nf_inet_addr addr; union nf_inet_addr addr;
struct nf_conntrack_expect *exp; struct nf_conntrack_expect *exp;
struct net *net = nf_ct_net(ct);
typeof(nat_callforwarding_hook) nat_callforwarding; typeof(nat_callforwarding_hook) nat_callforwarding;
/* Read alternativeAddress */ /* Read alternativeAddress */
...@@ -816,7 +818,7 @@ static int expect_callforwarding(struct sk_buff *skb, ...@@ -816,7 +818,7 @@ static int expect_callforwarding(struct sk_buff *skb,
/* If the calling party is on the same side of the forward-to party, /* If the calling party is on the same side of the forward-to party,
* we don't need to track the second call */ * we don't need to track the second call */
if (callforward_filter && if (callforward_filter &&
callforward_do_filter(&addr, &ct->tuplehash[!dir].tuple.src.u3, callforward_do_filter(net, &addr, &ct->tuplehash[!dir].tuple.src.u3,
nf_ct_l3num(ct))) { nf_ct_l3num(ct))) {
pr_debug("nf_ct_q931: Call Forwarding not tracked\n"); pr_debug("nf_ct_q931: Call Forwarding not tracked\n");
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment