kernel: bump 5.4 to 5.4.45
Fixes CVE-2020-10757 via upstream commit df4988aa1c96 ("mm: Fix mremap
not considering huge pmd devmap").
Resolved merge conflict in the following patches:
bcm27xx: 950-0128-gpiolib-Don-t-prevent-IRQ-usage-of-output-GPIOs.patch
Refreshed patches, removed upstreamed patch:
generic: 751-v5.8-net-dsa-mt7530-set-CPU-port-to-fallback-mode.patch
generic: 754-v5.7-net-dsa-mt7530-fix-roaming-from-DSA-user-ports.patch
Run tested: qemu-x86-64
Build tested: x86/64, imx6, sunxi/a53
Signed-off-by: Petr Štetiar <ynezz@true.cz>
This commit is contained in:
@@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -1151,6 +1151,64 @@ mt7530_port_vlan_del(struct dsa_switch *
|
||||
@@ -1153,6 +1153,64 @@ mt7530_port_vlan_del(struct dsa_switch *
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
.phylink_mac_config = mt7530_phylink_mac_config,
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -36,6 +36,9 @@ enum {
|
||||
@@ -37,6 +37,9 @@ enum {
|
||||
#define CPU_EN BIT(7)
|
||||
#define CPU_PORT(x) ((x) << 4)
|
||||
#define CPU_MASK (0xf << 4)
|
||||
@@ -103,7 +103,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
/* Registers for address table access */
|
||||
#define MT7530_ATA1 0x74
|
||||
@@ -141,6 +144,8 @@ enum mt7530_stp_state {
|
||||
@@ -142,6 +145,8 @@ enum mt7530_stp_state {
|
||||
|
||||
/* Register for port control */
|
||||
#define MT7530_PCR_P(x) (0x2004 + ((x) * 0x100))
|
||||
@@ -112,7 +112,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
#define PORT_VLAN(x) ((x) & 0x3)
|
||||
|
||||
enum mt7530_port_mode {
|
||||
@@ -457,6 +462,8 @@ struct mt7530_priv {
|
||||
@@ -464,6 +469,8 @@ struct mt7530_priv {
|
||||
phy_interface_t p6_interface;
|
||||
phy_interface_t p5_interface;
|
||||
unsigned int p5_intf_sel;
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
From 38152ea37d8bdaffa22603e0a5b5b86cfa8714c9 Mon Sep 17 00:00:00 2001
|
||||
From: DENG Qingfang <dqfext@gmail.com>
|
||||
Date: Wed, 13 May 2020 23:37:17 +0800
|
||||
Subject: net: dsa: mt7530: set CPU port to fallback mode
|
||||
|
||||
Currently, setting a bridge's self PVID to other value and deleting
|
||||
the default VID 1 renders untagged ports of that VLAN unable to talk to
|
||||
the CPU port:
|
||||
|
||||
bridge vlan add dev br0 vid 2 pvid untagged self
|
||||
bridge vlan del dev br0 vid 1 self
|
||||
bridge vlan add dev sw0p0 vid 2 pvid untagged
|
||||
bridge vlan del dev sw0p0 vid 1
|
||||
# br0 cannot send untagged frames out of sw0p0 anymore
|
||||
|
||||
That is because the CPU port is set to security mode and its PVID is
|
||||
still 1, and untagged frames are dropped due to VLAN member violation.
|
||||
|
||||
Set the CPU port to fallback mode so untagged frames can pass through.
|
||||
|
||||
Fixes: 83163f7dca56 ("net: dsa: mediatek: add VLAN support for MT7530")
|
||||
Signed-off-by: DENG Qingfang <dqfext@gmail.com>
|
||||
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/dsa/mt7530.c | 11 ++++++++---
|
||||
drivers/net/dsa/mt7530.h | 6 ++++++
|
||||
2 files changed, 14 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -821,10 +821,15 @@ mt7530_port_set_vlan_aware(struct dsa_sw
|
||||
PCR_MATRIX_MASK, PCR_MATRIX(MT7530_ALL_MEMBERS));
|
||||
|
||||
/* Trapped into security mode allows packet forwarding through VLAN
|
||||
- * table lookup.
|
||||
+ * table lookup. CPU port is set to fallback mode to let untagged
|
||||
+ * frames pass through.
|
||||
*/
|
||||
- mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
|
||||
- MT7530_PORT_SECURITY_MODE);
|
||||
+ if (dsa_is_cpu_port(ds, port))
|
||||
+ mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
|
||||
+ MT7530_PORT_FALLBACK_MODE);
|
||||
+ else
|
||||
+ mt7530_rmw(priv, MT7530_PCR_P(port), PCR_PORT_VLAN_MASK,
|
||||
+ MT7530_PORT_SECURITY_MODE);
|
||||
|
||||
/* Set the port as a user port which is to be able to recognize VID
|
||||
* from incoming packets before fetching entry within the VLAN table.
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -152,6 +152,12 @@ enum mt7530_port_mode {
|
||||
/* Port Matrix Mode: Frames are forwarded by the PCR_MATRIX members. */
|
||||
MT7530_PORT_MATRIX_MODE = PORT_VLAN(0),
|
||||
|
||||
+ /* Fallback Mode: Forward received frames with ingress ports that do
|
||||
+ * not belong to the VLAN member. Frames whose VID is not listed on
|
||||
+ * the VLAN table are forwarded by the PCR_MATRIX members.
|
||||
+ */
|
||||
+ MT7530_PORT_FALLBACK_MODE = PORT_VLAN(1),
|
||||
+
|
||||
/* Security Mode: Discard any frame due to ingress membership
|
||||
* violation or VID missed on the VLAN table.
|
||||
*/
|
||||
@@ -15,7 +15,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -1096,12 +1096,6 @@ mt7530_port_vlan_add(struct dsa_switch *
|
||||
@@ -1093,12 +1093,6 @@ mt7530_port_vlan_add(struct dsa_switch *
|
||||
struct mt7530_priv *priv = ds->priv;
|
||||
u16 vid;
|
||||
|
||||
@@ -28,7 +28,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mutex_lock(&priv->reg_mutex);
|
||||
|
||||
for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
|
||||
@@ -1127,12 +1121,6 @@ mt7530_port_vlan_del(struct dsa_switch *
|
||||
@@ -1124,12 +1118,6 @@ mt7530_port_vlan_del(struct dsa_switch *
|
||||
struct mt7530_priv *priv = ds->priv;
|
||||
u16 vid, pvid;
|
||||
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
mutex_lock(&priv->reg_mutex);
|
||||
|
||||
pvid = priv->ports[port].pvid;
|
||||
@@ -1245,6 +1233,7 @@ mt7530_setup(struct dsa_switch *ds)
|
||||
@@ -1242,6 +1230,7 @@ mt7530_setup(struct dsa_switch *ds)
|
||||
* as two netdev instances.
|
||||
*/
|
||||
dn = ds->ports[MT7530_CPU_PORT].master->dev.of_node->parent;
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
From 5e5502e012b8129e11be616acb0f9c34bc8f8adb Mon Sep 17 00:00:00 2001
|
||||
From: DENG Qingfang <dqfext@gmail.com>
|
||||
Date: Wed, 13 May 2020 23:10:16 +0800
|
||||
Subject: net: dsa: mt7530: fix roaming from DSA user ports
|
||||
|
||||
When a client moves from a DSA user port to a software port in a bridge,
|
||||
it cannot reach any other clients that connected to the DSA user ports.
|
||||
That is because SA learning on the CPU port is disabled, so the switch
|
||||
ignores the client's frames from the CPU port and still thinks it is at
|
||||
the user port.
|
||||
|
||||
Fix it by enabling SA learning on the CPU port.
|
||||
|
||||
To prevent the switch from learning from flooding frames from the CPU
|
||||
port, set skb->offload_fwd_mark to 1 for unicast and broadcast frames,
|
||||
and let the switch flood them instead of trapping to the CPU port.
|
||||
Multicast frames still need to be trapped to the CPU port for snooping,
|
||||
so set the SA_DIS bit of the MTK tag to 1 when transmitting those frames
|
||||
to disable SA learning.
|
||||
|
||||
Fixes: b8f126a8d543 ("net-next: dsa: add dsa support for Mediatek MT7530 switch")
|
||||
Signed-off-by: DENG Qingfang <dqfext@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/dsa/mt7530.c | 9 ++-------
|
||||
drivers/net/dsa/mt7530.h | 1 +
|
||||
net/dsa/tag_mtk.c | 15 +++++++++++++++
|
||||
3 files changed, 18 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/dsa/mt7530.c
|
||||
+++ b/drivers/net/dsa/mt7530.c
|
||||
@@ -639,11 +639,8 @@ mt7530_cpu_port_enable(struct mt7530_pri
|
||||
mt7530_write(priv, MT7530_PVC_P(port),
|
||||
PORT_SPEC_TAG);
|
||||
|
||||
- /* Disable auto learning on the cpu port */
|
||||
- mt7530_set(priv, MT7530_PSC_P(port), SA_DIS);
|
||||
-
|
||||
- /* Unknown unicast frame fordwarding to the cpu port */
|
||||
- mt7530_set(priv, MT7530_MFC, UNU_FFP(BIT(port)));
|
||||
+ /* Unknown multicast frame forwarding to the cpu port */
|
||||
+ mt7530_rmw(priv, MT7530_MFC, UNM_FFP_MASK, UNM_FFP(BIT(port)));
|
||||
|
||||
/* Set CPU port number */
|
||||
if (priv->id == ID_MT7621)
|
||||
@@ -1298,8 +1295,6 @@ mt7530_setup(struct dsa_switch *ds)
|
||||
/* Enable and reset MIB counters */
|
||||
mt7530_mib_reset(ds);
|
||||
|
||||
- mt7530_clear(priv, MT7530_MFC, UNU_FFP_MASK);
|
||||
-
|
||||
for (i = 0; i < MT7530_NUM_PORTS; i++) {
|
||||
/* Disable forwarding by default on all ports */
|
||||
mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK,
|
||||
--- a/drivers/net/dsa/mt7530.h
|
||||
+++ b/drivers/net/dsa/mt7530.h
|
||||
@@ -31,6 +31,7 @@ enum {
|
||||
#define MT7530_MFC 0x10
|
||||
#define BC_FFP(x) (((x) & 0xff) << 24)
|
||||
#define UNM_FFP(x) (((x) & 0xff) << 16)
|
||||
+#define UNM_FFP_MASK UNM_FFP(~0)
|
||||
#define UNU_FFP(x) (((x) & 0xff) << 8)
|
||||
#define UNU_FFP_MASK UNU_FFP(~0)
|
||||
#define CPU_EN BIT(7)
|
||||
--- a/net/dsa/tag_mtk.c
|
||||
+++ b/net/dsa/tag_mtk.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#define MTK_HDR_XMIT_TAGGED_TPID_8100 1
|
||||
#define MTK_HDR_RECV_SOURCE_PORT_MASK GENMASK(2, 0)
|
||||
#define MTK_HDR_XMIT_DP_BIT_MASK GENMASK(5, 0)
|
||||
+#define MTK_HDR_XMIT_SA_DIS BIT(6)
|
||||
|
||||
static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
@@ -22,6 +23,9 @@ static struct sk_buff *mtk_tag_xmit(stru
|
||||
struct dsa_port *dp = dsa_slave_to_port(dev);
|
||||
u8 *mtk_tag;
|
||||
bool is_vlan_skb = true;
|
||||
+ unsigned char *dest = eth_hdr(skb)->h_dest;
|
||||
+ bool is_multicast_skb = is_multicast_ether_addr(dest) &&
|
||||
+ !is_broadcast_ether_addr(dest);
|
||||
|
||||
/* Build the special tag after the MAC Source Address. If VLAN header
|
||||
* is present, it's required that VLAN header and special tag is
|
||||
@@ -47,6 +51,10 @@ static struct sk_buff *mtk_tag_xmit(stru
|
||||
MTK_HDR_XMIT_UNTAGGED;
|
||||
mtk_tag[1] = (1 << dp->index) & MTK_HDR_XMIT_DP_BIT_MASK;
|
||||
|
||||
+ /* Disable SA learning for multicast frames */
|
||||
+ if (unlikely(is_multicast_skb))
|
||||
+ mtk_tag[1] |= MTK_HDR_XMIT_SA_DIS;
|
||||
+
|
||||
/* Tag control information is kept for 802.1Q */
|
||||
if (!is_vlan_skb) {
|
||||
mtk_tag[2] = 0;
|
||||
@@ -61,6 +69,9 @@ static struct sk_buff *mtk_tag_rcv(struc
|
||||
{
|
||||
int port;
|
||||
__be16 *phdr, hdr;
|
||||
+ unsigned char *dest = eth_hdr(skb)->h_dest;
|
||||
+ bool is_multicast_skb = is_multicast_ether_addr(dest) &&
|
||||
+ !is_broadcast_ether_addr(dest);
|
||||
|
||||
if (unlikely(!pskb_may_pull(skb, MTK_HDR_LEN)))
|
||||
return NULL;
|
||||
@@ -86,6 +97,10 @@ static struct sk_buff *mtk_tag_rcv(struc
|
||||
if (!skb->dev)
|
||||
return NULL;
|
||||
|
||||
+ /* Only unicast or broadcast frames are offloaded */
|
||||
+ if (likely(!is_multicast_skb))
|
||||
+ skb->offload_fwd_mark = 1;
|
||||
+
|
||||
return skb;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
|
||||
;----------------------------------------------------------------
|
||||
--- a/arch/arc/kernel/setup.c
|
||||
+++ b/arch/arc/kernel/setup.c
|
||||
@@ -491,6 +491,8 @@ static inline bool uboot_arg_invalid(uns
|
||||
@@ -492,6 +492,8 @@ static inline bool uboot_arg_invalid(uns
|
||||
/* We always pass 0 as magic from U-boot */
|
||||
#define UBOOT_MAGIC_VALUE 0
|
||||
|
||||
@@ -51,7 +51,7 @@ Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
|
||||
void __init handle_uboot_args(void)
|
||||
{
|
||||
bool use_embedded_dtb = true;
|
||||
@@ -529,7 +531,7 @@ void __init handle_uboot_args(void)
|
||||
@@ -530,7 +532,7 @@ void __init handle_uboot_args(void)
|
||||
ignore_uboot_args:
|
||||
|
||||
if (use_embedded_dtb) {
|
||||
|
||||
@@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
__u16 tc_index; /* traffic control index */
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -5461,6 +5461,9 @@ static enum gro_result dev_gro_receive(s
|
||||
@@ -5471,6 +5471,9 @@ static enum gro_result dev_gro_receive(s
|
||||
int same_flow;
|
||||
int grow;
|
||||
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (netif_elide_gro(skb->dev))
|
||||
goto normal;
|
||||
|
||||
@@ -7254,6 +7257,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
@@ -7264,6 +7267,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
&upper_dev->adj_list.lower);
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||
struct net_device *upper_dev, bool master,
|
||||
void *upper_priv, void *upper_info,
|
||||
@@ -7304,6 +7349,7 @@ static int __netdev_upper_dev_link(struc
|
||||
@@ -7314,6 +7359,7 @@ static int __netdev_upper_dev_link(struc
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
ret = notifier_to_errno(ret);
|
||||
@@ -7397,6 +7443,7 @@ void netdev_upper_dev_unlink(struct net_
|
||||
@@ -7407,6 +7453,7 @@ void netdev_upper_dev_unlink(struct net_
|
||||
|
||||
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
||||
|
||||
@@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
|
||||
@@ -8127,6 +8174,7 @@ int dev_set_mac_address(struct net_devic
|
||||
@@ -8137,6 +8184,7 @@ int dev_set_mac_address(struct net_devic
|
||||
if (err)
|
||||
return err;
|
||||
dev->addr_assign_type = NET_ADDR_SET;
|
||||
|
||||
Reference in New Issue
Block a user