From: Geliang Tang <geliang.tang@suse.com>
To: Matthieu Baerts <matthieu.baerts@tessares.net>,
Matthieu Baerts <matttbe@kernel.org>
Cc: mptcp@lists.linux.dev
Subject: Re: [PATCH mptcp-next v3 15/29] mptcp: userspace pm remove id 0 address
Date: Thu, 5 Oct 2023 16:35:47 +0800 [thread overview]
Message-ID: <20231005083547.GB23632@bogon> (raw)
In-Reply-To: <6c6bff5e-56fb-49f7-af25-d5cb1347bc63@tessares.net>
On Thu, Sep 28, 2023 at 11:00:55PM +0200, Matthieu Baerts wrote:
> Hi Geliang,
>
> On 25/09/2023 10:41, Geliang Tang wrote:
> > This patch adds the ability to send RM_ADDR for local ID 0. Check
> > whether id 0 address is removed, if not, put id 0 into a removing
> > list, pass it to mptcp_pm_remove_addr() to remove id 0 address.
> >
> > There is no reason not to allow the userspace to remove the initial
> > address (ID 0). This special case was not taken into account not
> > letting the userspace to delete all addresses as announced.
> >
> > Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/379
> > Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE")
> > Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> > ---
> > net/mptcp/pm_userspace.c | 35 +++++++++++++++++++++++++++++++++++
> > 1 file changed, 35 insertions(+)
> >
> > diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
> > index 6b8083650bc1..8d97cf475cac 100644
> > --- a/net/mptcp/pm_userspace.c
> > +++ b/net/mptcp/pm_userspace.c
> > @@ -211,6 +211,38 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
> > return err;
> > }
> >
> > +static int mptcp_userspace_remove_id_zero_address(struct mptcp_sock *msk,
> > + struct genl_info *info)
> > +{
> > + struct mptcp_rm_list list = { .nr = 0 };
> > + struct mptcp_subflow_context *subflow;
> > + struct sock *sk = (struct sock *)msk;
> > + bool has_id_0 = false;
> > + int err = -EINVAL;
> > +
> > + lock_sock(sk);
> > + spin_lock_bh(&msk->pm.lock);
>
> Why do you need to lock the 'pm' structure? mptcp_pm_remove_addr() will
> modify the 'pm' structure but it will also do the lock, no?
mptcp_pm_remove_addrs will do the lock but mptcp_pm_remove_addr does need
the locks.
Thanks,
-Geliang
>
> > + mptcp_for_each_subflow(msk, subflow) {
> > + if (subflow->remote_id == 0) {
>
> I only noticed that now but you need to look at local_id, not remote_id:
> when we send a RM_ADDR, we announce that a previously announced (local)
> address ID is now invalid → so we need to check for local IDs here.
>
> > + has_id_0 = true;
> > + break;
> > + }
> > + }
> > + if (!has_id_0) {
> > + GENL_SET_ERR_MSG(info, "address with id 0 not found");
> > + goto out;
> > + }
> > +
> > + list.ids[list.nr++] = 0;
> > + mptcp_pm_remove_addr(msk, &list);
> > + err = 0;
> > +out:
> > + spin_unlock_bh(&msk->pm.lock);
> > + release_sock(sk);
> > + sock_put(sk);
>
> It looks strange to me to do a 'put' here because we didn't "hold" the
> socket here in this function.
>
> Should we not do the 'sock_put(sk)' in mptcp_pm_nl_remove_doit() instead?
>
> > + return err;
> > +}
> > +
> > int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
> > {
> > struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
> > @@ -245,6 +277,9 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
> > goto remove_err;
> > }
> >
> > + if (id_val == 0)
> > + return mptcp_userspace_remove_id_zero_address(msk, info);
>
> Linked to what I said above: maybe here it would be better to have:
>
> err = mptcp_userspace_remove_id_zero_address(msk, info);
> goto out; // the sock_put() will be done there
>
> (rename 'remove_err' to 'out' as there is potentially no errors here)
>
> WDYT?
>
>
> > +
> > lock_sock(sk);
> >
> > list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
>
> Cheers,
> Matt
> --
> Tessares | Belgium | Hybrid Access Solutions
> www.tessares.net
next prev parent reply other threads:[~2023-10-05 8:34 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-25 8:41 [PATCH mptcp-next v3 00/29] userspace pm enhancements Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 01/29] mptcp: drop useless ssk in pm_subflow_check_next Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 02/29] mptcp: use mptcp_check_fallback helper Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 03/29] mptcp: use mptcp_get_ext helper Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 04/29] mptcp: move sk assignment statement ahead Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 05/29] mptcp: define more local variables sk Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 06/29] selftests: mptcp: sockopt: drop mptcp_connect var Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 07/29] selftests: mptcp: display simult in extra_msg Geliang Tang
2023-09-28 20:54 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 08/29] mptcp: add mptcpi_subflows_total counter Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 09/29] selftests: mptcp: add evts_get_info helper Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 10/29] selftests: mptcp: add chk_subflows_total helper Geliang Tang
2023-09-28 21:12 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 11/29] selftests: mptcp: update userspace pm test helpers Geliang Tang
2023-09-28 20:56 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 12/29] selftests: mptcp: userspace pm remove id 0 subflow Geliang Tang
2023-09-28 20:58 ` Matthieu Baerts
2023-10-05 8:32 ` Geliang Tang
2023-10-05 9:46 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 13/29] mptcp: userspace pm allow creating " Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 14/29] selftests: mptcp: userspace pm create " Geliang Tang
2023-09-25 8:41 ` [PATCH mptcp-next v3 15/29] mptcp: userspace pm remove id 0 address Geliang Tang
2023-09-28 21:00 ` Matthieu Baerts
2023-10-05 8:35 ` Geliang Tang [this message]
2023-10-05 9:49 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 16/29] selftests: " Geliang Tang
2023-09-28 21:01 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 17/29] mptcp: add userspace_pm_get_entry helper Geliang Tang
2023-10-07 21:00 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 18/29] mptcp: add userspace pm addr entry refcount Geliang Tang
2023-10-07 21:04 ` Matthieu Baerts
2023-10-07 21:09 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 19/29] mptcp: add netlink " Geliang Tang
2023-10-07 21:05 ` Matthieu Baerts
2023-09-25 8:41 ` [PATCH mptcp-next v3 20/29] selftests: mptcp: add userspace pm fullmesh tests Geliang Tang
2023-10-07 21:06 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 21/29] selftests: mptcp: add mptcp_lib_kill_wait Geliang Tang
2023-10-08 10:49 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 22/29] selftests: mptcp: add mptcp_lib_evts_* Geliang Tang
2023-10-08 10:54 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 23/29] selftests: mptcp: userspace: print colored results Geliang Tang
2023-10-08 10:55 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 24/29] selftests: mptcp: add mptcp_lib_verify_listener_events Geliang Tang
2023-10-08 10:56 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 25/29] selftests: mptcp: add mptcp_lib_is_v6 Geliang Tang
2023-10-08 10:56 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 26/29] selftests: mptcp: add mptcp_lib_get_counter Geliang Tang
2023-10-08 10:56 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 27/29] selftests: mptcp: add mptcp_lib_make_file Geliang Tang
2023-10-08 10:58 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 28/29] selftests: mptcp: add mptcp_lib_check_transfer Geliang Tang
2023-10-08 10:59 ` Matthieu Baerts
2023-09-25 8:42 ` [PATCH mptcp-next v3 29/29] selftests: mptcp: add mptcp_lib_wait_local_port_listen Geliang Tang
2023-09-25 9:54 ` selftests: mptcp: add mptcp_lib_wait_local_port_listen: Tests Results MPTCP CI
2023-09-28 21:26 ` selftests: mptcp: add mptcp_lib_wait_local_port_listen: Build Failure MPTCP CI
2023-09-28 22:04 ` selftests: mptcp: add mptcp_lib_wait_local_port_listen: Tests Results MPTCP CI
2023-10-08 10:59 ` [PATCH mptcp-next v3 29/29] selftests: mptcp: add mptcp_lib_wait_local_port_listen Matthieu Baerts
2023-09-28 20:54 ` [PATCH mptcp-next v3 00/29] userspace pm enhancements Matthieu Baerts
2023-09-28 21:37 ` Matthieu Baerts
2023-10-05 15:53 ` Matthieu Baerts
2023-10-06 10:42 ` Geliang Tang
2023-10-31 17:40 ` Matthieu Baerts
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231005083547.GB23632@bogon \
--to=geliang.tang@suse.com \
--cc=matthieu.baerts@tessares.net \
--cc=matttbe@kernel.org \
--cc=mptcp@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox