Files
linux/drivers/net
Ben Hutchings e226930835 r6040: Fix multicast filter some more
This code has been broken forever, but in several different and
creative ways.

So far as I can work out, the R6040 MAC filter has 4 exact-match
entries, the first of which the driver uses for its assigned unicast
address, plus a 64-entry hash-based filter for multicast addresses
(maybe unicast as well?).

The original version of this code would write the first 4 multicast
addresses as exact-match entries from offset 1 (bug #1: there is no
entry 4 so this could write to some PHY registers).  It would fill the
remainder of the exact-match entries with the broadcast address (bug #2:
this would overwrite the last used entry).  If more than 4 multicast
addresses were configured, it would set up the hash table, write some
random crap to the MAC control register (bug #3) and finally walk off
the end of the list when filling the exact-match entries (bug #4).

All of this seems to be pointless, since it sets the promiscuous bit
when the interface is made promiscuous or if >4 multicast addresses
are enabled, and never clears it (bug #5, masking bug #2).

The recent(ish) changes to the multicast list fixed bug #4, but
completely removed the limit on iteration over the exact-match entries
(bug #6).

Bug #4 was reported as
<https://bugzilla.kernel.org/show_bug.cgi?id=15355> and more recently
as <http://bugs.debian.org/600155>.  Florian Fainelli attempted to fix
these in commit 3bcf8229a8, but that
actually dealt with bugs #1-3, bug #4 having been fixed in mainline at
that point.

That commit fixes the most important current bug #6.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: stable@kernel.org [2.6.35 only]
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-10-19 06:40:03 -07:00
..
2010-08-24 12:21:13 -07:00
2010-08-02 16:26:44 -07:00
2010-05-10 05:01:31 -07:00
2010-09-21 13:04:04 -07:00
2010-09-21 13:03:24 -07:00
2010-09-07 13:57:14 -07:00
2010-09-27 15:40:29 -07:00
2010-10-11 11:05:43 -07:00
…
…
2010-05-10 05:01:31 -07:00
…
2010-05-10 05:01:31 -07:00
…
2010-06-16 18:05:05 +02:00
2010-06-03 03:18:23 -07:00
…
…
…
…
2010-07-19 15:27:13 -07:00
…
2010-07-11 18:15:08 -07:00
…
2010-05-10 05:01:31 -07:00
…
2010-07-11 18:15:08 -07:00
2010-05-10 05:01:31 -07:00
…
2010-07-08 23:42:40 -07:00
2010-10-11 15:45:35 -07:00
…
…
…
2010-07-19 20:30:07 -07:00
2010-07-14 13:36:18 -07:00
2010-06-25 20:37:21 -07:00
2010-07-19 13:32:57 -07:00
2010-07-14 13:40:36 -07:00
2010-05-10 05:01:31 -07:00
…
2010-05-10 05:01:31 -07:00
…
…
…
…
…
2010-06-03 03:18:23 -07:00
…
…
…
2010-05-10 05:01:31 -07:00
2010-05-10 05:01:31 -07:00
2010-07-14 17:57:19 -07:00
…
…
…
…
…
…
…
2010-05-10 05:01:31 -07:00
…
…
2010-05-17 22:47:34 -07:00
…
2010-07-27 22:24:37 -07:00
2010-09-08 21:47:13 -07:00
2010-05-10 05:01:31 -07:00
…
…
2010-05-10 05:01:31 -07:00
…
…
…
2010-06-21 13:40:25 -07:00
…
2010-07-05 20:08:05 -07:00
2010-05-10 05:01:31 -07:00
…
2010-05-10 05:01:31 -07:00
…
…
2010-06-28 12:41:33 -07:00
2010-05-10 05:01:31 -07:00
2010-08-04 21:53:17 -07:00
2010-08-04 21:53:17 -07:00
2010-08-04 21:53:17 -07:00
…
2010-05-10 05:01:31 -07:00
2010-09-01 14:29:34 -07:00
…
2010-10-19 06:40:03 -07:00
2010-10-09 09:16:13 -07:00
2010-05-10 05:01:31 -07:00
…
2010-07-15 20:46:22 -07:00
2010-07-23 13:05:13 -07:00
2010-05-10 05:01:31 -07:00
2010-05-10 05:01:31 -07:00
…
2010-08-19 00:39:45 -07:00
…
…
…
2010-10-05 15:11:40 -07:00
2010-06-03 03:18:23 -07:00
2010-05-17 22:47:34 -07:00
…
2010-05-10 05:01:31 -07:00
2010-05-10 05:01:31 -07:00
…
…
2010-09-26 18:50:05 -07:00
2010-05-10 05:01:31 -07:00
…
2010-07-14 12:17:35 -07:00
2010-05-10 05:01:31 -07:00
…
2010-05-10 05:01:31 -07:00
…
2010-06-03 03:18:23 -07:00
2010-10-11 16:06:24 -07:00
2010-10-11 16:06:24 -07:00
2010-05-10 05:01:31 -07:00
…
2010-06-03 03:18:23 -07:00
2010-06-03 03:18:23 -07:00
2010-05-10 05:01:31 -07:00
2010-07-14 17:53:18 -07:00