All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports
@ 2020-08-17 14:36 Pali Rohár
  2020-08-18  5:26 ` Stefan Roese
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Pali Rohár @ 2020-08-17 14:36 UTC (permalink / raw)
  To: u-boot

By default Topaz switch on Espressobin board forwards packets between all
ethernet ports, including CPU (port 0), wan (port 1) and lan (ports 2,3).

This default U-Boot setup is unsuitable for using Espressobin as router as
it opens security hole in forwarding all packets between wan and lan ports.
E.g. dhcp packets from wan network leaks to lan network during small time
window until U-Boot boots Linux kernel which loads network drivers which
disallows forwarding between wan and lan.

This patch fixes above problem. For Espressobin board prior putting Topaz
switch into forwarding mode, Topaz switch is reconfigured to allow
forwarding packets from wan and lan ports only to CPU port. This ensures
that packets from wan port are not forwarded to lan ports and vice-versa.
Packets from CPU port are still forwarded to all other ports, so U-Boot
network boot works with any ethernet port as before.

This problem was already discussed on Espressobin forum [1] and on
Marvell's github issue tracker [2]. As a workaround people on Espressobin
forum patched U-Boot to completely disable lan ports on Topaz switch which
prevented forwarding packets. That workaround had an issue that U-Boot was
unable to netboot via lan ports anymore. Change in this patch does not have
such issue.

[1] - https://web.archive.org/web/20191231164238/http://espressobin.net/forums/topic/boot-behavior-of-the-switch-and-security/
[2] - https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18

Signed-off-by: Pali Roh?r <pali@kernel.org>
---
 board/Marvell/mvebu_armada-37xx/board.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
index 9bea1986d4..031de318c6 100644
--- a/board/Marvell/mvebu_armada-37xx/board.c
+++ b/board/Marvell/mvebu_armada-37xx/board.c
@@ -37,20 +37,21 @@ DECLARE_GLOBAL_DATA_PTR;
  #define SW_SMI_CMD_REG_ADDR_OFF	0
  #define SW_SMI_CMD_DEV_ADDR_OFF	5
  #define SW_SMI_CMD_SMI_OP_OFF		10
  #define SW_SMI_CMD_SMI_MODE_OFF	12
  #define SW_SMI_CMD_SMI_BUSY_OFF	15
 
 /* Single-chip mode */
 /* Switch Port Registers */
 #define MVEBU_SW_LINK_CTRL_REG		(1)
 #define MVEBU_SW_PORT_CTRL_REG		(4)
+#define MVEBU_SW_PORT_BASE_VLAN		(6)
 
 /* Global 2 Registers */
 #define MVEBU_G2_SMI_PHY_CMD_REG	(24)
 #define MVEBU_G2_SMI_PHY_DATA_REG	(25)
 
 int board_early_init_f(void)
 {
 	return 0;
 }
 
@@ -200,22 +201,30 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
 /* Bring-up board-specific network stuff */
 int board_network_enable(struct mii_dev *bus)
 {
 	if (!of_machine_is_compatible("marvell,armada-3720-espressobin"))
 		return 0;
 
 	/*
 	 * FIXME: remove this code once Topaz driver gets available
 	 * A3720 Community Board Only
 	 * Configure Topaz switch (88E6341)
+	 * Restrict output to ports 1,2,3 only from port 0 (CPU)
 	 * Set port 0,1,2,3 to forwarding Mode (through Switch Port registers)
 	 */
+	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
+				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
+	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
+				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
+	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
+				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
+
 	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(0),
 				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
 	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
 				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
 	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
 				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
 	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
 				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
 
 	/* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports
  2020-08-17 14:36 [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports Pali Rohár
@ 2020-08-18  5:26 ` Stefan Roese
  2020-08-18  7:33   ` Pali Rohár
  2020-08-27 16:24 ` Andre Heider
  2020-08-31 13:01 ` Stefan Roese
  2 siblings, 1 reply; 6+ messages in thread
From: Stefan Roese @ 2020-08-18  5:26 UTC (permalink / raw)
  To: u-boot

On 17.08.20 16:36, Pali Roh?r wrote:
> By default Topaz switch on Espressobin board forwards packets between all
> ethernet ports, including CPU (port 0), wan (port 1) and lan (ports 2,3).
> 
> This default U-Boot setup is unsuitable for using Espressobin as router as
> it opens security hole in forwarding all packets between wan and lan ports.
> E.g. dhcp packets from wan network leaks to lan network during small time
> window until U-Boot boots Linux kernel which loads network drivers which
> disallows forwarding between wan and lan.
> 
> This patch fixes above problem. For Espressobin board prior putting Topaz
> switch into forwarding mode, Topaz switch is reconfigured to allow
> forwarding packets from wan and lan ports only to CPU port. This ensures
> that packets from wan port are not forwarded to lan ports and vice-versa.
> Packets from CPU port are still forwarded to all other ports, so U-Boot
> network boot works with any ethernet port as before.
> 
> This problem was already discussed on Espressobin forum [1] and on
> Marvell's github issue tracker [2]. As a workaround people on Espressobin
> forum patched U-Boot to completely disable lan ports on Topaz switch which
> prevented forwarding packets. That workaround had an issue that U-Boot was
> unable to netboot via lan ports anymore. Change in this patch does not have
> such issue.
> 
> [1] - https://web.archive.org/web/20191231164238/http://espressobin.net/forums/topic/boot-behavior-of-the-switch-and-security/
> [2] - https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18
> 
> Signed-off-by: Pali Roh?r <pali@kernel.org>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   board/Marvell/mvebu_armada-37xx/board.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index 9bea1986d4..031de318c6 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -37,20 +37,21 @@ DECLARE_GLOBAL_DATA_PTR;
>    #define SW_SMI_CMD_REG_ADDR_OFF	0
>    #define SW_SMI_CMD_DEV_ADDR_OFF	5
>    #define SW_SMI_CMD_SMI_OP_OFF		10
>    #define SW_SMI_CMD_SMI_MODE_OFF	12
>    #define SW_SMI_CMD_SMI_BUSY_OFF	15
>   
>   /* Single-chip mode */
>   /* Switch Port Registers */
>   #define MVEBU_SW_LINK_CTRL_REG		(1)
>   #define MVEBU_SW_PORT_CTRL_REG		(4)
> +#define MVEBU_SW_PORT_BASE_VLAN		(6)
>   
>   /* Global 2 Registers */
>   #define MVEBU_G2_SMI_PHY_CMD_REG	(24)
>   #define MVEBU_G2_SMI_PHY_DATA_REG	(25)
>   
>   int board_early_init_f(void)
>   {
>   	return 0;
>   }
>   
> @@ -200,22 +201,30 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
>   /* Bring-up board-specific network stuff */
>   int board_network_enable(struct mii_dev *bus)
>   {
>   	if (!of_machine_is_compatible("marvell,armada-3720-espressobin"))
>   		return 0;
>   
>   	/*
>   	 * FIXME: remove this code once Topaz driver gets available
>   	 * A3720 Community Board Only
>   	 * Configure Topaz switch (88E6341)
> +	 * Restrict output to ports 1,2,3 only from port 0 (CPU)
>   	 * Set port 0,1,2,3 to forwarding Mode (through Switch Port registers)
>   	 */
> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> +
>   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(0),
>   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
>   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
>   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
>   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>   
>   	/* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
> 


Viele Gr??e,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports
  2020-08-18  5:26 ` Stefan Roese
@ 2020-08-18  7:33   ` Pali Rohár
  2020-08-18 11:21     ` Stefan Roese
  0 siblings, 1 reply; 6+ messages in thread
From: Pali Rohár @ 2020-08-18  7:33 UTC (permalink / raw)
  To: u-boot

CCing Konstantin, you may have be interested in my following Espressobin patch.

BTW, ./scripts/get_maintainer.pl does not shows you as maintainer of
board/Marvell/mvebu_armada-37xx/board.c file, even it contains
Espressobin specific code.

On Tuesday 18 August 2020 07:26:36 Stefan Roese wrote:
> On 17.08.20 16:36, Pali Roh?r wrote:
> > By default Topaz switch on Espressobin board forwards packets between all
> > ethernet ports, including CPU (port 0), wan (port 1) and lan (ports 2,3).
> > 
> > This default U-Boot setup is unsuitable for using Espressobin as router as
> > it opens security hole in forwarding all packets between wan and lan ports.
> > E.g. dhcp packets from wan network leaks to lan network during small time
> > window until U-Boot boots Linux kernel which loads network drivers which
> > disallows forwarding between wan and lan.
> > 
> > This patch fixes above problem. For Espressobin board prior putting Topaz
> > switch into forwarding mode, Topaz switch is reconfigured to allow
> > forwarding packets from wan and lan ports only to CPU port. This ensures
> > that packets from wan port are not forwarded to lan ports and vice-versa.
> > Packets from CPU port are still forwarded to all other ports, so U-Boot
> > network boot works with any ethernet port as before.
> > 
> > This problem was already discussed on Espressobin forum [1] and on
> > Marvell's github issue tracker [2]. As a workaround people on Espressobin
> > forum patched U-Boot to completely disable lan ports on Topaz switch which
> > prevented forwarding packets. That workaround had an issue that U-Boot was
> > unable to netboot via lan ports anymore. Change in this patch does not have
> > such issue.
> > 
> > [1] - https://web.archive.org/web/20191231164238/http://espressobin.net/forums/topic/boot-behavior-of-the-switch-and-security/
> > [2] - https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18

FYI there is another forum thread [3] where people are applying another
"dirty workaround" for this Espressobin issue:

[3] - https://forum.armbian.com/topic/12635-espressobin-uboot-security-concerns-switch-init-portmask/

> > Signed-off-by: Pali Roh?r <pali@kernel.org>
> 
> Reviewed-by: Stefan Roese <sr@denx.de>
> 
> Thanks,
> Stefan

Stefan, would like to put above armbian forum reference to commit
message too?

> > ---
> >   board/Marvell/mvebu_armada-37xx/board.c | 9 +++++++++
> >   1 file changed, 9 insertions(+)
> > 
> > diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> > index 9bea1986d4..031de318c6 100644
> > --- a/board/Marvell/mvebu_armada-37xx/board.c
> > +++ b/board/Marvell/mvebu_armada-37xx/board.c
> > @@ -37,20 +37,21 @@ DECLARE_GLOBAL_DATA_PTR;
> >    #define SW_SMI_CMD_REG_ADDR_OFF	0
> >    #define SW_SMI_CMD_DEV_ADDR_OFF	5
> >    #define SW_SMI_CMD_SMI_OP_OFF		10
> >    #define SW_SMI_CMD_SMI_MODE_OFF	12
> >    #define SW_SMI_CMD_SMI_BUSY_OFF	15
> >   /* Single-chip mode */
> >   /* Switch Port Registers */
> >   #define MVEBU_SW_LINK_CTRL_REG		(1)
> >   #define MVEBU_SW_PORT_CTRL_REG		(4)
> > +#define MVEBU_SW_PORT_BASE_VLAN		(6)
> >   /* Global 2 Registers */
> >   #define MVEBU_G2_SMI_PHY_CMD_REG	(24)
> >   #define MVEBU_G2_SMI_PHY_DATA_REG	(25)
> >   int board_early_init_f(void)
> >   {
> >   	return 0;
> >   }
> > @@ -200,22 +201,30 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
> >   /* Bring-up board-specific network stuff */
> >   int board_network_enable(struct mii_dev *bus)
> >   {
> >   	if (!of_machine_is_compatible("marvell,armada-3720-espressobin"))
> >   		return 0;
> >   	/*
> >   	 * FIXME: remove this code once Topaz driver gets available
> >   	 * A3720 Community Board Only
> >   	 * Configure Topaz switch (88E6341)
> > +	 * Restrict output to ports 1,2,3 only from port 0 (CPU)
> >   	 * Set port 0,1,2,3 to forwarding Mode (through Switch Port registers)
> >   	 */
> > +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
> > +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> > +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
> > +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> > +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
> > +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> > +
> >   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(0),
> >   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
> >   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
> >   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
> >   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
> >   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
> >   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
> >   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
> >   	/* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
> > 
> 
> 
> Viele Gr??e,
> Stefan
> 
> -- 
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports
  2020-08-18  7:33   ` Pali Rohár
@ 2020-08-18 11:21     ` Stefan Roese
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Roese @ 2020-08-18 11:21 UTC (permalink / raw)
  To: u-boot

Hi Pali,

On 18.08.20 09:33, Pali Roh?r wrote:
> CCing Konstantin, you may have be interested in my following Espressobin patch.
> 
> BTW, ./scripts/get_maintainer.pl does not shows you as maintainer of
> board/Marvell/mvebu_armada-37xx/board.c file, even it contains
> Espressobin specific code.
> 
> On Tuesday 18 August 2020 07:26:36 Stefan Roese wrote:
>> On 17.08.20 16:36, Pali Roh?r wrote:
>>> By default Topaz switch on Espressobin board forwards packets between all
>>> ethernet ports, including CPU (port 0), wan (port 1) and lan (ports 2,3).
>>>
>>> This default U-Boot setup is unsuitable for using Espressobin as router as
>>> it opens security hole in forwarding all packets between wan and lan ports.
>>> E.g. dhcp packets from wan network leaks to lan network during small time
>>> window until U-Boot boots Linux kernel which loads network drivers which
>>> disallows forwarding between wan and lan.
>>>
>>> This patch fixes above problem. For Espressobin board prior putting Topaz
>>> switch into forwarding mode, Topaz switch is reconfigured to allow
>>> forwarding packets from wan and lan ports only to CPU port. This ensures
>>> that packets from wan port are not forwarded to lan ports and vice-versa.
>>> Packets from CPU port are still forwarded to all other ports, so U-Boot
>>> network boot works with any ethernet port as before.
>>>
>>> This problem was already discussed on Espressobin forum [1] and on
>>> Marvell's github issue tracker [2]. As a workaround people on Espressobin
>>> forum patched U-Boot to completely disable lan ports on Topaz switch which
>>> prevented forwarding packets. That workaround had an issue that U-Boot was
>>> unable to netboot via lan ports anymore. Change in this patch does not have
>>> such issue.
>>>
>>> [1] - https://web.archive.org/web/20191231164238/http://espressobin.net/forums/topic/boot-behavior-of-the-switch-and-security/
>>> [2] - https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18
> 
> FYI there is another forum thread [3] where people are applying another
> "dirty workaround" for this Espressobin issue:
> 
> [3] - https://forum.armbian.com/topic/12635-espressobin-uboot-security-concerns-switch-init-portmask/
> 
>>> Signed-off-by: Pali Roh?r <pali@kernel.org>
>>
>> Reviewed-by: Stefan Roese <sr@denx.de>
>>
>> Thanks,
>> Stefan
> 
> Stefan, would like to put above armbian forum reference to commit
> message too?

I'll try to think of it and add it to the commit text, when applying
this patch.

Thanks,
Stefan

>>> ---
>>>    board/Marvell/mvebu_armada-37xx/board.c | 9 +++++++++
>>>    1 file changed, 9 insertions(+)
>>>
>>> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
>>> index 9bea1986d4..031de318c6 100644
>>> --- a/board/Marvell/mvebu_armada-37xx/board.c
>>> +++ b/board/Marvell/mvebu_armada-37xx/board.c
>>> @@ -37,20 +37,21 @@ DECLARE_GLOBAL_DATA_PTR;
>>>     #define SW_SMI_CMD_REG_ADDR_OFF	0
>>>     #define SW_SMI_CMD_DEV_ADDR_OFF	5
>>>     #define SW_SMI_CMD_SMI_OP_OFF		10
>>>     #define SW_SMI_CMD_SMI_MODE_OFF	12
>>>     #define SW_SMI_CMD_SMI_BUSY_OFF	15
>>>    /* Single-chip mode */
>>>    /* Switch Port Registers */
>>>    #define MVEBU_SW_LINK_CTRL_REG		(1)
>>>    #define MVEBU_SW_PORT_CTRL_REG		(4)
>>> +#define MVEBU_SW_PORT_BASE_VLAN		(6)
>>>    /* Global 2 Registers */
>>>    #define MVEBU_G2_SMI_PHY_CMD_REG	(24)
>>>    #define MVEBU_G2_SMI_PHY_DATA_REG	(25)
>>>    int board_early_init_f(void)
>>>    {
>>>    	return 0;
>>>    }
>>> @@ -200,22 +201,30 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
>>>    /* Bring-up board-specific network stuff */
>>>    int board_network_enable(struct mii_dev *bus)
>>>    {
>>>    	if (!of_machine_is_compatible("marvell,armada-3720-espressobin"))
>>>    		return 0;
>>>    	/*
>>>    	 * FIXME: remove this code once Topaz driver gets available
>>>    	 * A3720 Community Board Only
>>>    	 * Configure Topaz switch (88E6341)
>>> +	 * Restrict output to ports 1,2,3 only from port 0 (CPU)
>>>    	 * Set port 0,1,2,3 to forwarding Mode (through Switch Port registers)
>>>    	 */
>>> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
>>> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
>>> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
>>> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
>>> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
>>> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
>>> +
>>>    	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(0),
>>>    				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>>>    	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
>>>    				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>>>    	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
>>>    				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>>>    	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
>>>    				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>>>    	/* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
>>>
>>
>>
>> Viele Gr??e,
>> Stefan
>>
>> -- 
>> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
>> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
>> Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


Viele Gr??e,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports
  2020-08-17 14:36 [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports Pali Rohár
  2020-08-18  5:26 ` Stefan Roese
@ 2020-08-27 16:24 ` Andre Heider
  2020-08-31 13:01 ` Stefan Roese
  2 siblings, 0 replies; 6+ messages in thread
From: Andre Heider @ 2020-08-27 16:24 UTC (permalink / raw)
  To: u-boot

On 17/08/2020 16:36, Pali Roh?r wrote:
> By default Topaz switch on Espressobin board forwards packets between all
> ethernet ports, including CPU (port 0), wan (port 1) and lan (ports 2,3).
> 
> This default U-Boot setup is unsuitable for using Espressobin as router as
> it opens security hole in forwarding all packets between wan and lan ports.
> E.g. dhcp packets from wan network leaks to lan network during small time
> window until U-Boot boots Linux kernel which loads network drivers which
> disallows forwarding between wan and lan.
> 
> This patch fixes above problem. For Espressobin board prior putting Topaz
> switch into forwarding mode, Topaz switch is reconfigured to allow
> forwarding packets from wan and lan ports only to CPU port. This ensures
> that packets from wan port are not forwarded to lan ports and vice-versa.
> Packets from CPU port are still forwarded to all other ports, so U-Boot
> network boot works with any ethernet port as before.
> 
> This problem was already discussed on Espressobin forum [1] and on
> Marvell's github issue tracker [2]. As a workaround people on Espressobin
> forum patched U-Boot to completely disable lan ports on Topaz switch which
> prevented forwarding packets. That workaround had an issue that U-Boot was
> unable to netboot via lan ports anymore. Change in this patch does not have
> such issue.
> 
> [1] - https://web.archive.org/web/20191231164238/http://espressobin.net/forums/topic/boot-behavior-of-the-switch-and-security/
> [2] - https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18
> 
> Signed-off-by: Pali Roh?r <pali@kernel.org>

Tested-by: Andre Heider <a.heider@gmail.com>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports
  2020-08-17 14:36 [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports Pali Rohár
  2020-08-18  5:26 ` Stefan Roese
  2020-08-27 16:24 ` Andre Heider
@ 2020-08-31 13:01 ` Stefan Roese
  2 siblings, 0 replies; 6+ messages in thread
From: Stefan Roese @ 2020-08-31 13:01 UTC (permalink / raw)
  To: u-boot

On 17.08.20 16:36, Pali Roh?r wrote:
> By default Topaz switch on Espressobin board forwards packets between all
> ethernet ports, including CPU (port 0), wan (port 1) and lan (ports 2,3).
> 
> This default U-Boot setup is unsuitable for using Espressobin as router as
> it opens security hole in forwarding all packets between wan and lan ports.
> E.g. dhcp packets from wan network leaks to lan network during small time
> window until U-Boot boots Linux kernel which loads network drivers which
> disallows forwarding between wan and lan.
> 
> This patch fixes above problem. For Espressobin board prior putting Topaz
> switch into forwarding mode, Topaz switch is reconfigured to allow
> forwarding packets from wan and lan ports only to CPU port. This ensures
> that packets from wan port are not forwarded to lan ports and vice-versa.
> Packets from CPU port are still forwarded to all other ports, so U-Boot
> network boot works with any ethernet port as before.
> 
> This problem was already discussed on Espressobin forum [1] and on
> Marvell's github issue tracker [2]. As a workaround people on Espressobin
> forum patched U-Boot to completely disable lan ports on Topaz switch which
> prevented forwarding packets. That workaround had an issue that U-Boot was
> unable to netboot via lan ports anymore. Change in this patch does not have
> such issue.
> 
> [1] - https://web.archive.org/web/20191231164238/http://espressobin.net/forums/topic/boot-behavior-of-the-switch-and-security/
> [2] - https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18
> 
> Signed-off-by: Pali Roh?r <pali@kernel.org>

Applied to u-boot-marvell/master

Thanks,
Stefan

> ---
>   board/Marvell/mvebu_armada-37xx/board.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index 9bea1986d4..031de318c6 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -37,20 +37,21 @@ DECLARE_GLOBAL_DATA_PTR;
>    #define SW_SMI_CMD_REG_ADDR_OFF	0
>    #define SW_SMI_CMD_DEV_ADDR_OFF	5
>    #define SW_SMI_CMD_SMI_OP_OFF		10
>    #define SW_SMI_CMD_SMI_MODE_OFF	12
>    #define SW_SMI_CMD_SMI_BUSY_OFF	15
>   
>   /* Single-chip mode */
>   /* Switch Port Registers */
>   #define MVEBU_SW_LINK_CTRL_REG		(1)
>   #define MVEBU_SW_PORT_CTRL_REG		(4)
> +#define MVEBU_SW_PORT_BASE_VLAN		(6)
>   
>   /* Global 2 Registers */
>   #define MVEBU_G2_SMI_PHY_CMD_REG	(24)
>   #define MVEBU_G2_SMI_PHY_DATA_REG	(25)
>   
>   int board_early_init_f(void)
>   {
>   	return 0;
>   }
>   
> @@ -200,22 +201,30 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
>   /* Bring-up board-specific network stuff */
>   int board_network_enable(struct mii_dev *bus)
>   {
>   	if (!of_machine_is_compatible("marvell,armada-3720-espressobin"))
>   		return 0;
>   
>   	/*
>   	 * FIXME: remove this code once Topaz driver gets available
>   	 * A3720 Community Board Only
>   	 * Configure Topaz switch (88E6341)
> +	 * Restrict output to ports 1,2,3 only from port 0 (CPU)
>   	 * Set port 0,1,2,3 to forwarding Mode (through Switch Port registers)
>   	 */
> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> +	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
> +				  MVEBU_SW_PORT_BASE_VLAN, BIT(0));
> +
>   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(0),
>   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(1),
>   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(2),
>   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>   	mii_multi_chip_mode_write(bus, 1, MVEBU_PORT_CTRL_SMI_ADDR(3),
>   				  MVEBU_SW_PORT_CTRL_REG, 0x7f);
>   
>   	/* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
> 


Viele Gr??e,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-08-31 13:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-17 14:36 [PATCH] arm: mvebu: Espressobin: Disallow forwarding packets between wan and lan ports Pali Rohár
2020-08-18  5:26 ` Stefan Roese
2020-08-18  7:33   ` Pali Rohár
2020-08-18 11:21     ` Stefan Roese
2020-08-27 16:24 ` Andre Heider
2020-08-31 13:01 ` Stefan Roese

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.