Messages in this thread | | | Date | Sat, 10 Apr 2004 09:49:24 +0100 | From | Russell King <> | Subject | Re: [BUG 2.2/2.4/2.6] broken memsets in net/sk_mca.c (multicast) |
| |
On Sat, Apr 10, 2004 at 01:40:40AM -0700, Andrew Morton wrote: > Jean Delvare <khali@linux-fr.org> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |