[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: Denis V. Lunev <den@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
此提交包含在:
@@ -248,7 +248,8 @@ void ip_options_fragment(struct sk_buff * skb)
|
||||
* 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;
|
||||
unsigned char * iph;
|
||||
@@ -389,7 +390,7 @@ int ip_options_compile(struct ip_options * opt, struct sk_buff * skb)
|
||||
{
|
||||
__be32 addr;
|
||||
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;
|
||||
if (skb)
|
||||
timeptr = (__be32*)&optptr[optptr[2]+3];
|
||||
@@ -512,7 +513,7 @@ static int ip_options_get_finish(struct ip_options **optp,
|
||||
while (optlen & 3)
|
||||
opt->__data[optlen++] = IPOPT_END;
|
||||
opt->optlen = optlen;
|
||||
if (optlen && ip_options_compile(opt, NULL)) {
|
||||
if (optlen && ip_options_compile(&init_net, opt, NULL)) {
|
||||
kfree(opt);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
新增問題並參考
封鎖使用者