Re: [PATCH] net: Keep interface binding when sending packets with ipi_ifindex = 0

From: Chia-chi Yeh (èåé)
Date: Tue Aug 04 2009 - 03:36:53 EST


After thinking more deeply, I believe that IPv6 does the right thing
and IPv4 does not. SO_BINDTODEVICE requires CAP_NET_RAW, so it is a
privileged operation. Therefore, it looks weird to me if one can
specify other interface than the bound one without the same
capability. The following patch makes the behavior in IPv4 and IPv6
identical. Thanks for your help.

Chia-chi

--- a/net/ipv4/ip_sockglue.c 2009-08-04 15:11:39.000000000 +0800
+++ b/net/ipv4/ip_sockglue.c 2009-08-04 15:17:05.000000000 +0800
@@ -213,7 +213,11 @@
if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct
in_pktinfo)))
return -EINVAL;
info = (struct in_pktinfo *)CMSG_DATA(cmsg);
- ipc->oif = info->ipi_ifindex;
+ if (info->ipi_ifindex) {
+ if (ipc->oif && info->ipi_ifindex != ipc->oif)
+ return -EINVAL;
+ ipc->oif = info->ipi_ifindex;
+ }
ipc->addr = info->ipi_spec_dst.s_addr;
break;
}

On Tue, Aug 4, 2009 at 12:23 PM, David Miller<davem@xxxxxxxxxxxxx> wrote:
> From: John Dykstra <john.dykstra1@xxxxxxxxx>
> Date: Wed, 29 Jul 2009 19:10:21 -0500
>
>> I guess Dave's letting this stand.  I'm posting this just to make sure
>> this is an explicit decision.
>
> I'm still thinking about this.
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/