ipv4: add option to drop gratuitous ARP packets
In certain 802.11 wireless deployments, there will be ARP proxies that use knowledge of the network to correctly answer requests. To prevent gratuitous ARP frames on the shared medium from being a problem, on such deployments wireless needs to drop them. Enable this by providing an option called "drop_gratuitous_arp". Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net> (cherry picked from commit 4078228159c9f54cca7347a8bdace29f2abdef65) Change-Id: I8772dbd7471085878f8b4161eb2a056d79b8b232
This commit is contained in:
parent
6fe8b6e686
commit
da24b5fa50
4 changed files with 16 additions and 0 deletions
|
@ -1230,6 +1230,11 @@ drop_unicast_in_l2_multicast - BOOLEAN
|
||||||
1122, but is disabled by default for compatibility reasons.
|
1122, but is disabled by default for compatibility reasons.
|
||||||
Default: off (0)
|
Default: off (0)
|
||||||
|
|
||||||
|
drop_gratuitous_arp - BOOLEAN
|
||||||
|
Drop all gratuitous ARP frames, for example if there's a known
|
||||||
|
good ARP proxy on the network and such frames need not be used
|
||||||
|
(or in the case of 802.11, must not be used to prevent attacks.)
|
||||||
|
Default: off (0)
|
||||||
|
|
||||||
tag - INTEGER
|
tag - INTEGER
|
||||||
Allows you to write a number, which can be used as required.
|
Allows you to write a number, which can be used as required.
|
||||||
|
|
|
@ -166,6 +166,7 @@ enum
|
||||||
IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
|
IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
|
||||||
IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
|
IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
|
||||||
IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
|
IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
|
||||||
|
IPV4_DEVCONF_DROP_GRATUITOUS_ARP,
|
||||||
IPV4_DEVCONF_NF_IPV4_DEFRAG_SKIP,
|
IPV4_DEVCONF_NF_IPV4_DEFRAG_SKIP,
|
||||||
__IPV4_DEVCONF_MAX
|
__IPV4_DEVCONF_MAX
|
||||||
};
|
};
|
||||||
|
|
|
@ -742,6 +742,14 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||||
(!IN_DEV_ROUTE_LOCALNET(in_dev) && ipv4_is_loopback(tip)))
|
(!IN_DEV_ROUTE_LOCALNET(in_dev) && ipv4_is_loopback(tip)))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For some 802.11 wireless deployments (and possibly other networks),
|
||||||
|
* there will be an ARP proxy and gratuitous ARP frames are attacks
|
||||||
|
* and thus should not be accepted.
|
||||||
|
*/
|
||||||
|
if (sip == tip && IN_DEV_ORCONF(in_dev, DROP_GRATUITOUS_ARP))
|
||||||
|
goto out;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Special case: We must set Frame Relay source Q.922 address
|
* Special case: We must set Frame Relay source Q.922 address
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2189,6 +2189,8 @@ static struct devinet_sysctl_table {
|
||||||
"igmpv3_unsolicited_report_interval"),
|
"igmpv3_unsolicited_report_interval"),
|
||||||
DEVINET_SYSCTL_RW_ENTRY(IGNORE_ROUTES_WITH_LINKDOWN,
|
DEVINET_SYSCTL_RW_ENTRY(IGNORE_ROUTES_WITH_LINKDOWN,
|
||||||
"ignore_routes_with_linkdown"),
|
"ignore_routes_with_linkdown"),
|
||||||
|
DEVINET_SYSCTL_RW_ENTRY(DROP_GRATUITOUS_ARP,
|
||||||
|
"drop_gratuitous_arp"),
|
||||||
|
|
||||||
DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
|
DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
|
||||||
DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
|
DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
|
||||||
|
|
Loading…
Add table
Reference in a new issue