Commit 0e6bd4a1 authored by Denis V. Lunev's avatar Denis V. Lunev Committed by David S. Miller

[NETNS]: Add namespace parameter to ip_options_compile.

ip_options_compile uses inet_addr_type which requires a namespace. The
packet argument is optional, so parameter is the only way to obtain
it. Pass the init_net there for now.
Signed-off-by: default avatarDenis V. Lunev <den@openvz.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ffc31d3d
...@@ -347,7 +347,8 @@ extern int ip_forward(struct sk_buff *skb); ...@@ -347,7 +347,8 @@ extern int ip_forward(struct sk_buff *skb);
extern void ip_options_build(struct sk_buff *skb, struct ip_options *opt, __be32 daddr, struct rtable *rt, int is_frag); extern void ip_options_build(struct sk_buff *skb, struct ip_options *opt, __be32 daddr, struct rtable *rt, int is_frag);
extern int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb); extern int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb);
extern void ip_options_fragment(struct sk_buff *skb); extern void ip_options_fragment(struct sk_buff *skb);
extern int ip_options_compile(struct ip_options *opt, struct sk_buff *skb); extern int ip_options_compile(struct net *net,
struct ip_options *opt, struct sk_buff *skb);
extern int ip_options_get(struct ip_options **optp, extern int ip_options_get(struct ip_options **optp,
unsigned char *data, int optlen); unsigned char *data, int optlen);
extern int ip_options_get_from_user(struct ip_options **optp, extern int ip_options_get_from_user(struct ip_options **optp,
......
...@@ -286,7 +286,7 @@ static inline int ip_rcv_options(struct sk_buff *skb) ...@@ -286,7 +286,7 @@ static inline int ip_rcv_options(struct sk_buff *skb)
opt = &(IPCB(skb)->opt); opt = &(IPCB(skb)->opt);
opt->optlen = iph->ihl*4 - sizeof(struct iphdr); opt->optlen = iph->ihl*4 - sizeof(struct iphdr);
if (ip_options_compile(opt, skb)) { if (ip_options_compile(&init_net, opt, skb)) {
IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS); IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
goto drop; goto drop;
} }
......
...@@ -248,7 +248,8 @@ void ip_options_fragment(struct sk_buff * skb) ...@@ -248,7 +248,8 @@ void ip_options_fragment(struct sk_buff * skb)
* If opt == NULL, then skb->data should point to IP header. * If opt == NULL, then skb->data should point to IP header.
*/ */
int ip_options_compile(struct ip_options * opt, struct sk_buff * skb) int ip_options_compile(struct net *net,
struct ip_options * opt, struct sk_buff * skb)
{ {
int l; int l;
unsigned char * iph; unsigned char * iph;
...@@ -389,7 +390,7 @@ int ip_options_compile(struct ip_options * opt, struct sk_buff * skb) ...@@ -389,7 +390,7 @@ int ip_options_compile(struct ip_options * opt, struct sk_buff * skb)
{ {
__be32 addr; __be32 addr;
memcpy(&addr, &optptr[optptr[2]-1], 4); memcpy(&addr, &optptr[optptr[2]-1], 4);
if (inet_addr_type(&init_net, addr) == RTN_UNICAST) if (inet_addr_type(net, addr) == RTN_UNICAST)
break; break;
if (skb) if (skb)
timeptr = (__be32*)&optptr[optptr[2]+3]; timeptr = (__be32*)&optptr[optptr[2]+3];
...@@ -512,7 +513,7 @@ static int ip_options_get_finish(struct ip_options **optp, ...@@ -512,7 +513,7 @@ static int ip_options_get_finish(struct ip_options **optp,
while (optlen & 3) while (optlen & 3)
opt->__data[optlen++] = IPOPT_END; opt->__data[optlen++] = IPOPT_END;
opt->optlen = optlen; opt->optlen = optlen;
if (optlen && ip_options_compile(opt, NULL)) { if (optlen && ip_options_compile(&init_net, opt, NULL)) {
kfree(opt); kfree(opt);
return -EINVAL; return -EINVAL;
} }
......
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