gre: fix a regression in ioctl
When testing GRE tunnel, I got:
# ip tunnel show
get tunnel gre0 failed: Invalid argument
get tunnel gre1 failed: Invalid argument
This is a regression introduced by commit c544193214
("GRE: Refactor GRE tunneling code.") because previously we
only check the parameters for SIOCADDTUNNEL and SIOCCHGTUNNEL,
after that commit, the check is moved for all commands.
So, just check for SIOCADDTUNNEL and SIOCCHGTUNNEL.
After this patch I got:
# ip tunnel show
gre0: gre/ip remote any local any ttl inherit nopmtudisc
gre1: gre/ip remote 192.168.122.101 local 192.168.122.45 ttl inherit
Cc: Pravin B Shelar <pshelar@nicira.com>
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Cong Wang <amwang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
bb33381d0c
Коммит
6c734fb859
|
@ -314,10 +314,11 @@ static int ipgre_tunnel_ioctl(struct net_device *dev,
|
|||
|
||||
if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
|
||||
return -EFAULT;
|
||||
if (p.iph.version != 4 || p.iph.protocol != IPPROTO_GRE ||
|
||||
p.iph.ihl != 5 || (p.iph.frag_off&htons(~IP_DF)) ||
|
||||
((p.i_flags|p.o_flags)&(GRE_VERSION|GRE_ROUTING))) {
|
||||
return -EINVAL;
|
||||
if (cmd == SIOCADDTUNNEL || cmd == SIOCCHGTUNNEL) {
|
||||
if (p.iph.version != 4 || p.iph.protocol != IPPROTO_GRE ||
|
||||
p.iph.ihl != 5 || (p.iph.frag_off&htons(~IP_DF)) ||
|
||||
((p.i_flags|p.o_flags)&(GRE_VERSION|GRE_ROUTING)))
|
||||
return -EINVAL;
|
||||
}
|
||||
p.i_flags = gre_flags_to_tnl_flags(p.i_flags);
|
||||
p.o_flags = gre_flags_to_tnl_flags(p.o_flags);
|
||||
|
|
Загрузка…
Ссылка в новой задаче