Re: [PATCH] packet_sendmsg_spkt incorrectly truncates an interfacename

From: Andrew Morton
Date: Tue Feb 10 2004 - 02:42:30 EST


MAEDA Naoaki <maeda.naoaki@xxxxxxxxxxxxxx> wrote:
>
> Hi,
>
> When I renamed a network interface name with long name such as heartbeat.eth1,
> DHCP client failed to assign an IP address to the interface.
>
> Problem is that packet_sendmsg_spkt() truncates an interface name
> by 12 characters. That is why the following dev_get_by_name() fails to find
> the corresponding net_device structure.

You need to use a shorter name, I think.

> Obviously, max name length of a network interface name is IFNAMESIZ-1,
> which is 15.

Yes, but sockaddr_pkt.spkt_device[] is only 14 bytes for some reason.

> I can not come up with any reasonable reason that
> packet_sendmsg_spkt() should truncate the interface name by 12.
> I guess it is just a trivial bug.

These objects are shared with userspace applications, I believe. We're
stuck with it.


> diff -Naur linux-2.6.2.org/net/packet/af_packet.c linux-2.6.2/net/packet/af_packet.c
> --- linux-2.6.2.org/net/packet/af_packet.c 2004-02-10 15:29:14.160320269 +0900
> +++ linux-2.6.2/net/packet/af_packet.c 2004-02-10 15:29:52.656413548 +0900
> @@ -311,7 +311,7 @@
> * Find the device first to size check it
> */
>
> - saddr->spkt_device[13] = 0;
> + saddr->spkt_device[IFNAMSIZ-1] = 0;
> dev = dev_get_by_name(saddr->spkt_device);
> err = -ENODEV;
> if (dev == NULL)

This scribbles on sockaddr_pkt.spkt_protocol.

Probably what we need to do here is to put a bit of range-checking into the
userspace tool. Is it nameif?

-
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/