mptcp.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Yonglong Li <liyonglong@chinatelecom.cn>, mptcp@lists.linux.dev
Cc: kbuild-all@lists.01.org, clang-built-linux@googlegroups.com,
	pabeni@redhat.com, matthieu.baerts@tessares.net,
	mathew.j.martineau@linux.intel.com, geliangtang@gmail.com,
	Yonglong Li <liyonglong@chinatelecom.cn>
Subject: Re: [PATCH v3 3/4] mptcp: build ADD_ADDR/echo-ADD_ADDR option according pm.add_signal
Date: Fri, 18 Jun 2021 03:22:05 +0800	[thread overview]
Message-ID: <202106180313.zlMWzcl5-lkp@intel.com> (raw)
In-Reply-To: <1623921276-97178-4-git-send-email-liyonglong@chinatelecom.cn>

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

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
config: x86_64-randconfig-a015-20210617 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 64720f57bea6a6bf033feef4a5751ab9c0c3b401)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # https://github.com/0day-ci/linux/commit/dcb008513c667a57c48dd885599f2d760c8cf7eb
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Yonglong-Li/mptcp-fix-conflicts-when-using-pm-add_signal-in-ADD_ADDR-echo-and-RM_ADDR-process/20210617-171559
        git checkout dcb008513c667a57c48dd885599f2d760c8cf7eb
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

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

All warnings (new ones prefixed by >>):

   net/mptcp/options.c:567:21: warning: parameter 'remaining' set but not used [-Wunused-but-set-parameter]
                                             unsigned int remaining,
                                                          ^
>> net/mptcp/options.c:698:9: warning: variable 'flags' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
           } else if (mptcp_pm_should_add_signal_addr(msk)) {
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:58:30: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/mptcp/options.c:726:34: note: uninitialized use occurs here
           WRITE_ONCE(msk->pm.addr_signal, flags | msk->pm.addr_signal);
                                           ^~~~~
   include/asm-generic/rwonce.h:61:18: note: expanded from macro 'WRITE_ONCE'
           __WRITE_ONCE(x, val);                                           \
                           ^~~
   include/asm-generic/rwonce.h:55:33: note: expanded from macro '__WRITE_ONCE'
           *(volatile typeof(x) *)&(x) = (val);                            \
                                          ^~~
   net/mptcp/options.c:698:9: note: remove the 'if' if its condition is always true
           } else if (mptcp_pm_should_add_signal_addr(msk)) {
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   net/mptcp/options.c:669:20: note: initialize the variable 'flags' to silence this warning
           u8 add_addr, flags;
                             ^
                              = '\0'
   2 warnings generated.


vim +698 net/mptcp/options.c

   563	
   564	static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb,
   565						  bool snd_data_fin_enable,
   566						  unsigned int *size,
 > 567						  unsigned int remaining,
   568						  struct mptcp_out_options *opts)
   569	{
   570		struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
   571		struct mptcp_sock *msk = mptcp_sk(subflow->conn);
   572		unsigned int dss_size = 0;
   573		struct mptcp_ext *mpext;
   574		unsigned int ack_size;
   575		bool ret = false;
   576		u64 ack_seq;
   577	
   578		opts->csum_reqd = READ_ONCE(msk->csum_enabled);
   579		mpext = skb ? mptcp_get_ext(skb) : NULL;
   580	
   581		if (!skb || (mpext && mpext->use_map) || snd_data_fin_enable) {
   582			unsigned int map_size = TCPOLEN_MPTCP_DSS_BASE + TCPOLEN_MPTCP_DSS_MAP64;
   583	
   584			if (mpext) {
   585				if (opts->csum_reqd)
   586					map_size += TCPOLEN_MPTCP_DSS_CHECKSUM;
   587	
   588				opts->ext_copy = *mpext;
   589			}
   590	
   591			remaining -= map_size;
   592			dss_size = map_size;
   593			if (skb && snd_data_fin_enable)
   594				mptcp_write_data_fin(subflow, skb, &opts->ext_copy);
   595			ret = true;
   596		}
   597	
   598		/* passive sockets msk will set the 'can_ack' after accept(), even
   599		 * if the first subflow may have the already the remote key handy
   600		 */
   601		opts->ext_copy.use_ack = 0;
   602		if (!READ_ONCE(msk->can_ack)) {
   603			*size = ALIGN(dss_size, 4);
   604			return ret;
   605		}
   606	
   607		ack_seq = READ_ONCE(msk->ack_seq);
   608		if (READ_ONCE(msk->use_64bit_ack)) {
   609			ack_size = TCPOLEN_MPTCP_DSS_ACK64;
   610			opts->ext_copy.data_ack = ack_seq;
   611			opts->ext_copy.ack64 = 1;
   612		} else {
   613			ack_size = TCPOLEN_MPTCP_DSS_ACK32;
   614			opts->ext_copy.data_ack32 = (uint32_t)ack_seq;
   615			opts->ext_copy.ack64 = 0;
   616		}
   617		opts->ext_copy.use_ack = 1;
   618		WRITE_ONCE(msk->old_wspace, __mptcp_space((struct sock *)msk));
   619	
   620		/* Add kind/length/subtype/flag overhead if mapping is not populated */
   621		if (dss_size == 0)
   622			ack_size += TCPOLEN_MPTCP_DSS_BASE;
   623	
   624		dss_size += ack_size;
   625	
   626		*size = ALIGN(dss_size, 4);
   627		return true;
   628	}
   629	
   630	static u64 add_addr_generate_hmac(u64 key1, u64 key2,
   631					  struct mptcp_addr_info *addr)
   632	{
   633		u16 port = ntohs(addr->port);
   634		u8 hmac[SHA256_DIGEST_SIZE];
   635		u8 msg[19];
   636		int i = 0;
   637	
   638		msg[i++] = addr->id;
   639		if (addr->family == AF_INET) {
   640			memcpy(&msg[i], &addr->addr.s_addr, 4);
   641			i += 4;
   642		}
   643	#if IS_ENABLED(CONFIG_MPTCP_IPV6)
   644		else if (addr->family == AF_INET6) {
   645			memcpy(&msg[i], &addr->addr6.s6_addr, 16);
   646			i += 16;
   647		}
   648	#endif
   649		msg[i++] = port >> 8;
   650		msg[i++] = port & 0xFF;
   651	
   652		mptcp_crypto_hmac_sha(key1, key2, msg, i, hmac);
   653	
   654		return get_unaligned_be64(&hmac[SHA256_DIGEST_SIZE - sizeof(u64)]);
   655	}
   656	
   657	static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *skb,
   658						       unsigned int *size,
   659						       unsigned int remaining,
   660						       struct mptcp_out_options *opts)
   661	{
   662		struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
   663		struct mptcp_sock *msk = mptcp_sk(subflow->conn);
   664		bool drop_other_suboptions = false;
   665		unsigned int opt_size = *size;
   666		struct mptcp_addr_info remote;
   667		struct mptcp_addr_info local;
   668		int ret = false;
   669		u8 add_addr, flags;
   670		int len;
   671	
   672		if (!mptcp_pm_should_add_signal(msk))
   673			goto out;
   674	
   675		*size = 0;
   676		mptcp_pm_add_addr_signal(msk, &local, &remote, &add_addr);
   677		if (mptcp_pm_should_add_signal_echo(msk)) {
   678			if (skb && skb_is_tcp_pure_ack(skb)) {
   679				pr_debug("drop other suboptions");
   680				opts->suboptions = 0;
   681				opts->ext_copy.use_ack = 0;
   682				opts->ext_copy.use_map = 0;
   683				remaining += opt_size;
   684				drop_other_suboptions = true;
   685			}
   686			len = mptcp_add_addr_len(remote.family, true, !!remote.port);
   687			if (remaining < len && mptcp_pm_should_add_signal_addr(msk))
   688				goto add_addr;
   689			else if (remaining < len)
   690				goto out;
   691			remaining -= len;
   692			*size += len;
   693			opts->remote = remote;
   694			flags = (u8)~BIT(MPTCP_ADD_ADDR_ECHO);
   695			opts->suboptions |= OPTION_MPTCP_ADD_ECHO;
   696			pr_debug("addr_id=%d, echo=1, port=%d addr_signal:%x",
   697				 opts->remote.id, ntohs(opts->remote.port), add_addr);
 > 698		} else if (mptcp_pm_should_add_signal_addr(msk)) {
   699	add_addr:
   700			if ((local.family == AF_INET6 || local.port) && skb &&
   701			    skb_is_tcp_pure_ack(skb)) {
   702				pr_debug("drop other suboptions");
   703				opts->suboptions = 0;
   704				opts->ext_copy.use_ack = 0;
   705				opts->ext_copy.use_map = 0;
   706				remaining += opt_size;
   707				drop_other_suboptions = true;
   708			}
   709			len = mptcp_add_addr_len(local.family, false, !!local.port);
   710			if (remaining < len)
   711				goto out;
   712			*size += len;
   713			opts->addr = local;
   714			opts->ahmac = add_addr_generate_hmac(msk->local_key,
   715							     msk->remote_key,
   716							     &opts->addr);
   717			opts->suboptions |= OPTION_MPTCP_ADD_ADDR;
   718			flags = (u8)~BIT(MPTCP_ADD_ADDR_SIGNAL);
   719			pr_debug("addr_id=%d, ahmac=%llu, echo=0, port=%d, addr_signal:%x",
   720				 opts->addr.id, opts->ahmac, ntohs(opts->addr.port), add_addr);
   721		}
   722	
   723		if (drop_other_suboptions)
   724			*size -= opt_size;
   725		spin_lock_bh(&msk->pm.lock);
   726		WRITE_ONCE(msk->pm.addr_signal, flags | msk->pm.addr_signal);
   727		spin_unlock_bh(&msk->pm.lock);
   728		ret = true;
   729	
   730	out:
   731		return ret;
   732	}
   733	

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 31950 bytes --]

  parent reply	other threads:[~2021-06-17 19:22 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

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=202106180313.zlMWzcl5-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=geliangtang@gmail.com \
    --cc=kbuild-all@lists.01.org \
    --cc=liyonglong@chinatelecom.cn \
    --cc=mathew.j.martineau@linux.intel.com \
    --cc=matthieu.baerts@tessares.net \
    --cc=mptcp@lists.linux.dev \
    --cc=pabeni@redhat.com \
    /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;
as well as URLs for NNTP newsgroup(s).