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

From: Russell King
Date: Sat Apr 10 2004 - 03:50:44 EST


On Sat, Apr 10, 2004 at 01:40:40AM -0700, Andrew Morton wrote:
> Jean Delvare <khali@xxxxxxxxxxxx> wrote:
> > I just found two very weird memsets in drivers/net/sk_mca.c.
>
> yup.

Erm...

> --- 25/drivers/net/sk_mca.c~sk_mca-multicast-fix 2004-04-10 01:37:06.739989760 -0700
> +++ 25-akpm/drivers/net/sk_mca.c 2004-04-10 01:38:33.684772144 -0700
> @@ -996,14 +996,12 @@ static void skmca_set_multicast_list(str
> else
> block.Mode &= ~LANCE_INIT_PROM;
>
> - if (dev->flags & IFF_ALLMULTI) { /* get all multicasts */
> - memset(block.LAdrF, 8, 0xff);
> - } else { /* get selected/no multicasts */
> -
> + memset(block.LAdrF, 0xff, sizeof(block.LAdrF));

Initialise the whole of block.LAdrF to all-bits-set, and then...

> + if (!(dev->flags & IFF_ALLMULTI)) {
> + /* get selected/no multicasts */
> struct dev_mc_list *mptr;
> int code;
>
> - memset(block.LAdrF, 8, 0x00);
> for (mptr = dev->mc_list; mptr != NULL; mptr = mptr->next) {
> code = GetHash(mptr->dmi_addr);
> block.LAdrF[(code >> 3) & 7] |= 1 << (code & 7);

Set bits, which are already set from the previous memset.

Surely this can't be right?

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
-
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/