lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 7 Mar 2014 02:10:01 +0000 From: "fugang.duan@...escale.com" <fugang.duan@...escale.com> To: Frank Li <lznuaa@...il.com>, Fabio Estevam <festevam@...il.com> CC: Stefan Wahren <stefan.wahren@...e.com>, David Miller <davem@...emloft.net>, "netdev@...r.kernel.org" <netdev@...r.kernel.org>, "linux-arm-kernel@...ts.arm.linux.org.uk" <linux-arm-kernel@...ts.arm.linux.org.uk>, Shawn Guo <shawn.guo@...aro.org>, "Fabio.Estevam@...escale.com" <Fabio.Estevam@...escale.com>, "Frank.Li@...escale.com" <Frank.Li@...escale.com>, Sascha Hauer <kernel@...gutronix.de> Subject: RE: [Bug] net/fec on i.MX28: promiscuous mode lost after reconnecting network cable From: Frank Li <lznuaa@...il.com> Data: Friday, March 07, 2014 1:43 AM >To: Fabio Estevam >Cc: Stefan Wahren; David Miller; netdev@...r.kernel.org; linux-arm- >kernel@...ts.arm.linux.org.uk; Shawn Guo; Estevam Fabio-R49496; Li Frank-B20596; >Duan Fugang-B38611; Sascha Hauer >Subject: Re: [Bug] net/fec on i.MX28: promiscuous mode lost after reconnecting >network cable > >On Thu, Mar 6, 2014 at 4:30 AM, Fabio Estevam <festevam@...il.com> wrote: >> Adding some more folks on Cc. >> >> On Thu, Mar 6, 2014 at 6:29 AM, Stefan Wahren <stefan.wahren@...e.com> wrote: >>> Hello, >>> >>> i'm using a i.MX28 custom board (I2SE Duckbill) with 2 different >>> Ethernet interfaces. Both interfaces should be used as bridge using >>> bridge utils. One Ethernet interface is the buildin fec and the other >>> is connect by spi. The board runs under Linux mainline 3.10. But the >>> following problem still occurs on 3.14-rc4. >>> >>> Here is the problem, if i disconnect and reconnect the Ethernet cable >>> on the buildin fec (eth0), the bridge says the port comes up, but it doesn't >work. >>> After that any traffic to the fec is okay, but traffic "through" the >>> bridge is lost. But i expect no traffic is lost, after reconnect the network >cable. >>> >>> If i reset the board without disconnecting the cables, the traffic "through" >>> the bridge works. If i force the promiscuous mode on the fec (eth0) >>> after the reconnect, the bridge works too: >>> >>> ifconfig eth0 promisc >>> >>> After that, i made some research and probably found the cause of the >>> problem. In the case that the bridge works (link state connected >>> since >>> reboot) the register HW_ENET_MAC_RCR of the i.MX28 returns 0x45EE011C >>> (PROM=1, promiscuous mode on). Then I disconnect the ethernet cable >>> and reconnect it. After that the register returns 0x45EE0114 (PROM=0, >>> promiscuous mode off) and the bridge doesn't work. >>> >>> Based on this information, i created a patch against Linux 3.10. I'm >>> not sure it's a good solution but it works. After a fec reset all >>> register values of HW_ENET_MAC_RCR must be restored, but fec_restart >>> do not handle them at all. So set_multicast_list is called after >>> fec_restart to restore the promiscuous mode of the fec. >>> >>> diff --git a/drivers/net/ethernet/freescale/fec_main.c >>> b/drivers/net/ethernet/freescale/fec_main.c >>> index d48099f..cb6b66e 100644 >>> --- a/drivers/net/ethernet/freescale/fec_main.c >>> +++ b/drivers/net/ethernet/freescale/fec_main.c >>> @@ -1063,6 +1063,8 @@ static void fec_get_mac(struct net_device >>> *ndev) >>> >>> /* >>> --------------------------------------------------------------------- >>> ---- */ >>> >>> +static void set_multicast_list(struct net_device *ndev); >>> + >>> /* >>> * Phy section >>> */ >>> @@ -1093,8 +1095,10 @@ static void fec_enet_adjust_link(struct >>> net_device >>> *ndev) >>> } >>> >>> /* if any of the above changed restart the FEC */ >>> - if (status_change) >>> + if (status_change) { >>> fec_restart(ndev, phy_dev->duplex); >>> + set_multicast_list(ndev); >>> + } >>> } else { >>> if (fep->link) { >>> fec_stop(ndev); >>> >>> Is this solution correct? > >There are many places to call fec_resart. >I suggest call set_multicase_list in fec_restart function. > Yes, we had called set_multicase_list() in fec_restart() function. The patch is redundant. >>> >>> Do you need more information? >>> >>> Best regards >>> Stefan Wahren >>> -- >>> To unsubscribe from this list: send the line "unsubscribe netdev" in >>> the body of a message to majordomo@...r.kernel.org More majordomo >>> info at http://vger.kernel.org/majordomo-info.html >> -- >> To unsubscribe from this list: send the line "unsubscribe netdev" in >> the body of a message to majordomo@...r.kernel.org More majordomo info >> at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists