All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.