Skip to content

Commit 4003c9e

Browse files
committed
Merge tag 'net-6.14-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni: "Including fixes from netfilter, bluetooth and wireless. No known regressions outstanding. Current release - regressions: - wifi: nl80211: fix assoc link handling - eth: lan78xx: sanitize return values of register read/write functions Current release - new code bugs: - ethtool: tsinfo: fix dump command - bluetooth: btusb: configure altsetting for HCI_USER_CHANNEL - eth: mlx5: DR, use the right action structs for STEv3 Previous releases - regressions: - netfilter: nf_tables: make destruction work queue pernet - gre: fix IPv6 link-local address generation. - wifi: iwlwifi: fix TSO preparation - bluetooth: revert "bluetooth: hci_core: fix sleeping function called from invalid context" - ovs: revert "openvswitch: switch to per-action label counting in conntrack" - eth: - ice: fix switchdev slow-path in LAG - bonding: fix incorrect MAC address setting to receive NS messages Previous releases - always broken: - core: prevent TX of unreadable skbs - sched: prevent creation of classes with TC_H_ROOT - netfilter: nft_exthdr: fix offset with ipv4_find_option() - wifi: cfg80211: cancel wiphy_work before freeing wiphy - mctp: copy headers if cloned - phy: nxp-c45-tja11xx: add errata for TJA112XA/B - eth: - bnxt: fix kernel panic in the bnxt_get_queue_stats{rx | tx} - mlx5: bridge, fix the crash caused by LAG state check" * tag 'net-6.14-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (65 commits) net: mana: cleanup mana struct after debugfs_remove() net/mlx5e: Prevent bridge link show failure for non-eswitch-allowed devices net/mlx5: Bridge, fix the crash caused by LAG state check net/mlx5: Lag, Check shared fdb before creating MultiPort E-Switch net/mlx5: Fix incorrect IRQ pool usage when releasing IRQs net/mlx5: HWS, Rightsize bwc matcher priority net/mlx5: DR, use the right action structs for STEv3 Revert "openvswitch: switch to per-action label counting in conntrack" net: openvswitch: remove misbehaving actions length check selftests: Add IPv6 link-local address generation tests for GRE devices. gre: Fix IPv6 link-local address generation. netfilter: nft_exthdr: fix offset with ipv4_find_option() selftests/tc-testing: Add a test case for DRR class with TC_H_ROOT net_sched: Prevent creation of classes with TC_H_ROOT ipvs: prevent integer overflow in do_ip_vs_get_ctl() selftests: netfilter: skip br_netfilter queue tests if kernel is tainted netfilter: nf_conncount: Fully initialize struct nf_conncount_tuple in insert_tree() wifi: mac80211: fix MPDU length parsing for EHT 5/6 GHz qlcnic: fix memory leak issues in qlcnic_sriov_common.c rtase: Fix improper release of ring list entries in rtase_sw_reset ...
2 parents 8f7617f + 2409fa6 commit 4003c9e

Some content is hidden

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

86 files changed

+1252
-361
lines changed

MAINTAINERS

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ F: include/net/ieee80211_radiotap.h
124124
F: include/net/iw_handler.h
125125
F: include/net/wext.h
126126
F: include/uapi/linux/nl80211.h
127+
N: include/uapi/linux/nl80211-.*
127128
F: include/uapi/linux/wireless.h
128129
F: net/wireless/
129130

@@ -514,7 +515,7 @@ F: drivers/hwmon/adm1029.c
514515
ADM8211 WIRELESS DRIVER
515516
L: linux-wireless@vger.kernel.org
516517
S: Orphan
517-
F: drivers/net/wireless/admtek/adm8211.*
518+
F: drivers/net/wireless/admtek/
518519

519520
ADP1050 HARDWARE MONITOR DRIVER
520521
M: Radu Sabau <radu.sabau@analog.com>
@@ -6207,7 +6208,7 @@ F: Documentation/process/cve.rst
62076208

62086209
CW1200 WLAN driver
62096210
S: Orphan
6210-
F: drivers/net/wireless/st/cw1200/
6211+
F: drivers/net/wireless/st/
62116212
F: include/linux/platform_data/net-cw1200.h
62126213

62136214
CX18 VIDEO4LINUX DRIVER
@@ -13994,6 +13995,7 @@ MARVELL LIBERTAS WIRELESS DRIVER
1399413995
L: libertas-dev@lists.infradead.org
1399513996
S: Orphan
1399613997
F: drivers/net/wireless/marvell/libertas/
13998+
F: drivers/net/wireless/marvell/libertas_tf/
1399713999

1399814000
MARVELL MACCHIATOBIN SUPPORT
1399914001
M: Russell King <linux@armlinux.org.uk>
@@ -15663,7 +15665,7 @@ M: Ajay Singh <ajay.kathat@microchip.com>
1566315665
M: Claudiu Beznea <claudiu.beznea@tuxon.dev>
1566415666
L: linux-wireless@vger.kernel.org
1566515667
S: Supported
15666-
F: drivers/net/wireless/microchip/wilc1000/
15668+
F: drivers/net/wireless/microchip/
1566715669

1566815670
MICROSEMI MIPS SOCS
1566915671
M: Alexandre Belloni <alexandre.belloni@bootlin.com>
@@ -16449,6 +16451,23 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git
1644916451
T: git git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git
1645016452
F: Documentation/devicetree/bindings/net/wireless/
1645116453
F: drivers/net/wireless/
16454+
X: drivers/net/wireless/ath/
16455+
X: drivers/net/wireless/broadcom/
16456+
X: drivers/net/wireless/intel/
16457+
X: drivers/net/wireless/intersil/
16458+
X: drivers/net/wireless/marvell/
16459+
X: drivers/net/wireless/mediatek/mt76/
16460+
X: drivers/net/wireless/mediatek/mt7601u/
16461+
X: drivers/net/wireless/microchip/
16462+
X: drivers/net/wireless/purelifi/
16463+
X: drivers/net/wireless/quantenna/
16464+
X: drivers/net/wireless/ralink/
16465+
X: drivers/net/wireless/realtek/
16466+
X: drivers/net/wireless/rsi/
16467+
X: drivers/net/wireless/silabs/
16468+
X: drivers/net/wireless/st/
16469+
X: drivers/net/wireless/ti/
16470+
X: drivers/net/wireless/zydas/
1645216471

1645316472
NETWORKING [DSA]
1645416473
M: Andrew Lunn <andrew@lunn.ch>
@@ -17833,7 +17852,7 @@ M: Christian Lamparter <chunkeey@googlemail.com>
1783317852
L: linux-wireless@vger.kernel.org
1783417853
S: Maintained
1783517854
W: https://wireless.wiki.kernel.org/en/users/Drivers/p54
17836-
F: drivers/net/wireless/intersil/p54/
17855+
F: drivers/net/wireless/intersil/
1783717856

1783817857
PACKET SOCKETS
1783917858
M: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
@@ -19110,7 +19129,7 @@ PURELIFI PLFXLC DRIVER
1911019129
M: Srinivasan Raju <srini.raju@purelifi.com>
1911119130
L: linux-wireless@vger.kernel.org
1911219131
S: Supported
19113-
F: drivers/net/wireless/purelifi/plfxlc/
19132+
F: drivers/net/wireless/purelifi/
1911419133

1911519134
PVRUSB2 VIDEO4LINUX DRIVER
1911619135
M: Mike Isely <isely@pobox.com>
@@ -19661,7 +19680,7 @@ M: Igor Mitsyanko <imitsyanko@quantenna.com>
1966119680
R: Sergey Matyukevich <geomatsi@gmail.com>
1966219681
L: linux-wireless@vger.kernel.org
1966319682
S: Maintained
19664-
F: drivers/net/wireless/quantenna
19683+
F: drivers/net/wireless/quantenna/
1966519684

1966619685
RADEON and AMDGPU DRM DRIVERS
1966719686
M: Alex Deucher <alexander.deucher@amd.com>
@@ -19741,7 +19760,7 @@ RALINK RT2X00 WIRELESS LAN DRIVER
1974119760
M: Stanislaw Gruszka <stf_xl@wp.pl>
1974219761
L: linux-wireless@vger.kernel.org
1974319762
S: Maintained
19744-
F: drivers/net/wireless/ralink/rt2x00/
19763+
F: drivers/net/wireless/ralink/
1974519764

1974619765
RAMDISK RAM BLOCK DEVICE DRIVER
1974719766
M: Jens Axboe <axboe@kernel.dk>
@@ -21500,7 +21519,6 @@ F: include/linux/slimbus.h
2150021519

2150121520
SFC NETWORK DRIVER
2150221521
M: Edward Cree <ecree.xilinx@gmail.com>
21503-
M: Martin Habets <habetsm.xilinx@gmail.com>
2150421522
L: netdev@vger.kernel.org
2150521523
L: linux-net-drivers@amd.com
2150621524
S: Maintained
@@ -21709,7 +21727,7 @@ SILICON LABS WIRELESS DRIVERS (for WFxxx series)
2170921727
M: Jérôme Pouiller <jerome.pouiller@silabs.com>
2171021728
S: Supported
2171121729
F: Documentation/devicetree/bindings/net/wireless/silabs,wfx.yaml
21712-
F: drivers/net/wireless/silabs/wfx/
21730+
F: drivers/net/wireless/silabs/
2171321731

2171421732
SILICON MOTION SM712 FRAME BUFFER DRIVER
2171521733
M: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
@@ -26209,7 +26227,7 @@ F: mm/zbud.c
2620926227
ZD1211RW WIRELESS DRIVER
2621026228
L: linux-wireless@vger.kernel.org
2621126229
S: Orphan
26212-
F: drivers/net/wireless/zydas/zd1211rw/
26230+
F: drivers/net/wireless/zydas/
2621326231

2621426232
ZD1301 MEDIA DRIVER
2621526233
L: linux-media@vger.kernel.org

drivers/bluetooth/Kconfig

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,18 @@ config BT_HCIBTUSB_POLL_SYNC
5656
Say Y here to enable USB poll_sync for Bluetooth USB devices by
5757
default.
5858

59+
config BT_HCIBTUSB_AUTO_ISOC_ALT
60+
bool "Automatically adjust alternate setting for Isoc endpoints"
61+
depends on BT_HCIBTUSB
62+
default y if CHROME_PLATFORMS
63+
help
64+
Say Y here to automatically adjusting the alternate setting for
65+
HCI_USER_CHANNEL whenever a SCO link is established.
66+
67+
When enabled, btusb intercepts the HCI_EV_SYNC_CONN_COMPLETE packets
68+
and configures isoc endpoint alternate setting automatically when
69+
HCI_USER_CHANNEL is in use.
70+
5971
config BT_HCIBTUSB_BCM
6072
bool "Broadcom protocol support"
6173
depends on BT_HCIBTUSB

drivers/bluetooth/btusb.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ static bool force_scofix;
3434
static bool enable_autosuspend = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTOSUSPEND);
3535
static bool enable_poll_sync = IS_ENABLED(CONFIG_BT_HCIBTUSB_POLL_SYNC);
3636
static bool reset = true;
37+
static bool auto_isoc_alt = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTO_ISOC_ALT);
3738

3839
static struct usb_driver btusb_driver;
3940

@@ -1085,13 +1086,53 @@ static inline void btusb_free_frags(struct btusb_data *data)
10851086
spin_unlock_irqrestore(&data->rxlock, flags);
10861087
}
10871088

1089+
static void btusb_sco_connected(struct btusb_data *data, struct sk_buff *skb)
1090+
{
1091+
struct hci_event_hdr *hdr = (void *) skb->data;
1092+
struct hci_ev_sync_conn_complete *ev =
1093+
(void *) skb->data + sizeof(*hdr);
1094+
struct hci_dev *hdev = data->hdev;
1095+
unsigned int notify_air_mode;
1096+
1097+
if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT)
1098+
return;
1099+
1100+
if (skb->len < sizeof(*hdr) || hdr->evt != HCI_EV_SYNC_CONN_COMPLETE)
1101+
return;
1102+
1103+
if (skb->len != sizeof(*hdr) + sizeof(*ev) || ev->status)
1104+
return;
1105+
1106+
switch (ev->air_mode) {
1107+
case BT_CODEC_CVSD:
1108+
notify_air_mode = HCI_NOTIFY_ENABLE_SCO_CVSD;
1109+
break;
1110+
1111+
case BT_CODEC_TRANSPARENT:
1112+
notify_air_mode = HCI_NOTIFY_ENABLE_SCO_TRANSP;
1113+
break;
1114+
1115+
default:
1116+
return;
1117+
}
1118+
1119+
bt_dev_info(hdev, "enabling SCO with air mode %u", ev->air_mode);
1120+
data->sco_num = 1;
1121+
data->air_mode = notify_air_mode;
1122+
schedule_work(&data->work);
1123+
}
1124+
10881125
static int btusb_recv_event(struct btusb_data *data, struct sk_buff *skb)
10891126
{
10901127
if (data->intr_interval) {
10911128
/* Trigger dequeue immediately if an event is received */
10921129
schedule_delayed_work(&data->rx_work, 0);
10931130
}
10941131

1132+
/* Configure altsetting for HCI_USER_CHANNEL on SCO connected */
1133+
if (auto_isoc_alt && hci_dev_test_flag(data->hdev, HCI_USER_CHANNEL))
1134+
btusb_sco_connected(data, skb);
1135+
10951136
return data->recv_event(data->hdev, skb);
10961137
}
10971138

drivers/net/bonding/bond_options.c

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,10 +1242,28 @@ static bool slave_can_set_ns_maddr(const struct bonding *bond, struct slave *sla
12421242
slave->dev->flags & IFF_MULTICAST;
12431243
}
12441244

1245+
/**
1246+
* slave_set_ns_maddrs - add/del all NS mac addresses for slave
1247+
* @bond: bond device
1248+
* @slave: slave device
1249+
* @add: add or remove all the NS mac addresses
1250+
*
1251+
* This function tries to add or delete all the NS mac addresses on the slave
1252+
*
1253+
* Note, the IPv6 NS target address is the unicast address in Neighbor
1254+
* Solicitation (NS) message. The dest address of NS message should be
1255+
* solicited-node multicast address of the target. The dest mac of NS message
1256+
* is converted from the solicited-node multicast address.
1257+
*
1258+
* This function is called when
1259+
* * arp_validate changes
1260+
* * enslaving, releasing new slaves
1261+
*/
12451262
static void slave_set_ns_maddrs(struct bonding *bond, struct slave *slave, bool add)
12461263
{
12471264
struct in6_addr *targets = bond->params.ns_targets;
12481265
char slot_maddr[MAX_ADDR_LEN];
1266+
struct in6_addr mcaddr;
12491267
int i;
12501268

12511269
if (!slave_can_set_ns_maddr(bond, slave))
@@ -1255,7 +1273,8 @@ static void slave_set_ns_maddrs(struct bonding *bond, struct slave *slave, bool
12551273
if (ipv6_addr_any(&targets[i]))
12561274
break;
12571275

1258-
if (!ndisc_mc_map(&targets[i], slot_maddr, slave->dev, 0)) {
1276+
addrconf_addr_solict_mult(&targets[i], &mcaddr);
1277+
if (!ndisc_mc_map(&mcaddr, slot_maddr, slave->dev, 0)) {
12591278
if (add)
12601279
dev_mc_add(slave->dev, slot_maddr);
12611280
else
@@ -1278,23 +1297,43 @@ void bond_slave_ns_maddrs_del(struct bonding *bond, struct slave *slave)
12781297
slave_set_ns_maddrs(bond, slave, false);
12791298
}
12801299

1300+
/**
1301+
* slave_set_ns_maddr - set new NS mac address for slave
1302+
* @bond: bond device
1303+
* @slave: slave device
1304+
* @target: the new IPv6 target
1305+
* @slot: the old IPv6 target in the slot
1306+
*
1307+
* This function tries to replace the old mac address to new one on the slave.
1308+
*
1309+
* Note, the target/slot IPv6 address is the unicast address in Neighbor
1310+
* Solicitation (NS) message. The dest address of NS message should be
1311+
* solicited-node multicast address of the target. The dest mac of NS message
1312+
* is converted from the solicited-node multicast address.
1313+
*
1314+
* This function is called when
1315+
* * An IPv6 NS target is added or removed.
1316+
*/
12811317
static void slave_set_ns_maddr(struct bonding *bond, struct slave *slave,
12821318
struct in6_addr *target, struct in6_addr *slot)
12831319
{
1284-
char target_maddr[MAX_ADDR_LEN], slot_maddr[MAX_ADDR_LEN];
1320+
char mac_addr[MAX_ADDR_LEN];
1321+
struct in6_addr mcast_addr;
12851322

12861323
if (!bond->params.arp_validate || !slave_can_set_ns_maddr(bond, slave))
12871324
return;
12881325

1289-
/* remove the previous maddr from slave */
1326+
/* remove the previous mac addr from slave */
1327+
addrconf_addr_solict_mult(slot, &mcast_addr);
12901328
if (!ipv6_addr_any(slot) &&
1291-
!ndisc_mc_map(slot, slot_maddr, slave->dev, 0))
1292-
dev_mc_del(slave->dev, slot_maddr);
1329+
!ndisc_mc_map(&mcast_addr, mac_addr, slave->dev, 0))
1330+
dev_mc_del(slave->dev, mac_addr);
12931331

1294-
/* add new maddr on slave if target is set */
1332+
/* add new mac addr on slave if target is set */
1333+
addrconf_addr_solict_mult(target, &mcast_addr);
12951334
if (!ipv6_addr_any(target) &&
1296-
!ndisc_mc_map(target, target_maddr, slave->dev, 0))
1297-
dev_mc_add(slave->dev, target_maddr);
1335+
!ndisc_mc_map(&mcast_addr, mac_addr, slave->dev, 0))
1336+
dev_mc_add(slave->dev, mac_addr);
12981337
}
12991338

13001339
static void _bond_options_ns_ip6_target_set(struct bonding *bond, int slot,

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2208,13 +2208,11 @@ mv88e6xxx_port_vlan_prepare(struct dsa_switch *ds, int port,
22082208
return err;
22092209
}
22102210

2211-
static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,
2212-
const unsigned char *addr, u16 vid,
2213-
u8 state)
2211+
static int mv88e6xxx_port_db_get(struct mv88e6xxx_chip *chip,
2212+
const unsigned char *addr, u16 vid,
2213+
u16 *fid, struct mv88e6xxx_atu_entry *entry)
22142214
{
2215-
struct mv88e6xxx_atu_entry entry;
22162215
struct mv88e6xxx_vtu_entry vlan;
2217-
u16 fid;
22182216
int err;
22192217

22202218
/* Ports have two private address databases: one for when the port is
@@ -2225,7 +2223,7 @@ static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,
22252223
* VLAN ID into the port's database used for VLAN-unaware bridging.
22262224
*/
22272225
if (vid == 0) {
2228-
fid = MV88E6XXX_FID_BRIDGED;
2226+
*fid = MV88E6XXX_FID_BRIDGED;
22292227
} else {
22302228
err = mv88e6xxx_vtu_get(chip, vid, &vlan);
22312229
if (err)
@@ -2235,14 +2233,39 @@ static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,
22352233
if (!vlan.valid)
22362234
return -EOPNOTSUPP;
22372235

2238-
fid = vlan.fid;
2236+
*fid = vlan.fid;
22392237
}
22402238

2241-
entry.state = 0;
2242-
ether_addr_copy(entry.mac, addr);
2243-
eth_addr_dec(entry.mac);
2239+
entry->state = 0;
2240+
ether_addr_copy(entry->mac, addr);
2241+
eth_addr_dec(entry->mac);
2242+
2243+
return mv88e6xxx_g1_atu_getnext(chip, *fid, entry);
2244+
}
2245+
2246+
static bool mv88e6xxx_port_db_find(struct mv88e6xxx_chip *chip,
2247+
const unsigned char *addr, u16 vid)
2248+
{
2249+
struct mv88e6xxx_atu_entry entry;
2250+
u16 fid;
2251+
int err;
22442252

2245-
err = mv88e6xxx_g1_atu_getnext(chip, fid, &entry);
2253+
err = mv88e6xxx_port_db_get(chip, addr, vid, &fid, &entry);
2254+
if (err)
2255+
return false;
2256+
2257+
return entry.state && ether_addr_equal(entry.mac, addr);
2258+
}
2259+
2260+
static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,
2261+
const unsigned char *addr, u16 vid,
2262+
u8 state)
2263+
{
2264+
struct mv88e6xxx_atu_entry entry;
2265+
u16 fid;
2266+
int err;
2267+
2268+
err = mv88e6xxx_port_db_get(chip, addr, vid, &fid, &entry);
22462269
if (err)
22472270
return err;
22482271

@@ -2846,6 +2869,13 @@ static int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
28462869
mv88e6xxx_reg_lock(chip);
28472870
err = mv88e6xxx_port_db_load_purge(chip, port, addr, vid,
28482871
MV88E6XXX_G1_ATU_DATA_STATE_UC_STATIC);
2872+
if (err)
2873+
goto out;
2874+
2875+
if (!mv88e6xxx_port_db_find(chip, addr, vid))
2876+
err = -ENOSPC;
2877+
2878+
out:
28492879
mv88e6xxx_reg_unlock(chip);
28502880

28512881
return err;
@@ -6614,6 +6644,13 @@ static int mv88e6xxx_port_mdb_add(struct dsa_switch *ds, int port,
66146644
mv88e6xxx_reg_lock(chip);
66156645
err = mv88e6xxx_port_db_load_purge(chip, port, mdb->addr, mdb->vid,
66166646
MV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC);
6647+
if (err)
6648+
goto out;
6649+
6650+
if (!mv88e6xxx_port_db_find(chip, mdb->addr, mdb->vid))
6651+
err = -ENOSPC;
6652+
6653+
out:
66176654
mv88e6xxx_reg_unlock(chip);
66186655

66196656
return err;

0 commit comments

Comments
 (0)