From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============5273081161761654237==" MIME-Version: 1.0 From: kernel test robot To: kbuild-all@lists.01.org Subject: Re: [PATCH v3 12/18] tcp: authopt: Add key selection controls Date: Fri, 10 Dec 2021 00:57:20 +0800 Message-ID: <202112100044.EM5GEcUJ-lkp@intel.com> In-Reply-To: <131df4e36874ba12e77fda4387ef79317eeb4a79.1638962992.git.cdleonard@gmail.com> List-Id: --===============5273081161761654237== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Leonard, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on 1fe5b01262844be03de98afdd56d1d393df04d7e] url: https://github.com/0day-ci/linux/commits/Leonard-Crestez/tcp-Initia= l-support-for-RFC5925-auth-option/20211208-194125 base: 1fe5b01262844be03de98afdd56d1d393df04d7e config: m68k-randconfig-s031-20211209 (https://download.01.org/0day-ci/arch= ive/20211210/202112100044.EM5GEcUJ-lkp(a)intel.com/config) compiler: m68k-linux-gcc (GCC) 11.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/= make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-dirty # https://github.com/0day-ci/linux/commit/8082f98bdfa221e0dc891e89b= eecb5d1e3ac64ac git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Leonard-Crestez/tcp-Initial-suppor= t-for-RFC5925-auth-option/20211208-194125 git checkout 8082f98bdfa221e0dc891e89beecb5d1e3ac64ac # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=3D$HOME/0day COMPILER=3Dgcc-11.2.0 make.cross= C=3D1 CF=3D'-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=3Dbuild_dir ARCH=3Dm= 68k SHELL=3D/bin/bash net/ipv4/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) >> net/ipv4/tcp_authopt.c:343:23: sparse: sparse: incompatible types in com= parison expression (different address spaces): >> net/ipv4/tcp_authopt.c:343:23: sparse: struct tcp_authopt_key_info [n= oderef] __rcu * >> net/ipv4/tcp_authopt.c:343:23: sparse: struct tcp_authopt_key_info * net/ipv4/tcp_authopt.c:345:23: sparse: sparse: incompatible types in com= parison expression (different address spaces): net/ipv4/tcp_authopt.c:345:23: sparse: struct tcp_authopt_key_info [n= oderef] __rcu * net/ipv4/tcp_authopt.c:345:23: sparse: struct tcp_authopt_key_info * net/ipv4/tcp_authopt.c:369:25: sparse: sparse: incompatible types in com= parison expression (different address spaces): net/ipv4/tcp_authopt.c:369:25: sparse: struct tcp_authopt_key_info [n= oderef] __rcu * net/ipv4/tcp_authopt.c:369:25: sparse: struct tcp_authopt_key_info * net/ipv4/tcp_authopt.c:509:20: sparse: sparse: incompatible types in com= parison expression (different address spaces): net/ipv4/tcp_authopt.c:509:20: sparse: struct tcp_authopt_key_info [n= oderef] __rcu * net/ipv4/tcp_authopt.c:509:20: sparse: struct tcp_authopt_key_info * net/ipv4/tcp_authopt.c:528:13: sparse: sparse: incompatible types in com= parison expression (different address spaces): net/ipv4/tcp_authopt.c:528:13: sparse: struct tcp_authopt_key_info [n= oderef] __rcu * net/ipv4/tcp_authopt.c:528:13: sparse: struct tcp_authopt_key_info * net/ipv4/tcp_authopt.c:529:17: sparse: sparse: incompatible types in com= parison expression (different address spaces): net/ipv4/tcp_authopt.c:529:17: sparse: struct tcp_authopt_key_info [n= oderef] __rcu * net/ipv4/tcp_authopt.c:529:17: sparse: struct tcp_authopt_key_info * vim +343 net/ipv4/tcp_authopt.c 306 = 307 /** 308 * __tcp_authopt_select_key - select key for sending 309 * 310 * @sk: socket 311 * @info: socket's tcp_authopt_info 312 * @addr_sk: socket used for address lookup. Same as sk except for s= ynack case 313 * @rnextkeyid: value of rnextkeyid caller should write in packet 314 * @locked: If we're holding the socket lock. This is false for some= timewait and reset cases 315 * 316 * Result is protected by RCU and can't be stored, it may only be pa= ssed to 317 * tcp_authopt_hash and only under a single rcu_read_lock. 318 */ 319 struct tcp_authopt_key_info *__tcp_authopt_select_key(const struct s= ock *sk, 320 struct tcp_authopt_info *info, 321 const struct sock *addr_sk, 322 u8 *rnextkeyid, 323 bool locked) 324 { 325 struct tcp_authopt_key_info *key, *new_key =3D NULL; 326 = 327 /* Listen sockets don't refer to any specific connection so we don'= t try 328 * to keep using the same key and ignore any received keyids. 329 */ 330 if (sk->sk_state =3D=3D TCP_LISTEN) { 331 int send_keyid =3D -1; 332 = 333 if (info->flags & TCP_AUTHOPT_FLAG_LOCK_KEYID) 334 send_keyid =3D info->send_keyid; 335 key =3D tcp_authopt_lookup_send(info, addr_sk, send_keyid); 336 if (key) 337 *rnextkeyid =3D key->recv_id; 338 = 339 return key; 340 } 341 = 342 if (locked) > 343 key =3D rcu_dereference_protected(info->send_key, lockdep_sock_is_= held(sk)); 344 else 345 key =3D rcu_dereference(info->send_key); 346 = 347 /* Try to keep the same sending key unless user or peer requires a = different key 348 * User request (via TCP_AUTHOPT_FLAG_LOCK_KEYID) always overrides = peer request. 349 */ 350 if (info->flags & TCP_AUTHOPT_FLAG_LOCK_KEYID) { 351 int send_keyid =3D info->send_keyid; 352 = 353 if (!key || key->send_id !=3D send_keyid) 354 new_key =3D tcp_authopt_lookup_send(info, addr_sk, send_keyid); 355 } else { 356 if (!key || key->send_id !=3D info->recv_rnextkeyid) 357 new_key =3D tcp_authopt_lookup_send(info, addr_sk, info->recv_rne= xtkeyid); 358 } 359 /* If no key found with specific send_id try anything else. */ 360 if (!key && !new_key) 361 new_key =3D tcp_authopt_lookup_send(info, addr_sk, -1); 362 = 363 /* Update current key only if we hold the socket lock, otherwise we= might 364 * store a pointer that goes stale 365 */ 366 if (new_key && key !=3D new_key) { 367 key =3D new_key; 368 if (locked) 369 rcu_assign_pointer(info->send_key, key); 370 } 371 = 372 if (key) { 373 if (info->flags & TCP_AUTHOPT_FLAG_LOCK_RNEXTKEYID) 374 *rnextkeyid =3D info->send_rnextkeyid; 375 else 376 *rnextkeyid =3D info->send_rnextkeyid =3D key->recv_id; 377 } 378 = 379 return key; 380 } 381 EXPORT_SYMBOL(__tcp_authopt_select_key); 382 = --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org --===============5273081161761654237==--