promote a corresponding secondary IP address instead of
        removing all the corresponding secondary IP addresses.
 
+drop_unicast_in_l2_multicast - BOOLEAN
+       Drop any unicast IP packets that are received in link-layer
+       multicast (or broadcast) frames.
+       This behavior (for multicast) is actually a SHOULD in RFC
+       1122, but is disabled by default for compatibility reasons.
+       Default: off (0)
+
 
 tag - INTEGER
        Allows you to write a number, which can be used as required.
 
        IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL,
        IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
        IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
+       IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
        __IPV4_DEVCONF_MAX
 };
 
 
                                              "promote_secondaries"),
                DEVINET_SYSCTL_FLUSHING_ENTRY(ROUTE_LOCALNET,
                                              "route_localnet"),
+               DEVINET_SYSCTL_FLUSHING_ENTRY(DROP_UNICAST_IN_L2_MULTICAST,
+                                             "drop_unicast_in_l2_multicast"),
        },
 };
 
 
        rt = skb_rtable(skb);
        if (rt->rt_type == RTN_MULTICAST) {
                IP_UPD_PO_STATS_BH(net, IPSTATS_MIB_INMCAST, skb->len);
-       } else if (rt->rt_type == RTN_BROADCAST)
+       } else if (rt->rt_type == RTN_BROADCAST) {
                IP_UPD_PO_STATS_BH(net, IPSTATS_MIB_INBCAST, skb->len);
+       } else if (skb->pkt_type == PACKET_BROADCAST ||
+                  skb->pkt_type == PACKET_MULTICAST) {
+               struct in_device *in_dev = __in_dev_get_rcu(skb->dev);
+
+               /* RFC 1122 3.3.6:
+                *
+                *   When a host sends a datagram to a link-layer broadcast
+                *   address, the IP destination address MUST be a legal IP
+                *   broadcast or IP multicast address.
+                *
+                *   A host SHOULD silently discard a datagram that is received
+                *   via a link-layer broadcast (see Section 2.4) but does not
+                *   specify an IP multicast or broadcast destination address.
+                *
+                * This doesn't explicitly say L2 *broadcast*, but broadcast is
+                * in a way a form of multicast and the most common use case for
+                * this is 802.11 protecting against cross-station spoofing (the
+                * so-called "hole-196" attack) so do it for both.
+                */
+               if (in_dev &&
+                   IN_DEV_ORCONF(in_dev, DROP_UNICAST_IN_L2_MULTICAST))
+                       goto drop;
+       }
 
        return dst_input(skb);