All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/4] mptcp: fix conflicts when using pm.add_signal in ADD_ADDR/echo and RM_ADDR process
@ 2021-06-17  9:14 Yonglong Li
  2021-06-17  9:14 ` [PATCH v3 1/4] mptcp: fix ADD_ADDR and RM_ADDR maybe flush addr_signal each other Yonglong Li
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Yonglong Li @ 2021-06-17  9:14 UTC (permalink / raw)
  To: mptcp
  Cc: pabeni, matthieu.baerts, mathew.j.martineau, geliangtang, Yonglong Li

fix issue: ADD_ADDR and RM_ADDR use pm.add_signal to mark event, so 
in some case pm.add_signal will be flush when ADD_ADDR/RM_ADDR in 
process.

fix issue: if ADD_ADDR and ADD_ADDR-echo process at the same time, 
only one event can write pm.add_signal. so ADD_ADDR will process 
after add_timer timeout or ADD_ADDR-echo will not be process.

Patch 1 fix ADD_ADDR and RM_ADDR maybe clear addr_signal each other.

Patch 2 and 3 deal ADD_ADDR and ADD_ADDR-echo with separately to fix 
conflicts in using pm.addr_signal porcess.

Patch 4 MPTCP_ADD_ADDR_IPV6 and MPTCP_ADD_ADDR_PORT is not necessary.

v1->v2:
 - remove READ_ONCE under the pm spin lock.

v2->v3:
 - Patch 2: rename mptcp_pm_should_add_addr to mptcp_pm_should_add_signal_addr
 - Patch 3: avoid read-modify-write of msk->pm.addr_signal and change  
   mptcp_pm_add_addr_signal to return void.

Yonglong Li (4):
  mptcp: fix ADD_ADDR and RM_ADDR maybe flush addr_signal each other
  mptcp: make MPTCP_ADD_ADDR_SIGNAL and MPTCP_ADD_ADDR_ECHO separate
  mptcp: build ADD_ADDR/echo-ADD_ADDR option according pm.add_signal
  mptcp: remove MPTCP_ADD_ADDR_IPV6 and MPTCP_ADD_ADDR_PORT

 include/net/mptcp.h    |   1 +
 net/mptcp/options.c    | 161 ++++++++++++++++++++++++++++++++-----------------
 net/mptcp/pm.c         |  53 +++++++---------
 net/mptcp/pm_netlink.c |  10 ++-
 net/mptcp/protocol.h   |  31 ++++------
 5 files changed, 147 insertions(+), 109 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: [PATCH v3 3/4] mptcp: build ADD_ADDR/echo-ADD_ADDR option according pm.add_signal
@ 2021-06-17 23:38 kernel test robot
  0 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2021-06-17 23:38 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 8060 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <1623921276-97178-4-git-send-email-liyonglong@chinatelecom.cn>
References: <1623921276-97178-4-git-send-email-liyonglong@chinatelecom.cn>
TO: Yonglong Li <liyonglong@chinatelecom.cn>
TO: mptcp(a)lists.linux.dev
CC: pabeni(a)redhat.com
CC: matthieu.baerts(a)tessares.net
CC: mathew.j.martineau(a)linux.intel.com
CC: geliangtang(a)gmail.com
CC: Yonglong Li <liyonglong@chinatelecom.cn>

Hi Yonglong,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on mptcp/export]
[also build test WARNING on linus/master v5.13-rc6 next-20210617]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Yonglong-Li/mptcp-fix-conflicts-when-using-pm-add_signal-in-ADD_ADDR-echo-and-RM_ADDR-process/20210617-171559
base:   https://github.com/multipath-tcp/mptcp_net-next.git export
:::::: branch date: 14 hours ago
:::::: commit date: 14 hours ago
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


cppcheck possible warnings: (new ones prefixed by >>, may not real problems)

   net/mptcp/options.c:591:3: warning: Assignment of function parameter has no effect outside the function. [uselessAssignmentArg]
     remaining -= map_size;
     ^
   net/mptcp/options.c:849:3: warning: Assignment of function parameter has no effect outside the function. [uselessAssignmentArg]
     remaining -= opt_size;
     ^
>> net/mptcp/options.c:726:34: warning: Uninitialized variable: flags [uninitvar]
    WRITE_ONCE(msk->pm.addr_signal, flags | msk->pm.addr_signal);
                                    ^

vim +726 net/mptcp/options.c

3df523ab582c52 Peter Krystad 2020-03-27  656  
84dfe3677a6f45 Geliang Tang  2020-11-19  657  static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *skb,
3df523ab582c52 Peter Krystad 2020-03-27  658  					       unsigned int *size,
3df523ab582c52 Peter Krystad 2020-03-27  659  					       unsigned int remaining,
3df523ab582c52 Peter Krystad 2020-03-27  660  					       struct mptcp_out_options *opts)
3df523ab582c52 Peter Krystad 2020-03-27  661  {
3df523ab582c52 Peter Krystad 2020-03-27  662  	struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
3df523ab582c52 Peter Krystad 2020-03-27  663  	struct mptcp_sock *msk = mptcp_sk(subflow->conn);
84dfe3677a6f45 Geliang Tang  2020-11-19  664  	bool drop_other_suboptions = false;
84dfe3677a6f45 Geliang Tang  2020-11-19  665  	unsigned int opt_size = *size;
dcb008513c667a Yonglong Li   2021-06-17  666  	struct mptcp_addr_info remote;
dcb008513c667a Yonglong Li   2021-06-17  667  	struct mptcp_addr_info local;
dcb008513c667a Yonglong Li   2021-06-17  668  	int ret = false;
dcb008513c667a Yonglong Li   2021-06-17  669  	u8 add_addr, flags;
1b1c7a0ef7f323 Peter Krystad 2020-03-27  670  	int len;
3df523ab582c52 Peter Krystad 2020-03-27  671  
dcb008513c667a Yonglong Li   2021-06-17  672  	if (!mptcp_pm_should_add_signal(msk))
dcb008513c667a Yonglong Li   2021-06-17  673  		goto out;
dcb008513c667a Yonglong Li   2021-06-17  674  
dcb008513c667a Yonglong Li   2021-06-17  675  	*size = 0;
dcb008513c667a Yonglong Li   2021-06-17  676  	mptcp_pm_add_addr_signal(msk, &local, &remote, &add_addr);
dcb008513c667a Yonglong Li   2021-06-17  677  	if (mptcp_pm_should_add_signal_echo(msk)) {
dcb008513c667a Yonglong Li   2021-06-17  678  		if (skb && skb_is_tcp_pure_ack(skb)) {
84dfe3677a6f45 Geliang Tang  2020-11-19  679  			pr_debug("drop other suboptions");
84dfe3677a6f45 Geliang Tang  2020-11-19  680  			opts->suboptions = 0;
3ae32c07815a24 Geliang Tang  2020-12-15  681  			opts->ext_copy.use_ack = 0;
3ae32c07815a24 Geliang Tang  2020-12-15  682  			opts->ext_copy.use_map = 0;
84dfe3677a6f45 Geliang Tang  2020-11-19  683  			remaining += opt_size;
84dfe3677a6f45 Geliang Tang  2020-11-19  684  			drop_other_suboptions = true;
84dfe3677a6f45 Geliang Tang  2020-11-19  685  		}
dcb008513c667a Yonglong Li   2021-06-17  686  		len = mptcp_add_addr_len(remote.family, true, !!remote.port);
dcb008513c667a Yonglong Li   2021-06-17  687  		if (remaining < len && mptcp_pm_should_add_signal_addr(msk))
dcb008513c667a Yonglong Li   2021-06-17  688  			goto add_addr;
dcb008513c667a Yonglong Li   2021-06-17  689  		else if (remaining < len)
dcb008513c667a Yonglong Li   2021-06-17  690  			goto out;
dcb008513c667a Yonglong Li   2021-06-17  691  		remaining -= len;
dcb008513c667a Yonglong Li   2021-06-17  692  		*size += len;
dcb008513c667a Yonglong Li   2021-06-17  693  		opts->remote = remote;
dcb008513c667a Yonglong Li   2021-06-17  694  		flags = (u8)~BIT(MPTCP_ADD_ADDR_ECHO);
dcb008513c667a Yonglong Li   2021-06-17  695  		opts->suboptions |= OPTION_MPTCP_ADD_ECHO;
dcb008513c667a Yonglong Li   2021-06-17  696  		pr_debug("addr_id=%d, echo=1, port=%d addr_signal:%x",
dcb008513c667a Yonglong Li   2021-06-17  697  			 opts->remote.id, ntohs(opts->remote.port), add_addr);
dcb008513c667a Yonglong Li   2021-06-17  698  	} else if (mptcp_pm_should_add_signal_addr(msk)) {
dcb008513c667a Yonglong Li   2021-06-17  699  add_addr:
dcb008513c667a Yonglong Li   2021-06-17  700  		if ((local.family == AF_INET6 || local.port) && skb &&
dcb008513c667a Yonglong Li   2021-06-17  701  		    skb_is_tcp_pure_ack(skb)) {
dcb008513c667a Yonglong Li   2021-06-17  702  			pr_debug("drop other suboptions");
dcb008513c667a Yonglong Li   2021-06-17  703  			opts->suboptions = 0;
dcb008513c667a Yonglong Li   2021-06-17  704  			opts->ext_copy.use_ack = 0;
dcb008513c667a Yonglong Li   2021-06-17  705  			opts->ext_copy.use_map = 0;
dcb008513c667a Yonglong Li   2021-06-17  706  			remaining += opt_size;
dcb008513c667a Yonglong Li   2021-06-17  707  			drop_other_suboptions = true;
dcb008513c667a Yonglong Li   2021-06-17  708  		}
dcb008513c667a Yonglong Li   2021-06-17  709  		len = mptcp_add_addr_len(local.family, false, !!local.port);
1b1c7a0ef7f323 Peter Krystad 2020-03-27  710  		if (remaining < len)
dcb008513c667a Yonglong Li   2021-06-17  711  			goto out;
dcb008513c667a Yonglong Li   2021-06-17  712  		*size += len;
dcb008513c667a Yonglong Li   2021-06-17  713  		opts->addr = local;
3df523ab582c52 Peter Krystad 2020-03-27  714  		opts->ahmac = add_addr_generate_hmac(msk->local_key,
3df523ab582c52 Peter Krystad 2020-03-27  715  						     msk->remote_key,
761c124ed96985 Geliang Tang  2021-04-06  716  						     &opts->addr);
dcb008513c667a Yonglong Li   2021-06-17  717  		opts->suboptions |= OPTION_MPTCP_ADD_ADDR;
dcb008513c667a Yonglong Li   2021-06-17  718  		flags = (u8)~BIT(MPTCP_ADD_ADDR_SIGNAL);
dcb008513c667a Yonglong Li   2021-06-17  719  		pr_debug("addr_id=%d, ahmac=%llu, echo=0, port=%d, addr_signal:%x",
dcb008513c667a Yonglong Li   2021-06-17  720  			 opts->addr.id, opts->ahmac, ntohs(opts->addr.port), add_addr);
3df523ab582c52 Peter Krystad 2020-03-27  721  	}
3df523ab582c52 Peter Krystad 2020-03-27  722  
dcb008513c667a Yonglong Li   2021-06-17  723  	if (drop_other_suboptions)
dcb008513c667a Yonglong Li   2021-06-17  724  		*size -= opt_size;
dcb008513c667a Yonglong Li   2021-06-17  725  	spin_lock_bh(&msk->pm.lock);
dcb008513c667a Yonglong Li   2021-06-17 @726  	WRITE_ONCE(msk->pm.addr_signal, flags | msk->pm.addr_signal);
dcb008513c667a Yonglong Li   2021-06-17  727  	spin_unlock_bh(&msk->pm.lock);
dcb008513c667a Yonglong Li   2021-06-17  728  	ret = true;
dcb008513c667a Yonglong Li   2021-06-17  729  
dcb008513c667a Yonglong Li   2021-06-17  730  out:
dcb008513c667a Yonglong Li   2021-06-17  731  	return ret;
3df523ab582c52 Peter Krystad 2020-03-27  732  }
3df523ab582c52 Peter Krystad 2020-03-27  733  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-06-18  1:24 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-17  9:14 [PATCH v3 0/4] mptcp: fix conflicts when using pm.add_signal in ADD_ADDR/echo and RM_ADDR process Yonglong Li
2021-06-17  9:14 ` [PATCH v3 1/4] mptcp: fix ADD_ADDR and RM_ADDR maybe flush addr_signal each other Yonglong Li
2021-06-17 21:06   ` Mat Martineau
2021-06-17  9:14 ` [PATCH v3 2/4] mptcp: make MPTCP_ADD_ADDR_SIGNAL and MPTCP_ADD_ADDR_ECHO separate Yonglong Li
2021-06-17  9:14 ` [PATCH v3 3/4] mptcp: build ADD_ADDR/echo-ADD_ADDR option according pm.add_signal Yonglong Li
2021-06-17 12:37   ` Geliang Tang
2021-06-18  1:10     ` Yonglong Li
2021-06-17 19:22   ` kernel test robot
2021-06-17 19:22     ` kernel test robot
2021-06-18  0:25   ` Mat Martineau
2021-06-18  1:24     ` Yonglong Li
2021-06-17  9:14 ` [PATCH v3 4/4] mptcp: remove MPTCP_ADD_ADDR_IPV6 and MPTCP_ADD_ADDR_PORT Yonglong Li
2021-06-17 23:38 [PATCH v3 3/4] mptcp: build ADD_ADDR/echo-ADD_ADDR option according pm.add_signal kernel test robot

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.