[dhowells-fs:rxrpc-fixes 8/9] net/rxrpc/sendmsg.c:335:37: warning: implicit conversion from 'int' to 'enum rxrpc_abort_reason' changes value from 128 to -128
kernel test robot <[email protected]> Thu, 30 Jul 2026 23:32:59 +0800
| Newsgroups | dev.linux.lists.oe-kbuild-all |
|---|---|
| Message-ID | <[email protected]> |
tree: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git rxrpc-fixes head: 1029fb7864dd1e7b840b9a434b682a9484239d4c commit: 3b0083bb071d214ad455d484f8c3e80c69beff3f [8/9] rxrpc: Fix CHALLENGE packet overqueuing and simplify RESPONSE generation config: hexagon-randconfig-r072-20260730 (https://download.01.org/0day-ci/archive/20260730/[email protected]/config) compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) smatch: v0.5.0-9187-g5189e3fb reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260730/[email protected]/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ All warnings (new ones prefixed by >>): >> net/rxrpc/sendmsg.c:335:37: warning: implicit conversion from 'int' to 'enum rxrpc_abort_reason' changes value from 128 to -128 [-Wconstant-conversion] 335 | trace_rxrpc_abort(call->debug_id, rxrpc_sendmsg_late_send, | ~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~ net/rxrpc/sendmsg.c:383:37: warning: implicit conversion from 'int' to 'enum rxrpc_abort_reason' changes value from 128 to -128 [-Wconstant-conversion] 383 | trace_rxrpc_abort(call->debug_id, rxrpc_sendmsg_late_send, | ~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. vim +335 net/rxrpc/sendmsg.c b341a0263b1b80 David Howells 2024-12-04 315 0b58b8a18be493 David Howells 2016-09-02 316 /* 0b58b8a18be493 David Howells 2016-09-02 317 * send data through a socket 0b58b8a18be493 David Howells 2016-09-02 318 * - must be called in process context 540b1c48c37ac0 David Howells 2017-02-27 319 * - The caller holds the call user access mutex, but not the socket lock. 0b58b8a18be493 David Howells 2016-09-02 320 */ 0b58b8a18be493 David Howells 2016-09-02 321 static int rxrpc_send_data(struct rxrpc_sock *rx, 0b58b8a18be493 David Howells 2016-09-02 322 struct rxrpc_call *call, e833251ad81316 David Howells 2017-08-29 323 struct msghdr *msg, size_t len, 87d2193d7d96a2 David Howells 2026-07-08 324 rxrpc_notify_end_tx_t notify_end_tx) 87d2193d7d96a2 David Howells 2026-07-08 325 __releases(&call->user_mutex) 0b58b8a18be493 David Howells 2016-09-02 326 { a4ea4c47761943 David Howells 2022-03-31 327 struct rxrpc_txbuf *txb; 0b58b8a18be493 David Howells 2016-09-02 328 struct sock *sk = &rx->sk; b0f571ecd79434 David Howells 2022-08-24 329 enum rxrpc_call_state state; 0b58b8a18be493 David Howells 2016-09-02 330 long timeo; b0f571ecd79434 David Howells 2022-08-24 331 bool more = msg->msg_flags & MSG_MORE; b0f571ecd79434 David Howells 2022-08-24 332 int ret, copied = 0; 0b58b8a18be493 David Howells 2016-09-02 333 f9c7117bd901bd David Howells 2026-07-07 334 if (unlikely(test_bit(RXRPC_CALL_TX_NO_MORE, &call->flags))) { ae4f899894792c David Howells 2024-12-12 @335 trace_rxrpc_abort(call->debug_id, rxrpc_sendmsg_late_send, ae4f899894792c David Howells 2024-12-12 336 call->cid, call->call_id, call->rx_consumed, ae4f899894792c David Howells 2024-12-12 337 0, -EPROTO); 87d2193d7d96a2 David Howells 2026-07-08 338 ret = -EPROTO; 87d2193d7d96a2 David Howells 2026-07-08 339 goto out_unlock; ae4f899894792c David Howells 2024-12-12 340 } f9c7117bd901bd David Howells 2026-07-07 341 if (unlikely(test_bit(RXRPC_CALL_TX_ERROR, &call->flags))) { f9c7117bd901bd David Howells 2026-07-07 342 trace_rxrpc_abort(call->debug_id, rxrpc_sendmsg_tx_error, f9c7117bd901bd David Howells 2026-07-07 343 call->cid, call->call_id, call->rx_consumed, f9c7117bd901bd David Howells 2026-07-07 344 0, -EIO); 87d2193d7d96a2 David Howells 2026-07-08 345 ret = -EIO; 87d2193d7d96a2 David Howells 2026-07-08 346 goto out_unlock; f9c7117bd901bd David Howells 2026-07-07 347 } ae4f899894792c David Howells 2024-12-12 348 0b58b8a18be493 David Howells 2016-09-02 349 timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); 0b58b8a18be493 David Howells 2016-09-02 350 9d35d880e0e4a3 David Howells 2022-10-19 351 ret = rxrpc_wait_to_be_connected(call, &timeo); 9d35d880e0e4a3 David Howells 2022-10-19 352 if (ret < 0) 87d2193d7d96a2 David Howells 2026-07-08 353 goto out_unlock; 9d35d880e0e4a3 David Howells 2022-10-19 354 9d35d880e0e4a3 David Howells 2022-10-19 355 if (call->conn->state == RXRPC_CONN_CLIENT_UNSECURED) { 9d35d880e0e4a3 David Howells 2022-10-19 356 ret = rxrpc_init_client_conn_security(call->conn); 9d35d880e0e4a3 David Howells 2022-10-19 357 if (ret < 0) 87d2193d7d96a2 David Howells 2026-07-08 358 goto out_unlock; 9d35d880e0e4a3 David Howells 2022-10-19 359 } 9d35d880e0e4a3 David Howells 2022-10-19 360 0b58b8a18be493 David Howells 2016-09-02 361 /* this should be in poll */ 0b58b8a18be493 David Howells 2016-09-02 362 sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk); 0b58b8a18be493 David Howells 2016-09-02 363 b0f571ecd79434 David Howells 2022-08-24 364 reload: 7a310f8d7dfe2d David Howells 2024-10-01 365 txb = call->tx_pending; 7a310f8d7dfe2d David Howells 2024-10-01 366 call->tx_pending = NULL; 7a310f8d7dfe2d David Howells 2024-10-01 367 if (txb) 7a310f8d7dfe2d David Howells 2024-10-01 368 rxrpc_see_txbuf(txb, rxrpc_txbuf_see_send_more); 7a310f8d7dfe2d David Howells 2024-10-01 369 b0f571ecd79434 David Howells 2022-08-24 370 ret = -EPIPE; 639f181f0ee20d David Howells 2020-07-20 371 if (sk->sk_shutdown & SEND_SHUTDOWN) b0f571ecd79434 David Howells 2022-08-24 372 goto maybe_error; d41b3f5b968818 David Howells 2022-12-19 373 state = rxrpc_call_state(call); b0f571ecd79434 David Howells 2022-08-24 374 ret = -ESHUTDOWN; b0f571ecd79434 David Howells 2022-08-24 375 if (state >= RXRPC_CALL_COMPLETE) b0f571ecd79434 David Howells 2022-08-24 376 goto maybe_error; b0f571ecd79434 David Howells 2022-08-24 377 ret = -EPROTO; 9b6ce594808580 Wyatt Feng 2026-06-24 378 if (state != RXRPC_CALL_CLIENT_PRE_SEND && 9b6ce594808580 Wyatt Feng 2026-06-24 379 state != RXRPC_CALL_CLIENT_SEND_REQUEST && b0f571ecd79434 David Howells 2022-08-24 380 state != RXRPC_CALL_SERVER_ACK_REQUEST && 2d689424b61845 David Howells 2022-11-11 381 state != RXRPC_CALL_SERVER_SEND_REPLY) { 2d689424b61845 David Howells 2022-11-11 382 /* Request phase complete for this client call */ 2d689424b61845 David Howells 2022-11-11 383 trace_rxrpc_abort(call->debug_id, rxrpc_sendmsg_late_send, 2d689424b61845 David Howells 2022-11-11 384 call->cid, call->call_id, call->rx_consumed, 2d689424b61845 David Howells 2022-11-11 385 0, -EPROTO); b0f571ecd79434 David Howells 2022-08-24 386 goto maybe_error; 2d689424b61845 David Howells 2022-11-11 387 } 0b58b8a18be493 David Howells 2016-09-02 388 b0f571ecd79434 David Howells 2022-08-24 389 ret = -EMSGSIZE; e754eba685aac2 David Howells 2017-06-07 390 if (call->tx_total_len != -1) { b0f571ecd79434 David Howells 2022-08-24 391 if (len - copied > call->tx_total_len) b0f571ecd79434 David Howells 2022-08-24 392 goto maybe_error; b0f571ecd79434 David Howells 2022-08-24 393 if (!more && len - copied != call->tx_total_len) b0f571ecd79434 David Howells 2022-08-24 394 goto maybe_error; e754eba685aac2 David Howells 2017-06-07 395 } e754eba685aac2 David Howells 2017-06-07 396 0b58b8a18be493 David Howells 2016-09-02 397 do { a4ea4c47761943 David Howells 2022-03-31 398 if (!txb) { 49489bb03a5015 David Howells 2024-01-29 399 size_t remain; 0b58b8a18be493 David Howells 2016-09-02 400 0b58b8a18be493 David Howells 2016-09-02 401 _debug("alloc"); 0b58b8a18be493 David Howells 2016-09-02 402 b0f571ecd79434 David Howells 2022-08-24 403 if (!rxrpc_check_tx_space(call, NULL)) b0f571ecd79434 David Howells 2022-08-24 404 goto wait_for_space; 0b58b8a18be493 David Howells 2016-09-02 405 b341a0263b1b80 David Howells 2024-12-04 406 /* See if we need to begin/extend the Tx queue. */ b341a0263b1b80 David Howells 2024-12-04 407 if (!call->send_queue || !((call->send_top + 1) & RXRPC_TXQ_MASK)) { b341a0263b1b80 David Howells 2024-12-04 408 ret = rxrpc_alloc_txqueue(sk, call); b341a0263b1b80 David Howells 2024-12-04 409 if (ret < 0) b341a0263b1b80 David Howells 2024-12-04 410 goto maybe_error; b341a0263b1b80 David Howells 2024-12-04 411 } b341a0263b1b80 David Howells 2024-12-04 412 d7d775b1ffb154 David Howells 2020-09-16 413 /* Work out the maximum size of a packet. Assume that d7d775b1ffb154 David Howells 2020-09-16 414 * the security header is going to be in the padded d7d775b1ffb154 David Howells 2020-09-16 415 * region (enc blocksize), but the trailer is not. d7d775b1ffb154 David Howells 2020-09-16 416 */ d7d775b1ffb154 David Howells 2020-09-16 417 remain = more ? INT_MAX : msg_data_left(msg); 49489bb03a5015 David Howells 2024-01-29 418 txb = call->conn->security->alloc_txbuf(call, remain, sk->sk_allocation); 89e4354110ca64 David Howells 2024-03-12 419 if (!txb) { 89e4354110ca64 David Howells 2024-03-12 420 ret = -ENOMEM; 0b58b8a18be493 David Howells 2016-09-02 421 goto maybe_error; 49489bb03a5015 David Howells 2024-01-29 422 } 0b58b8a18be493 David Howells 2016-09-02 423 } 0b58b8a18be493 David Howells 2016-09-02 424 0b58b8a18be493 David Howells 2016-09-02 425 _debug("append"); 0b58b8a18be493 David Howells 2016-09-02 426 0b58b8a18be493 David Howells 2016-09-02 427 /* append next segment of data to the current buffer */ 0b58b8a18be493 David Howells 2016-09-02 428 if (msg_data_left(msg) > 0) { 29e03ec757292e David Howells 2024-12-04 429 size_t copy = umin(txb->space, msg_data_left(msg)); a4ea4c47761943 David Howells 2022-03-31 430 a4ea4c47761943 David Howells 2022-03-31 431 _debug("add %zu", copy); 06ea2c9c4163b8 David Howells 2025-02-09 432 if (!copy_from_iter_full(txb->data + txb->offset, ff342bdc59f4a7 David Howells 2024-01-29 433 copy, &msg->msg_iter)) 0b58b8a18be493 David Howells 2016-09-02 434 goto efault; a4ea4c47761943 David Howells 2022-03-31 435 _debug("added"); a4ea4c47761943 David Howells 2022-03-31 436 txb->space -= copy; a4ea4c47761943 David Howells 2022-03-31 437 txb->len += copy; a4ea4c47761943 David Howells 2022-03-31 438 txb->offset += copy; 0b58b8a18be493 David Howells 2016-09-02 439 copied += copy; e754eba685aac2 David Howells 2017-06-07 440 if (call->tx_total_len != -1) e754eba685aac2 David Howells 2017-06-07 441 call->tx_total_len -= copy; 0b58b8a18be493 David Howells 2016-09-02 442 } 0b58b8a18be493 David Howells 2016-09-02 443 e122d845a01ece David Howells 2019-01-10 444 /* check for the far side aborting the call or a network error e122d845a01ece David Howells 2019-01-10 445 * occurring */ d41b3f5b968818 David Howells 2022-12-19 446 if (rxrpc_call_is_complete(call)) e122d845a01ece David Howells 2019-01-10 447 goto call_terminated; e122d845a01ece David Howells 2019-01-10 448 0b58b8a18be493 David Howells 2016-09-02 449 /* add the packet to the send queue if it's now full */ a4ea4c47761943 David Howells 2022-03-31 450 if (!txb->space || 0b58b8a18be493 David Howells 2016-09-02 451 (msg_data_left(msg) == 0 && !more)) { f9c7117bd901bd David Howells 2026-07-07 452 /* Do any required crypto. If this fails, it could f9c7117bd901bd David Howells 2026-07-07 453 * have corrupted the txbuf content with a partial f9c7117bd901bd David Howells 2026-07-07 454 * encrypt. Assume that ENOMEM is retryable, but f9c7117bd901bd David Howells 2026-07-07 455 * everything else is terminal. f9c7117bd901bd David Howells 2026-07-07 456 */ a4ea4c47761943 David Howells 2022-03-31 457 ret = call->security->secure_packet(call, txb); f9c7117bd901bd David Howells 2026-07-07 458 if (ret < 0) { f9c7117bd901bd David Howells 2026-07-07 459 if (ret == -ENOMEM) f9c7117bd901bd David Howells 2026-07-07 460 goto maybe_error_rewind; f9c7117bd901bd David Howells 2026-07-07 461 set_bit(RXRPC_CALL_TX_ERROR, &call->flags); 87d2193d7d96a2 David Howells 2026-07-08 462 goto out_txb; f9c7117bd901bd David Howells 2026-07-07 463 } f9c7117bd901bd David Howells 2026-07-07 464 f9c7117bd901bd David Howells 2026-07-07 465 if (msg_data_left(msg) == 0 && !more) f9c7117bd901bd David Howells 2026-07-07 466 txb->flags |= RXRPC_LAST_PACKET; a4ea4c47761943 David Howells 2022-03-31 467 rxrpc_queue_packet(rx, call, txb, notify_end_tx); a4ea4c47761943 David Howells 2022-03-31 468 txb = NULL; 0b58b8a18be493 David Howells 2016-09-02 469 } 0b58b8a18be493 David Howells 2016-09-02 470 } while (msg_data_left(msg) > 0); 0b58b8a18be493 David Howells 2016-09-02 471 0b58b8a18be493 David Howells 2016-09-02 472 success: 0b58b8a18be493 David Howells 2016-09-02 473 ret = copied; 87d2193d7d96a2 David Howells 2026-07-08 474 out_txb: a4ea4c47761943 David Howells 2022-03-31 475 call->tx_pending = txb; 87d2193d7d96a2 David Howells 2026-07-08 476 out_unlock: 87d2193d7d96a2 David Howells 2026-07-08 477 mutex_unlock(&call->user_mutex); 0b58b8a18be493 David Howells 2016-09-02 478 _leave(" = %d", ret); 0b58b8a18be493 David Howells 2016-09-02 479 return ret; 0b58b8a18be493 David Howells 2016-09-02 480 e122d845a01ece David Howells 2019-01-10 481 call_terminated: a4ea4c47761943 David Howells 2022-03-31 482 rxrpc_put_txbuf(txb, rxrpc_txbuf_put_send_aborted); 87d2193d7d96a2 David Howells 2026-07-08 483 call->tx_pending = NULL; 87d2193d7d96a2 David Howells 2026-07-08 484 ret = call->error; 87d2193d7d96a2 David Howells 2026-07-08 485 goto out_unlock; e122d845a01ece David Howells 2019-01-10 486 f9c7117bd901bd David Howells 2026-07-07 487 maybe_error_rewind: f9c7117bd901bd David Howells 2026-07-07 488 /* If we got a retryable error after copying all the supplied data into f9c7117bd901bd David Howells 2026-07-07 489 * the last packet, we need to rewind the buffer by one byte so the f9c7117bd901bd David Howells 2026-07-07 490 * caller knows they need to retry. f9c7117bd901bd David Howells 2026-07-07 491 */ f9c7117bd901bd David Howells 2026-07-07 492 if (copied && !more && !msg_data_left(msg)) { f9c7117bd901bd David Howells 2026-07-07 493 txb->space += 1; f9c7117bd901bd David Howells 2026-07-07 494 txb->len -= 1; f9c7117bd901bd David Howells 2026-07-07 495 txb->offset -= 1; f9c7117bd901bd David Howells 2026-07-07 496 copied -= 1; f9c7117bd901bd David Howells 2026-07-07 497 if (call->tx_total_len != -1) f9c7117bd901bd David Howells 2026-07-07 498 call->tx_total_len += 1; f9c7117bd901bd David Howells 2026-07-07 499 iov_iter_revert(&msg->msg_iter, 1); f9c7117bd901bd David Howells 2026-07-07 500 } 0b58b8a18be493 David Howells 2016-09-02 501 maybe_error: 7ee907aa0a7c80 David Howells 2026-07-01 502 if (copied) { 7ee907aa0a7c80 David Howells 2026-07-01 503 if (rxrpc_call_is_complete(call) && 7ee907aa0a7c80 David Howells 2026-07-01 504 call->error < 0) { 7ee907aa0a7c80 David Howells 2026-07-01 505 ret = call->error; 87d2193d7d96a2 David Howells 2026-07-08 506 goto out_unlock; 7ee907aa0a7c80 David Howells 2026-07-01 507 } 0b58b8a18be493 David Howells 2016-09-02 508 goto success; 7ee907aa0a7c80 David Howells 2026-07-01 509 } 87d2193d7d96a2 David Howells 2026-07-08 510 goto out_txb; 0b58b8a18be493 David Howells 2016-09-02 511 0b58b8a18be493 David Howells 2016-09-02 512 efault: 0b58b8a18be493 David Howells 2016-09-02 513 ret = -EFAULT; 87d2193d7d96a2 David Howells 2026-07-08 514 goto out_txb; b0f571ecd79434 David Howells 2022-08-24 515 b0f571ecd79434 David Howells 2022-08-24 516 wait_for_space: b0f571ecd79434 David Howells 2022-08-24 517 ret = -EAGAIN; b0f571ecd79434 David Howells 2022-08-24 518 if (msg->msg_flags & MSG_DONTWAIT) b0f571ecd79434 David Howells 2022-08-24 519 goto maybe_error; 87d2193d7d96a2 David Howells 2026-07-08 520 call->tx_pending = txb; 87d2193d7d96a2 David Howells 2026-07-08 521 txb = NULL; b0f571ecd79434 David Howells 2022-08-24 522 mutex_unlock(&call->user_mutex); 87d2193d7d96a2 David Howells 2026-07-08 523 b0f571ecd79434 David Howells 2022-08-24 524 ret = rxrpc_wait_for_tx_window(rx, call, &timeo, b0f571ecd79434 David Howells 2022-08-24 525 msg->msg_flags & MSG_WAITALL); b0f571ecd79434 David Howells 2022-08-24 526 if (ret < 0) 87d2193d7d96a2 David Howells 2026-07-08 527 goto out_nolock; b0f571ecd79434 David Howells 2022-08-24 528 if (call->interruptibility == RXRPC_INTERRUPTIBLE) { b0f571ecd79434 David Howells 2022-08-24 529 if (mutex_lock_interruptible(&call->user_mutex) < 0) { b0f571ecd79434 David Howells 2022-08-24 530 ret = sock_intr_errno(timeo); 87d2193d7d96a2 David Howells 2026-07-08 531 goto out_nolock; b0f571ecd79434 David Howells 2022-08-24 532 } b0f571ecd79434 David Howells 2022-08-24 533 } else { b0f571ecd79434 David Howells 2022-08-24 534 mutex_lock(&call->user_mutex); b0f571ecd79434 David Howells 2022-08-24 535 } b0f571ecd79434 David Howells 2022-08-24 536 goto reload; 87d2193d7d96a2 David Howells 2026-07-08 537 out_nolock: 87d2193d7d96a2 David Howells 2026-07-08 538 _leave(" = %d [intr]", ret); 87d2193d7d96a2 David Howells 2026-07-08 539 return copied ?: ret; 0b58b8a18be493 David Howells 2016-09-02 540 } df423a4af125f5 David Howells 2016-09-02 541 :::::: The code at line 335 was first introduced by commit :::::: ae4f899894792c436d792c17d3f3e6a2affb787f rxrpc: Fix ability to add more data to a call once MSG_MORE deasserted :::::: TO: David Howells <[email protected]> :::::: CC: Jakub Kicinski <[email protected]> -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki