Skip to content

Commit 2c7e63d

Browse files
committed
Merge tag 'net-7.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni: "Including fixes from CAN and netfilter. Current release - regressions: - eth: mana: Null service_wq on setup error to prevent double destroy Previous releases - regressions: - nexthop: fix percpu use-after-free in remove_nh_grp_entry - sched: teql: fix NULL pointer dereference in iptunnel_xmit on TEQL slave xmit - bpf: fix nd_tbl NULL dereference when IPv6 is disabled - neighbour: restore protocol != 0 check in pneigh update - tipc: fix divide-by-zero in tipc_sk_filter_connect() - eth: - mlx5: - fix crash when moving to switchdev mode - fix DMA FIFO desync on error CQE SQ recovery - iavf: fix PTP use-after-free during reset - bonding: fix type confusion in bond_setup_by_slave() - lan78xx: fix WARN in __netif_napi_del_locked on disconnect Previous releases - always broken: - core: add xmit recursion limit to tunnel xmit functions - net-shapers: don't free reply skb after genlmsg_reply() - netfilter: - fix stack out-of-bounds read in pipapo_drop() - fix OOB read in nfnl_cthelper_dump_table() - mctp: - fix device leak on probe failure - i2c: fix skb memory leak in receive path - can: keep the max bitrate error at 5% - eth: - bonding: fix nd_tbl NULL dereference when IPv6 is disabled - bnxt_en: fix RSS table size check when changing ethtool channels - amd-xgbe: prevent CRC errors during RX adaptation with AN disabled - octeontx2-af: devlink: fix NIX RAS reporter recovery condition" * tag 'net-7.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (71 commits) net: prevent NULL deref in ip[6]tunnel_xmit() octeontx2-af: devlink: fix NIX RAS reporter to use RAS interrupt status octeontx2-af: devlink: fix NIX RAS reporter recovery condition net: ethernet: ti: am65-cpsw-nuss: Fix rx_filter value for PTP support net/mana: Null service_wq on setup error to prevent double destroy selftests: rtnetlink: add neighbour update test neighbour: restore protocol != 0 check in pneigh update net: dsa: realtek: Fix LED group port bit for non-zero LED group tipc: fix divide-by-zero in tipc_sk_filter_connect() net: dsa: microchip: Fix error path in PTP IRQ setup bpf: bpf_out_neigh_v6: Fix nd_tbl NULL dereference when IPv6 is disabled bpf: bpf_out_neigh_v4: Fix nd_tbl NULL dereference when IPv6 is disabled net: bonding: Fix nd_tbl NULL dereference when IPv6 is disabled ipv6: move the disable_ipv6_mod knob to core code net: bcmgenet: fix broken EEE by converting to phylib-managed state net-shapers: don't free reply skb after genlmsg_reply() net: dsa: mxl862xx: don't set user_mii_bus net: ethernet: arc: emac: quiesce interrupts before requesting IRQ page_pool: store detach_time as ktime_t to avoid false-negatives net: macb: Shuffle the tx ring before enabling tx ...
2 parents 281f36d + c38b8f5 commit 2c7e63d

77 files changed

Lines changed: 667 additions & 326 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

MAINTAINERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16358,7 +16358,6 @@ F: net/dsa/tag_mtk.c
1635816358

1635916359
MEDIATEK T7XX 5G WWAN MODEM DRIVER
1636016360
M: Chandrashekar Devegowda <[email protected]>
16361-
R: Chiranjeevi Rapolu <[email protected]>
1636216361
R: Liu Haijun <[email protected]>
1636316362
R: Ricardo Martinez <[email protected]>
1636416363
@@ -25759,6 +25758,7 @@ F: include/net/pkt_cls.h
2575925758
F: include/net/pkt_sched.h
2576025759
F: include/net/sch_priv.h
2576125760
F: include/net/tc_act/
25761+
F: include/net/tc_wrapper.h
2576225762
F: include/uapi/linux/pkt_cls.h
2576325763
F: include/uapi/linux/pkt_sched.h
2576425764
F: include/uapi/linux/tc_act/

drivers/net/bonding/bond_main.c

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1509,14 +1509,59 @@ static netdev_features_t bond_fix_features(struct net_device *dev,
15091509
return features;
15101510
}
15111511

1512+
static int bond_header_create(struct sk_buff *skb, struct net_device *bond_dev,
1513+
unsigned short type, const void *daddr,
1514+
const void *saddr, unsigned int len)
1515+
{
1516+
struct bonding *bond = netdev_priv(bond_dev);
1517+
const struct header_ops *slave_ops;
1518+
struct slave *slave;
1519+
int ret = 0;
1520+
1521+
rcu_read_lock();
1522+
slave = rcu_dereference(bond->curr_active_slave);
1523+
if (slave) {
1524+
slave_ops = READ_ONCE(slave->dev->header_ops);
1525+
if (slave_ops && slave_ops->create)
1526+
ret = slave_ops->create(skb, slave->dev,
1527+
type, daddr, saddr, len);
1528+
}
1529+
rcu_read_unlock();
1530+
return ret;
1531+
}
1532+
1533+
static int bond_header_parse(const struct sk_buff *skb, unsigned char *haddr)
1534+
{
1535+
struct bonding *bond = netdev_priv(skb->dev);
1536+
const struct header_ops *slave_ops;
1537+
struct slave *slave;
1538+
int ret = 0;
1539+
1540+
rcu_read_lock();
1541+
slave = rcu_dereference(bond->curr_active_slave);
1542+
if (slave) {
1543+
slave_ops = READ_ONCE(slave->dev->header_ops);
1544+
if (slave_ops && slave_ops->parse)
1545+
ret = slave_ops->parse(skb, haddr);
1546+
}
1547+
rcu_read_unlock();
1548+
return ret;
1549+
}
1550+
1551+
static const struct header_ops bond_header_ops = {
1552+
.create = bond_header_create,
1553+
.parse = bond_header_parse,
1554+
};
1555+
15121556
static void bond_setup_by_slave(struct net_device *bond_dev,
15131557
struct net_device *slave_dev)
15141558
{
15151559
bool was_up = !!(bond_dev->flags & IFF_UP);
15161560

15171561
dev_close(bond_dev);
15181562

1519-
bond_dev->header_ops = slave_dev->header_ops;
1563+
bond_dev->header_ops = slave_dev->header_ops ?
1564+
&bond_header_ops : NULL;
15201565

15211566
bond_dev->type = slave_dev->type;
15221567
bond_dev->hard_header_len = slave_dev->hard_header_len;
@@ -2801,8 +2846,14 @@ static void bond_miimon_commit(struct bonding *bond)
28012846

28022847
continue;
28032848

2849+
case BOND_LINK_FAIL:
2850+
case BOND_LINK_BACK:
2851+
slave_dbg(bond->dev, slave->dev, "link_new_state %d on slave\n",
2852+
slave->link_new_state);
2853+
continue;
2854+
28042855
default:
2805-
slave_err(bond->dev, slave->dev, "invalid new link %d on slave\n",
2856+
slave_err(bond->dev, slave->dev, "invalid link_new_state %d on slave\n",
28062857
slave->link_new_state);
28072858
bond_propose_link_state(slave, BOND_LINK_NOCHANGE);
28082859

@@ -3377,7 +3428,7 @@ int bond_rcv_validate(const struct sk_buff *skb, struct bonding *bond,
33773428
} else if (is_arp) {
33783429
return bond_arp_rcv(skb, bond, slave);
33793430
#if IS_ENABLED(CONFIG_IPV6)
3380-
} else if (is_ipv6) {
3431+
} else if (is_ipv6 && likely(ipv6_mod_enabled())) {
33813432
return bond_na_rcv(skb, bond, slave);
33823433
#endif
33833434
} else {
@@ -5069,13 +5120,18 @@ static void bond_set_slave_arr(struct bonding *bond,
50695120
{
50705121
struct bond_up_slave *usable, *all;
50715122

5072-
usable = rtnl_dereference(bond->usable_slaves);
5073-
rcu_assign_pointer(bond->usable_slaves, usable_slaves);
5074-
kfree_rcu(usable, rcu);
5075-
50765123
all = rtnl_dereference(bond->all_slaves);
50775124
rcu_assign_pointer(bond->all_slaves, all_slaves);
50785125
kfree_rcu(all, rcu);
5126+
5127+
if (BOND_MODE(bond) == BOND_MODE_BROADCAST) {
5128+
kfree_rcu(usable_slaves, rcu);
5129+
return;
5130+
}
5131+
5132+
usable = rtnl_dereference(bond->usable_slaves);
5133+
rcu_assign_pointer(bond->usable_slaves, usable_slaves);
5134+
kfree_rcu(usable, rcu);
50795135
}
50805136

50815137
static void bond_reset_slave_arr(struct bonding *bond)

drivers/net/caif/caif_serial.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ static void ser_release(struct work_struct *work)
297297
dev_close(ser->dev);
298298
unregister_netdevice(ser->dev);
299299
debugfs_deinit(ser);
300+
tty_kref_put(tty->link);
300301
tty_kref_put(tty);
301302
}
302303
rtnl_unlock();
@@ -331,6 +332,7 @@ static int ldisc_open(struct tty_struct *tty)
331332

332333
ser = netdev_priv(dev);
333334
ser->tty = tty_kref_get(tty);
335+
tty_kref_get(tty->link);
334336
ser->dev = dev;
335337
debugfs_init(ser, tty);
336338
tty->receive_room = 4096;
@@ -339,6 +341,7 @@ static int ldisc_open(struct tty_struct *tty)
339341
rtnl_lock();
340342
result = register_netdevice(dev);
341343
if (result) {
344+
tty_kref_put(tty->link);
342345
tty_kref_put(tty);
343346
rtnl_unlock();
344347
free_netdev(dev);

drivers/net/can/dev/calc_bittiming.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <linux/units.h>
99
#include <linux/can/dev.h>
1010

11-
#define CAN_CALC_MAX_ERROR 50 /* in one-tenth of a percent */
11+
#define CAN_CALC_MAX_ERROR 500 /* max error 5% */
1212

1313
/* CiA recommended sample points for Non Return to Zero encoding. */
1414
static int can_calc_sample_point_nrz(const struct can_bittiming *bt)

drivers/net/can/spi/hi311x.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,9 @@ static int hi3110_open(struct net_device *net)
755755
return ret;
756756

757757
mutex_lock(&priv->hi3110_lock);
758-
hi3110_power_enable(priv->transceiver, 1);
758+
ret = hi3110_power_enable(priv->transceiver, 1);
759+
if (ret)
760+
goto out_close_candev;
759761

760762
priv->force_quit = 0;
761763
priv->tx_skb = NULL;
@@ -790,6 +792,7 @@ static int hi3110_open(struct net_device *net)
790792
hi3110_hw_sleep(spi);
791793
out_close:
792794
hi3110_power_enable(priv->transceiver, 0);
795+
out_close_candev:
793796
close_candev(net);
794797
mutex_unlock(&priv->hi3110_lock);
795798
return ret;

drivers/net/dsa/microchip/ksz_ptp.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,6 +1108,7 @@ static int ksz_ptp_msg_irq_setup(struct ksz_port *port, u8 n)
11081108
const struct ksz_dev_ops *ops = port->ksz_dev->dev_ops;
11091109
struct ksz_irq *ptpirq = &port->ptpirq;
11101110
struct ksz_ptp_irq *ptpmsg_irq;
1111+
int ret;
11111112

11121113
ptpmsg_irq = &port->ptpmsg_irq[n];
11131114
ptpmsg_irq->num = irq_create_mapping(ptpirq->domain, n);
@@ -1119,9 +1120,13 @@ static int ksz_ptp_msg_irq_setup(struct ksz_port *port, u8 n)
11191120

11201121
strscpy(ptpmsg_irq->name, name[n]);
11211122

1122-
return request_threaded_irq(ptpmsg_irq->num, NULL,
1123-
ksz_ptp_msg_thread_fn, IRQF_ONESHOT,
1124-
ptpmsg_irq->name, ptpmsg_irq);
1123+
ret = request_threaded_irq(ptpmsg_irq->num, NULL,
1124+
ksz_ptp_msg_thread_fn, IRQF_ONESHOT,
1125+
ptpmsg_irq->name, ptpmsg_irq);
1126+
if (ret)
1127+
irq_dispose_mapping(ptpmsg_irq->num);
1128+
1129+
return ret;
11251130
}
11261131

11271132
int ksz_ptp_irq_setup(struct dsa_switch *ds, u8 p)

drivers/net/dsa/mxl862xx/mxl862xx.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ static int mxl862xx_setup_mdio(struct dsa_switch *ds)
149149
return -ENOMEM;
150150

151151
bus->priv = priv;
152-
ds->user_mii_bus = bus;
153152
bus->name = KBUILD_MODNAME "-mii";
154153
snprintf(bus->id, MII_BUS_ID_SIZE, "%s-mii", dev_name(dev));
155154
bus->read_c45 = mxl862xx_phy_read_c45_mii_bus;

drivers/net/dsa/realtek/rtl8365mb.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,8 +1480,7 @@ static void rtl8365mb_stats_update(struct realtek_priv *priv, int port)
14801480

14811481
stats->rx_packets = cnt[RTL8365MB_MIB_ifInUcastPkts] +
14821482
cnt[RTL8365MB_MIB_ifInMulticastPkts] +
1483-
cnt[RTL8365MB_MIB_ifInBroadcastPkts] -
1484-
cnt[RTL8365MB_MIB_ifOutDiscards];
1483+
cnt[RTL8365MB_MIB_ifInBroadcastPkts];
14851484

14861485
stats->tx_packets = cnt[RTL8365MB_MIB_ifOutUcastPkts] +
14871486
cnt[RTL8365MB_MIB_ifOutMulticastPkts] +

drivers/net/dsa/realtek/rtl8366rb-leds.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ static inline u32 rtl8366rb_led_group_port_mask(u8 led_group, u8 port)
1212
case 0:
1313
return FIELD_PREP(RTL8366RB_LED_0_X_CTRL_MASK, BIT(port));
1414
case 1:
15-
return FIELD_PREP(RTL8366RB_LED_0_X_CTRL_MASK, BIT(port));
15+
return FIELD_PREP(RTL8366RB_LED_X_1_CTRL_MASK, BIT(port));
1616
case 2:
17-
return FIELD_PREP(RTL8366RB_LED_0_X_CTRL_MASK, BIT(port));
17+
return FIELD_PREP(RTL8366RB_LED_2_X_CTRL_MASK, BIT(port));
1818
case 3:
19-
return FIELD_PREP(RTL8366RB_LED_0_X_CTRL_MASK, BIT(port));
19+
return FIELD_PREP(RTL8366RB_LED_X_3_CTRL_MASK, BIT(port));
2020
default:
2121
return 0;
2222
}

drivers/net/dsa/sja1105/sja1105_main.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2339,14 +2339,13 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
23392339
goto out;
23402340
}
23412341

2342+
rc = sja1105_reload_cbs(priv);
2343+
2344+
out:
23422345
dsa_switch_for_each_available_port(dp, ds)
23432346
if (dp->pl)
23442347
phylink_replay_link_end(dp->pl);
23452348

2346-
rc = sja1105_reload_cbs(priv);
2347-
if (rc < 0)
2348-
goto out;
2349-
out:
23502349
mutex_unlock(&priv->mgmt_lock);
23512350
mutex_unlock(&priv->fdb_lock);
23522351

0 commit comments

Comments
 (0)