Hi,

I've noticed a difference between the IPv4 and IPv6 router alert
handling, which I think constitutes a bug.

For IPv4, you can bind a socket to an interface. If you use the
IP_ROUTER_ALERT sockopt then packets with router alert options are only
delivered to raw sockets bound to the incoming interface, or not bound
to any interface. (see net/ipv4/ip_input.c in the ip_call_ra_chain
function around line 168).

The IPv6 equivalent is ip6_call_ra_chain in net/ipv6/ip_output.c
(around line 316), which doesn't check sk->sk_bound_dev_if at all
before delivering the packet to a raw socket. I assume that it should.
Is that assumption correct?

I guess the fix would be a matter of changing:

if (sk && ra->sel == sel) {

to:

if (sk && ra->sel == sel &&
    (!sk->sk_bound_dev_if ||
     sk->sk_bound_dev_if == skb->dev->ifindex)) {


thanks,
Andrew
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to