Re: [BUG 2.2/2.4/2.6] broken memsets in net/sk_mca.c (multicast)

From: Denis Vlasenko
Date: Sat Apr 10 2004 - 06:58:09 EST


On Saturday 10 April 2004 11:20, Jean Delvare wrote:
> [Please CC: me on reply, I'm not subscribed (yet)]
>
> Hi all,
>
> I just found two very weird memsets in drivers/net/sk_mca.c. I am not
> working on that driver at all, but some grepping of the kernel source
> pointed me to it so I thought I wouldn't keep quiet about it.
>
> Here is the offending code:
>
> static void skmca_set_multicast_list(struct net_device *dev)
> {
> (...)
> if (dev->flags & IFF_ALLMULTI) { /* get all multicasts */
> memset(block.LAdrF, 8, 0xff);
> } else { /* get selected/no multicasts */
> (...)
> memset(block.LAdrF, 8, 0x00);
> (...)
> }
> (...)
> }
>
> Is it just me, or are these two memsets just plain broken? Not only the
> size is hardcoded, but the parameters are swapped! I guess that this
> driver never worked in multicast mode. The correct memsets are
> obviously:
> memset(block.LAdrF, 0xff, sizeof(block.LAdrF));
> and
> memset(block.LAdrF, 0x00, sizeof(block.LAdrF));
> respectively.
>
> The odd thing is that the bug is there since the driver was introduced
> in the 2.2.10 kernel. So, 2.2, 2.4 and 2.6 kernels are all affected.
>
> I admit I'm a bit surprized that this could survive until today, so just
> tell me if it's me missing the point ;)

Good catch!

No, I don't think you're missing the point. There are lots of drivers,
and unlike core kernel code, drivers have corner cases which are never
tested. Work on drivers is always welcome.

Feel free to make patch and submit it to Jeff Garzik <jgarzik@xxxxxxxxx>.
For 2.2 and 2.4, I think you can CC kernel maintainers too.
--
vda

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