Skip to content

Commit d1fabc6

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Per-next-PR merge. net/smc/af_smc.c b5dd4d6 ("net/smc: llc_conf_mutex refactor, replace it with rw_semaphore") e40b801 ("net/smc: fix potential panic dues to unprotected smc_llc_srv_add_link()") https://lore.kernel.org/all/[email protected]/ Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 4d4266e + f922c7b commit d1fabc6

File tree

10 files changed

+119
-90
lines changed

10 files changed

+119
-90
lines changed

MAINTAINERS

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4814,9 +4814,9 @@ F: net/sched/sch_etf.c
48144814
F: net/sched/sch_taprio.c
48154815

48164816
CC2520 IEEE-802.15.4 RADIO DRIVER
4817-
M: Varka Bhadram <[email protected]>
4817+
M: Stefan Schmidt <[email protected]>
48184818
4819-
S: Maintained
4819+
S: Odd Fixes
48204820
F: Documentation/devicetree/bindings/net/ieee802154/cc2520.txt
48214821
F: drivers/net/ieee802154/cc2520.c
48224822

@@ -10013,6 +10013,7 @@ F: drivers/clk/clk-versaclock5.c
1001310013
IEEE 802.15.4 SUBSYSTEM
1001410014
M: Alexander Aring <[email protected]>
1001510015
M: Stefan Schmidt <[email protected]>
10016+
M: Miquel Raynal <[email protected]>
1001610017
1001710018
S: Maintained
1001810019
W: https://linux-wpan.org/
@@ -12828,9 +12829,9 @@ F: drivers/iio/potentiometer/mcp4018.c
1282812829
F: drivers/iio/potentiometer/mcp4531.c
1282912830

1283012831
MCR20A IEEE-802.15.4 RADIO DRIVER
12831-
M: Xue Liu <[email protected]>
12832+
M: Stefan Schmidt <[email protected]>
1283212833
12833-
S: Maintained
12834+
S: Odd Fixes
1283412835
W: https://github.com/xueliu/mcr20a-linux
1283512836
F: Documentation/devicetree/bindings/net/ieee802154/mcr20a.txt
1283612837
F: drivers/net/ieee802154/mcr20a.c
@@ -14193,9 +14194,9 @@ T: git git://linuxtv.org/media_tree.git
1419314194
F: drivers/media/radio/radio-mr800.c
1419414195

1419514196
MRF24J40 IEEE 802.15.4 RADIO DRIVER
14196-
M: Alan Ott <[email protected]>
14197+
M: Stefan Schmidt <[email protected]>
1419714198
14198-
S: Maintained
14199+
S: Odd Fixes
1419914200
F: Documentation/devicetree/bindings/net/ieee802154/mrf24j40.txt
1420014201
F: drivers/net/ieee802154/mrf24j40.c
1420114202

drivers/net/ethernet/broadcom/genet/bcmmii.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -176,15 +176,6 @@ void bcmgenet_phy_power_set(struct net_device *dev, bool enable)
176176

177177
static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv)
178178
{
179-
u32 reg;
180-
181-
if (!GENET_IS_V5(priv)) {
182-
/* Speed settings are set in bcmgenet_mii_setup() */
183-
reg = bcmgenet_sys_readl(priv, SYS_PORT_CTRL);
184-
reg |= LED_ACT_SOURCE_MAC;
185-
bcmgenet_sys_writel(priv, reg, SYS_PORT_CTRL);
186-
}
187-
188179
if (priv->hw_params->flags & GENET_HAS_MOCA_LINK_DET)
189180
fixed_phy_set_link_update(priv->dev->phydev,
190181
bcmgenet_fixed_phy_link_update);
@@ -217,6 +208,8 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
217208

218209
if (!phy_name) {
219210
phy_name = "MoCA";
211+
if (!GENET_IS_V5(priv))
212+
port_ctrl |= LED_ACT_SOURCE_MAC;
220213
bcmgenet_moca_phy_setup(priv);
221214
}
222215
break;

drivers/net/ethernet/microchip/lan966x/lan966x_ptp.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -523,9 +523,9 @@ irqreturn_t lan966x_ptp_irq_handler(int irq, void *args)
523523
if (WARN_ON(!skb_match))
524524
continue;
525525

526-
spin_lock(&lan966x->ptp_ts_id_lock);
526+
spin_lock_irqsave(&lan966x->ptp_ts_id_lock, flags);
527527
lan966x->ptp_skbs--;
528-
spin_unlock(&lan966x->ptp_ts_id_lock);
528+
spin_unlock_irqrestore(&lan966x->ptp_ts_id_lock, flags);
529529

530530
/* Get the h/w timestamp */
531531
lan966x_get_hwtimestamp(lan966x, &ts, delay);

drivers/net/ethernet/qlogic/qede/qede_main.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -973,8 +973,15 @@ static int qede_alloc_fp_array(struct qede_dev *edev)
973973
goto err;
974974
}
975975

976-
mem = krealloc(edev->coal_entry, QEDE_QUEUE_CNT(edev) *
977-
sizeof(*edev->coal_entry), GFP_KERNEL);
976+
if (!edev->coal_entry) {
977+
mem = kcalloc(QEDE_MAX_RSS_CNT(edev),
978+
sizeof(*edev->coal_entry), GFP_KERNEL);
979+
} else {
980+
mem = krealloc(edev->coal_entry,
981+
QEDE_QUEUE_CNT(edev) * sizeof(*edev->coal_entry),
982+
GFP_KERNEL);
983+
}
984+
978985
if (!mem) {
979986
DP_ERR(edev, "coalesce entry allocation failed\n");
980987
kfree(edev->coal_entry);

net/l2tp/l2tp_ppp.c

Lines changed: 67 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -650,54 +650,22 @@ static int pppol2tp_tunnel_mtu(const struct l2tp_tunnel *tunnel)
650650
return mtu - PPPOL2TP_HEADER_OVERHEAD;
651651
}
652652

653-
/* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
654-
*/
655-
static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
656-
int sockaddr_len, int flags)
653+
static struct l2tp_tunnel *pppol2tp_tunnel_get(struct net *net,
654+
const struct l2tp_connect_info *info,
655+
bool *new_tunnel)
657656
{
658-
struct sock *sk = sock->sk;
659-
struct pppox_sock *po = pppox_sk(sk);
660-
struct l2tp_session *session = NULL;
661-
struct l2tp_connect_info info;
662657
struct l2tp_tunnel *tunnel;
663-
struct pppol2tp_session *ps;
664-
struct l2tp_session_cfg cfg = { 0, };
665-
bool drop_refcnt = false;
666-
bool drop_tunnel = false;
667-
bool new_session = false;
668-
bool new_tunnel = false;
669658
int error;
670659

671-
error = pppol2tp_sockaddr_get_info(uservaddr, sockaddr_len, &info);
672-
if (error < 0)
673-
return error;
660+
*new_tunnel = false;
674661

675-
lock_sock(sk);
676-
677-
/* Check for already bound sockets */
678-
error = -EBUSY;
679-
if (sk->sk_state & PPPOX_CONNECTED)
680-
goto end;
681-
682-
/* We don't supporting rebinding anyway */
683-
error = -EALREADY;
684-
if (sk->sk_user_data)
685-
goto end; /* socket is already attached */
686-
687-
/* Don't bind if tunnel_id is 0 */
688-
error = -EINVAL;
689-
if (!info.tunnel_id)
690-
goto end;
691-
692-
tunnel = l2tp_tunnel_get(sock_net(sk), info.tunnel_id);
693-
if (tunnel)
694-
drop_tunnel = true;
662+
tunnel = l2tp_tunnel_get(net, info->tunnel_id);
695663

696664
/* Special case: create tunnel context if session_id and
697665
* peer_session_id is 0. Otherwise look up tunnel using supplied
698666
* tunnel id.
699667
*/
700-
if (!info.session_id && !info.peer_session_id) {
668+
if (!info->session_id && !info->peer_session_id) {
701669
if (!tunnel) {
702670
struct l2tp_tunnel_cfg tcfg = {
703671
.encap = L2TP_ENCAPTYPE_UDP,
@@ -706,40 +674,82 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
706674
/* Prevent l2tp_tunnel_register() from trying to set up
707675
* a kernel socket.
708676
*/
709-
if (info.fd < 0) {
710-
error = -EBADF;
711-
goto end;
712-
}
677+
if (info->fd < 0)
678+
return ERR_PTR(-EBADF);
713679

714-
error = l2tp_tunnel_create(info.fd,
715-
info.version,
716-
info.tunnel_id,
717-
info.peer_tunnel_id, &tcfg,
680+
error = l2tp_tunnel_create(info->fd,
681+
info->version,
682+
info->tunnel_id,
683+
info->peer_tunnel_id, &tcfg,
718684
&tunnel);
719685
if (error < 0)
720-
goto end;
686+
return ERR_PTR(error);
721687

722688
l2tp_tunnel_inc_refcount(tunnel);
723-
error = l2tp_tunnel_register(tunnel, sock_net(sk),
724-
&tcfg);
689+
error = l2tp_tunnel_register(tunnel, net, &tcfg);
725690
if (error < 0) {
726691
kfree(tunnel);
727-
goto end;
692+
return ERR_PTR(error);
728693
}
729-
drop_tunnel = true;
730-
new_tunnel = true;
694+
695+
*new_tunnel = true;
731696
}
732697
} else {
733698
/* Error if we can't find the tunnel */
734-
error = -ENOENT;
735699
if (!tunnel)
736-
goto end;
700+
return ERR_PTR(-ENOENT);
737701

738702
/* Error if socket is not prepped */
739-
if (!tunnel->sock)
740-
goto end;
703+
if (!tunnel->sock) {
704+
l2tp_tunnel_dec_refcount(tunnel);
705+
return ERR_PTR(-ENOENT);
706+
}
741707
}
742708

709+
return tunnel;
710+
}
711+
712+
/* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
713+
*/
714+
static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
715+
int sockaddr_len, int flags)
716+
{
717+
struct sock *sk = sock->sk;
718+
struct pppox_sock *po = pppox_sk(sk);
719+
struct l2tp_session *session = NULL;
720+
struct l2tp_connect_info info;
721+
struct l2tp_tunnel *tunnel;
722+
struct pppol2tp_session *ps;
723+
struct l2tp_session_cfg cfg = { 0, };
724+
bool drop_refcnt = false;
725+
bool new_session = false;
726+
bool new_tunnel = false;
727+
int error;
728+
729+
error = pppol2tp_sockaddr_get_info(uservaddr, sockaddr_len, &info);
730+
if (error < 0)
731+
return error;
732+
733+
/* Don't bind if tunnel_id is 0 */
734+
if (!info.tunnel_id)
735+
return -EINVAL;
736+
737+
tunnel = pppol2tp_tunnel_get(sock_net(sk), &info, &new_tunnel);
738+
if (IS_ERR(tunnel))
739+
return PTR_ERR(tunnel);
740+
741+
lock_sock(sk);
742+
743+
/* Check for already bound sockets */
744+
error = -EBUSY;
745+
if (sk->sk_state & PPPOX_CONNECTED)
746+
goto end;
747+
748+
/* We don't supporting rebinding anyway */
749+
error = -EALREADY;
750+
if (sk->sk_user_data)
751+
goto end; /* socket is already attached */
752+
743753
if (tunnel->peer_tunnel_id == 0)
744754
tunnel->peer_tunnel_id = info.peer_tunnel_id;
745755

@@ -840,8 +850,7 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
840850
}
841851
if (drop_refcnt)
842852
l2tp_session_dec_refcount(session);
843-
if (drop_tunnel)
844-
l2tp_tunnel_dec_refcount(tunnel);
853+
l2tp_tunnel_dec_refcount(tunnel);
845854
release_sock(sk);
846855

847856
return error;

net/smc/af_smc.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1839,8 +1839,10 @@ static int smcr_serv_conf_first_link(struct smc_sock *smc)
18391839
smc_llc_link_active(link);
18401840
smcr_lgr_set_type(link->lgr, SMC_LGR_SINGLE);
18411841

1842+
down_write(&link->lgr->llc_conf_mutex);
18421843
/* initial contact - try to establish second link */
18431844
smc_llc_srv_add_link(link, NULL);
1845+
up_write(&link->lgr->llc_conf_mutex);
18441846
return 0;
18451847
}
18461848

net/smc/smc_core.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,8 +1124,9 @@ static void smcr_buf_unuse(struct smc_buf_desc *buf_desc, bool is_rmb,
11241124

11251125
smc_buf_free(lgr, is_rmb, buf_desc);
11261126
} else {
1127-
buf_desc->used = 0;
1128-
memset(buf_desc->cpu_addr, 0, buf_desc->len);
1127+
/* memzero_explicit provides potential memory barrier semantics */
1128+
memzero_explicit(buf_desc->cpu_addr, buf_desc->len);
1129+
WRITE_ONCE(buf_desc->used, 0);
11291130
}
11301131
}
11311132

@@ -1136,19 +1137,17 @@ static void smc_buf_unuse(struct smc_connection *conn,
11361137
if (!lgr->is_smcd && conn->sndbuf_desc->is_vm) {
11371138
smcr_buf_unuse(conn->sndbuf_desc, false, lgr);
11381139
} else {
1139-
conn->sndbuf_desc->used = 0;
1140-
memset(conn->sndbuf_desc->cpu_addr, 0,
1141-
conn->sndbuf_desc->len);
1140+
memzero_explicit(conn->sndbuf_desc->cpu_addr, conn->sndbuf_desc->len);
1141+
WRITE_ONCE(conn->sndbuf_desc->used, 0);
11421142
}
11431143
}
11441144
if (conn->rmb_desc) {
11451145
if (!lgr->is_smcd) {
11461146
smcr_buf_unuse(conn->rmb_desc, true, lgr);
11471147
} else {
1148-
conn->rmb_desc->used = 0;
1149-
memset(conn->rmb_desc->cpu_addr, 0,
1150-
conn->rmb_desc->len +
1151-
sizeof(struct smcd_cdc_msg));
1148+
memzero_explicit(conn->rmb_desc->cpu_addr,
1149+
conn->rmb_desc->len + sizeof(struct smcd_cdc_msg));
1150+
WRITE_ONCE(conn->rmb_desc->used, 0);
11521151
}
11531152
}
11541153
}

tools/testing/selftests/drivers/net/netdevsim/devlink.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,18 @@ SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV_NAME/net/
1717
DEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV_NAME/
1818
DL_HANDLE=netdevsim/$DEV_NAME
1919

20+
wait_for_devlink()
21+
{
22+
"$@" | grep -q $DL_HANDLE
23+
}
24+
25+
devlink_wait()
26+
{
27+
local timeout=$1
28+
29+
busywait "$timeout" wait_for_devlink devlink dev
30+
}
31+
2032
fw_flash_test()
2133
{
2234
RET=0
@@ -256,6 +268,9 @@ netns_reload_test()
256268
ip netns del testns2
257269
ip netns del testns1
258270

271+
# Wait until netns async cleanup is done.
272+
devlink_wait 2000
273+
259274
log_test "netns reload test"
260275
}
261276

@@ -348,6 +363,9 @@ resource_test()
348363
ip netns del testns2
349364
ip netns del testns1
350365

366+
# Wait until netns async cleanup is done.
367+
devlink_wait 2000
368+
351369
log_test "resource test"
352370
}
353371

tools/testing/selftests/net/fib_tests.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2065,6 +2065,8 @@ EOF
20652065
################################################################################
20662066
# main
20672067

2068+
trap cleanup EXIT
2069+
20682070
while getopts :t:pPhv o
20692071
do
20702072
case $o in

tools/testing/selftests/net/udpgso_bench_rx.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,10 @@ static void do_verify_udp(const char *data, int len)
214214

215215
static int recv_msg(int fd, char *buf, int len, int *gso_size)
216216
{
217-
char control[CMSG_SPACE(sizeof(uint16_t))] = {0};
217+
char control[CMSG_SPACE(sizeof(int))] = {0};
218218
struct msghdr msg = {0};
219219
struct iovec iov = {0};
220220
struct cmsghdr *cmsg;
221-
uint16_t *gsosizeptr;
222221
int ret;
223222

224223
iov.iov_base = buf;
@@ -237,8 +236,7 @@ static int recv_msg(int fd, char *buf, int len, int *gso_size)
237236
cmsg = CMSG_NXTHDR(&msg, cmsg)) {
238237
if (cmsg->cmsg_level == SOL_UDP
239238
&& cmsg->cmsg_type == UDP_GRO) {
240-
gsosizeptr = (uint16_t *) CMSG_DATA(cmsg);
241-
*gso_size = *gsosizeptr;
239+
*gso_size = *(int *)CMSG_DATA(cmsg);
242240
break;
243241
}
244242
}

0 commit comments

Comments
 (0)