CC: [email protected] CC: [email protected] CC: [email protected] TO: Chuck Lever <[email protected]>
tree: git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux topic-rpc-with-tls-upcall head: 667fe15e9d8a4b978367248bdf40bcd31620a08d commit: c6ec67d41918e82616ed6f0ea2c3cb90710f2ee7 [14/15] NET: Add support for PF_TLSH (a TLS handshake listener) :::::: branch date: 21 hours ago :::::: commit date: 21 hours ago config: riscv-randconfig-c006-20211207 (https://download.01.org/0day-ci/archive/20211207/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 097a1cb1d5ebb3a0ec4bcaed8ba3ff6a8e33c00a) 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 riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git/commit/?id=c6ec67d41918e82616ed6f0ea2c3cb90710f2ee7 git remote add cel git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux git fetch --no-tags cel topic-rpc-with-tls-upcall git checkout c6ec67d41918e82616ed6f0ea2c3cb90710f2ee7 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) drivers/usb/dwc2/hcd_ddma.c:974:2: note: Taking false branch if (chan->halt_status == DWC2_HC_XFER_URB_DEQUEUE) { ^ drivers/usb/dwc2/hcd_ddma.c:980:6: note: Assuming 'halt_status' is equal to DWC2_HC_XFER_AHB_ERR if (halt_status == DWC2_HC_XFER_AHB_ERR || ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/dwc2/hcd_ddma.c:980:42: note: Left side of '||' is true if (halt_status == DWC2_HC_XFER_AHB_ERR || ^ drivers/usb/dwc2/hcd_ddma.c:991:13: note: 'halt_status' is equal to DWC2_HC_XFER_AHB_ERR int err = halt_status == DWC2_HC_XFER_AHB_ERR ? ^~~~~~~~~~~ drivers/usb/dwc2/hcd_ddma.c:991:13: note: '?' condition is true drivers/usb/dwc2/hcd_ddma.c:994:3: note: Loop condition is true. Entering loop body list_for_each_entry_safe(qtd, qtd_tmp, &qh->qtd_list, ^ include/linux/list.h:717:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ drivers/usb/dwc2/hcd_ddma.c:996:8: note: Assuming field 'urb' is null if (qtd->urb) { ^~~~~~~~ drivers/usb/dwc2/hcd_ddma.c:996:4: note: Taking false branch if (qtd->urb) { ^ drivers/usb/dwc2/hcd_ddma.c:1006:4: note: Calling 'dwc2_hcd_qtd_unlink_and_free' dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/dwc2/hcd.h:584:2: note: Memory is released kfree(qtd); ^~~~~~~~~~ drivers/usb/dwc2/hcd_ddma.c:1006:4: note: Returning; memory was released dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/dwc2/hcd_ddma.c:994:3: note: Loop condition is false. Execution continues on line 1009 list_for_each_entry_safe(qtd, qtd_tmp, &qh->qtd_list, ^ include/linux/list.h:717:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ drivers/usb/dwc2/hcd_ddma.c:1308:3: note: Returning; memory was released dwc2_complete_isoc_xfer_ddma(hsotg, chan, halt_status); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/dwc2/hcd_ddma.c:1311:7: note: 'halt_status' is not equal to DWC2_HC_XFER_COMPLETE if (halt_status != DWC2_HC_XFER_COMPLETE || ^~~~~~~~~~~ drivers/usb/dwc2/hcd_ddma.c:1311:44: note: Left side of '||' is true if (halt_status != DWC2_HC_XFER_COMPLETE || ^ drivers/usb/dwc2/hcd_ddma.c:1319:4: note: Use of memory after it is freed list_for_each_entry_safe(qtd, qtd_tmp, ^ include/linux/list.h:718:7: note: expanded from macro 'list_for_each_entry_safe' n = list_next_entry(pos, member); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:557:2: note: expanded from macro 'list_next_entry' list_entry((pos)->member.next, typeof(*(pos)), member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:513:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/container_of.h:18:25: note: expanded from macro 'container_of' void *__mptr = (void *)(ptr); \ ^~~~~ Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. drivers/hwmon/stts751.c:685:3: warning: Value stored to 'name' is never read [clang-analyzer-deadcode.DeadStores] name = "STTS751-0"; ^ ~~~~~~~~~~~ drivers/hwmon/stts751.c:685:3: note: Value stored to 'name' is never read name = "STTS751-0"; ^ ~~~~~~~~~~~ drivers/hwmon/stts751.c:688:3: warning: Value stored to 'name' is never read [clang-analyzer-deadcode.DeadStores] name = "STTS751-1"; ^ ~~~~~~~~~~~ drivers/hwmon/stts751.c:688:3: note: Value stored to 'name' is never read name = "STTS751-1"; ^ ~~~~~~~~~~~ Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. >> net/tls/af_tlsh.c:314:11: warning: Although the value stored to 'newsk' is >> used in the enclosing expression, the value is never actually read from >> 'newsk' [clang-analyzer-deadcode.DeadStores] while (!(newsk = tlsh_accept_dequeue(sk, newsock))) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/tls/af_tlsh.c:314:11: note: Although the value stored to 'newsk' is used in the enclosing expression, the value is never actually read from 'newsk' while (!(newsk = tlsh_accept_dequeue(sk, newsock))) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. net/tls/tls_sw.c:407:2: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] list_for_each_entry_safe(rec, tmp, &ctx->tx_list, list) { ^ include/linux/list.h:718:7: note: expanded from macro 'list_for_each_entry_safe' n = list_next_entry(pos, member); \ ^ include/linux/list.h:557:2: note: expanded from macro 'list_next_entry' list_entry((pos)->member.next, typeof(*(pos)), member) ^ include/linux/list.h:513:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/container_of.h:18:25: note: expanded from macro 'container_of' void *__mptr = (void *)(ptr); \ ^ net/tls/tls_sw.c:2288:15: note: Assuming 'tls_ctx' is non-null if (unlikely(!tls_ctx)) ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/tls/tls_sw.c:2288:2: note: Taking false branch if (unlikely(!tls_ctx)) ^ net/tls/tls_sw.c:2292:6: note: Assuming the condition is false if (test_bit(BIT_TX_CLOSING, &ctx->tx_bitmask)) ^ include/asm-generic/bitops/non-atomic.h:120:18: note: expanded from macro 'test_bit' #define test_bit arch_test_bit ^ net/tls/tls_sw.c:2292:2: note: Taking false branch if (test_bit(BIT_TX_CLOSING, &ctx->tx_bitmask)) ^ net/tls/tls_sw.c:2295:6: note: Assuming the condition is false if (!test_and_clear_bit(BIT_TX_SCHEDULED, &ctx->tx_bitmask)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/tls/tls_sw.c:2295:2: note: Taking false branch if (!test_and_clear_bit(BIT_TX_SCHEDULED, &ctx->tx_bitmask)) ^ net/tls/tls_sw.c:2299:2: note: Calling 'tls_tx_records' tls_tx_records(sk, -1); ^~~~~~~~~~~~~~~~~~~~~~ net/tls/tls_sw.c:385:2: note: Taking true branch if (tls_is_partially_sent_record(tls_ctx)) { ^ net/tls/tls_sw.c:389:3: note: Taking true branch if (flags == -1) ^ net/tls/tls_sw.c:395:7: note: Assuming 'rc' is 0 if (rc) ^~ net/tls/tls_sw.c:395:3: note: Taking false branch if (rc) ^ net/tls/tls_sw.c:403:3: note: Memory is released kfree(rec); ^~~~~~~~~~ net/tls/tls_sw.c:407:2: note: Use of memory after it is freed list_for_each_entry_safe(rec, tmp, &ctx->tx_list, list) { ^ include/linux/list.h:718:7: note: expanded from macro 'list_for_each_entry_safe' n = list_next_entry(pos, member); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:557:2: note: expanded from macro 'list_next_entry' list_entry((pos)->member.next, typeof(*(pos)), member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:513:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/container_of.h:18:25: note: expanded from macro 'container_of' void *__mptr = (void *)(ptr); \ ^~~~~ net/tls/tls_sw.c:1963:5: warning: Value stored to 'decrypted' is never read [clang-analyzer-deadcode.DeadStores] decrypted = 0; ^ ~ net/tls/tls_sw.c:1963:5: note: Value stored to 'decrypted' is never read decrypted = 0; ^ ~ net/tls/tls_sw.c:2212:2: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] list_for_each_entry_safe(rec, tmp, &ctx->tx_list, list) { ^ include/linux/list.h:718:7: note: expanded from macro 'list_for_each_entry_safe' n = list_next_entry(pos, member); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:557:2: note: expanded from macro 'list_next_entry' list_entry((pos)->member.next, typeof(*(pos)), member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:513:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) vim +314 net/tls/af_tlsh.c c6ec67d41918e8 Chuck Lever 2021-11-19 283 c6ec67d41918e8 Chuck Lever 2021-11-19 284 /** c6ec67d41918e8 Chuck Lever 2021-11-19 285 * tlsh_accept - return a connection waiting for a TLS handshake c6ec67d41918e8 Chuck Lever 2021-11-19 286 * @sock: listener socket which connection requests arrive on c6ec67d41918e8 Chuck Lever 2021-11-19 287 * @newsock: socket to move incoming connection to c6ec67d41918e8 Chuck Lever 2021-11-19 288 * @flags: SOCK_NONBLOCK and/or SOCK_CLOEXEC c6ec67d41918e8 Chuck Lever 2021-11-19 289 * @kern: 'true' for kernel-internal sockets (ignored) c6ec67d41918e8 Chuck Lever 2021-11-19 290 * c6ec67d41918e8 Chuck Lever 2021-11-19 291 * Return values: c6ec67d41918e8 Chuck Lever 2021-11-19 292 * %0: @newsock has been initialized. c6ec67d41918e8 Chuck Lever 2021-11-19 293 * %-EPERM: caller is not privileged c6ec67d41918e8 Chuck Lever 2021-11-19 294 */ c6ec67d41918e8 Chuck Lever 2021-11-19 295 static int tlsh_accept(struct socket *sock, struct socket *newsock, int flags, c6ec67d41918e8 Chuck Lever 2021-11-19 296 bool kern) c6ec67d41918e8 Chuck Lever 2021-11-19 297 { c6ec67d41918e8 Chuck Lever 2021-11-19 298 struct sock *sk = sock->sk, *newsk; c6ec67d41918e8 Chuck Lever 2021-11-19 299 DECLARE_WAITQUEUE(wait, current); c6ec67d41918e8 Chuck Lever 2021-11-19 300 long timeo; c6ec67d41918e8 Chuck Lever 2021-11-19 301 int rc; c6ec67d41918e8 Chuck Lever 2021-11-19 302 c6ec67d41918e8 Chuck Lever 2021-11-19 303 if (!capable(CAP_NET_BIND_SERVICE)) c6ec67d41918e8 Chuck Lever 2021-11-19 304 return -EPERM; c6ec67d41918e8 Chuck Lever 2021-11-19 305 c6ec67d41918e8 Chuck Lever 2021-11-19 306 lock_sock(sk); c6ec67d41918e8 Chuck Lever 2021-11-19 307 rc = -EBADF; c6ec67d41918e8 Chuck Lever 2021-11-19 308 if (sk->sk_state != TCP_LISTEN) c6ec67d41918e8 Chuck Lever 2021-11-19 309 goto out; c6ec67d41918e8 Chuck Lever 2021-11-19 310 c6ec67d41918e8 Chuck Lever 2021-11-19 311 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); c6ec67d41918e8 Chuck Lever 2021-11-19 312 c6ec67d41918e8 Chuck Lever 2021-11-19 313 add_wait_queue_exclusive(sk_sleep(sk), &wait); c6ec67d41918e8 Chuck Lever 2021-11-19 @314 while (!(newsk = tlsh_accept_dequeue(sk, newsock))) { c6ec67d41918e8 Chuck Lever 2021-11-19 315 set_current_state(TASK_INTERRUPTIBLE); c6ec67d41918e8 Chuck Lever 2021-11-19 316 if (!timeo) { c6ec67d41918e8 Chuck Lever 2021-11-19 317 rc = -EAGAIN; c6ec67d41918e8 Chuck Lever 2021-11-19 318 break; c6ec67d41918e8 Chuck Lever 2021-11-19 319 } c6ec67d41918e8 Chuck Lever 2021-11-19 320 c6ec67d41918e8 Chuck Lever 2021-11-19 321 release_sock(sk); c6ec67d41918e8 Chuck Lever 2021-11-19 322 timeo = schedule_timeout(timeo); c6ec67d41918e8 Chuck Lever 2021-11-19 323 lock_sock(sk); c6ec67d41918e8 Chuck Lever 2021-11-19 324 c6ec67d41918e8 Chuck Lever 2021-11-19 325 if (sk->sk_state != TCP_LISTEN) { c6ec67d41918e8 Chuck Lever 2021-11-19 326 rc = -EBADF; c6ec67d41918e8 Chuck Lever 2021-11-19 327 break; c6ec67d41918e8 Chuck Lever 2021-11-19 328 } c6ec67d41918e8 Chuck Lever 2021-11-19 329 c6ec67d41918e8 Chuck Lever 2021-11-19 330 if (signal_pending(current)) { c6ec67d41918e8 Chuck Lever 2021-11-19 331 rc = sock_intr_errno(timeo); c6ec67d41918e8 Chuck Lever 2021-11-19 332 break; c6ec67d41918e8 Chuck Lever 2021-11-19 333 } c6ec67d41918e8 Chuck Lever 2021-11-19 334 } c6ec67d41918e8 Chuck Lever 2021-11-19 335 set_current_state(TASK_RUNNING); c6ec67d41918e8 Chuck Lever 2021-11-19 336 remove_wait_queue(sk_sleep(sk), &wait); c6ec67d41918e8 Chuck Lever 2021-11-19 337 if (rc) c6ec67d41918e8 Chuck Lever 2021-11-19 338 goto out; c6ec67d41918e8 Chuck Lever 2021-11-19 339 c6ec67d41918e8 Chuck Lever 2021-11-19 340 sk->sk_state = TCP_LISTEN; c6ec67d41918e8 Chuck Lever 2021-11-19 341 sk_acceptq_removed(sk); c6ec67d41918e8 Chuck Lever 2021-11-19 342 out: c6ec67d41918e8 Chuck Lever 2021-11-19 343 release_sock(sk); c6ec67d41918e8 Chuck Lever 2021-11-19 344 return rc; c6ec67d41918e8 Chuck Lever 2021-11-19 345 } c6ec67d41918e8 Chuck Lever 2021-11-19 346 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
