Skip to content

Commit 0fc2f31

Browse files
committed
tgupdate: merge t/DO-NOT-MERGE-mptcp-enabled-by-default into t/upstream base
2 parents 09200fb + b086d18 commit 0fc2f31

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

net/mptcp/pm_userspace.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,14 +308,17 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
308308

309309
lock_sock(sk);
310310

311+
spin_lock_bh(&msk->pm.lock);
311312
match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val);
312313
if (!match) {
313314
GENL_SET_ERR_MSG(info, "address with specified id not found");
315+
spin_unlock_bh(&msk->pm.lock);
314316
release_sock(sk);
315317
goto out;
316318
}
317319

318320
list_move(&match->list, &free_list);
321+
spin_unlock_bh(&msk->pm.lock);
319322

320323
mptcp_pm_remove_addrs(msk, &free_list);
321324

@@ -560,6 +563,7 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
560563
struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
561564
struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
562565
struct net *net = sock_net(skb->sk);
566+
struct mptcp_pm_addr_entry *entry;
563567
struct mptcp_sock *msk;
564568
int ret = -EINVAL;
565569
struct sock *sk;
@@ -601,6 +605,17 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
601605
if (loc.flags & MPTCP_PM_ADDR_FLAG_BACKUP)
602606
bkup = 1;
603607

608+
spin_lock_bh(&msk->pm.lock);
609+
list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
610+
if (mptcp_addresses_equal(&entry->addr, &loc.addr, false)) {
611+
if (bkup)
612+
entry->flags |= MPTCP_PM_ADDR_FLAG_BACKUP;
613+
else
614+
entry->flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP;
615+
}
616+
}
617+
spin_unlock_bh(&msk->pm.lock);
618+
604619
lock_sock(sk);
605620
ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup);
606621
release_sock(sk);

0 commit comments

Comments
 (0)