CC: [email protected]
CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Hannes Reinecke <[email protected]>

Hi Hannes,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git 
tls-upcall.v2
head:   21b520ae0b338bd30496feb1ca90a2820dab7a65
commit: ac729ea3c52bda460616c71d5f5fc47b2e64da6d [155/159] tls: define 
TLS_RECORD_TYPE_HANDSHAKE
:::::: branch date: 2 days ago
:::::: commit date: 4 days ago
config: x86_64-randconfig-c007 
(https://download.01.org/0day-ci/archive/20220227/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
d271fc04d5b97b12e6b797c6067d3c96a8d7470e)
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
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git/commit/?id=ac729ea3c52bda460616c71d5f5fc47b2e64da6d
        git remote add hare-scsi-devel 
https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git
        git fetch --no-tags hare-scsi-devel tls-upcall.v2
        git checkout ac729ea3c52bda460616c71d5f5fc47b2e64da6d
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 
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 >>)
   5 warnings generated.
   Suppressed 5 warnings (5 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.
   9 warnings generated.
   Suppressed 9 warnings (9 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.
   9 warnings generated.
   Suppressed 9 warnings (9 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.
   drivers/target/iscsi/iscsi_target_parameters.c:919:2: warning: Value stored 
to 'acceptor_values' is never read [clang-analyzer-deadcode.DeadStores]
           acceptor_values = param->value;
           ^                 ~~~~~~~~~~~~
   drivers/target/iscsi/iscsi_target_parameters.c:919:2: note: Value stored to 
'acceptor_values' is never read
           acceptor_values = param->value;
           ^                 ~~~~~~~~~~~~
   Suppressed 5 warnings (5 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.
   Suppressed 5 warnings (5 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.
   Suppressed 5 warnings (5 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.
   Suppressed 5 warnings (5 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.
   drivers/target/iscsi/iscsi_target_device.c:54:2: warning: Value stored to 
'max_cmd_sn' is never read [clang-analyzer-deadcode.DeadStores]
           max_cmd_sn = atomic_inc_return(&sess->max_cmd_sn);
           ^            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/target/iscsi/iscsi_target_device.c:54:2: note: Value stored to 
'max_cmd_sn' is never read
           max_cmd_sn = atomic_inc_return(&sess->max_cmd_sn);
           ^            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 5 warnings (5 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.
   Suppressed 5 warnings (5 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.
   Suppressed 6 warnings (5 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 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.
   Suppressed 5 warnings (5 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.
   7 warnings generated.
   Suppressed 7 warnings (7 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.
   13 warnings generated.
   sound/soc/fsl/fsl_spdif.c:211:26: warning: Value stored to 'pdev' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:211:26: note: Value stored to 'pdev' during its 
initialization is never read
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:227:26: warning: Value stored to 'pdev' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:227:26: note: Value stored to 'pdev' during its 
initialization is never read
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:279:26: warning: Value stored to 'pdev' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:279:26: note: Value stored to 'pdev' during its 
initialization is never read
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:296:26: warning: Value stored to 'pdev' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:296:26: note: Value stored to 'pdev' during its 
initialization is never read
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:328:26: warning: Value stored to 'pdev' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:328:26: note: Value stored to 'pdev' during its 
initialization is never read
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:430:26: warning: Value stored to 'pdev' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:430:26: note: Value stored to 'pdev' during its 
initialization is never read
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:994:26: warning: Value stored to 'pdev' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   sound/soc/fsl/fsl_spdif.c:994:26: note: Value stored to 'pdev' during its 
initialization is never read
           struct platform_device *pdev = spdif_priv->pdev;
                                   ^~~~   ~~~~~~~~~~~~~~~~
   Suppressed 6 warnings (6 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.
   Suppressed 5 warnings (5 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.
   13 warnings generated.
>> drivers/nvme/host/tcp.c:1318:8: warning: Value stored to 'tls_hs_type' 
>> during its initialization is never read [clang-analyzer-deadcode.DeadStores]
                                   u8 tls_hs_type = (tls_hdr >> 24);
                                      ^~~~~~~~~~~   ~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:1318:8: note: Value stored to 'tls_hs_type' during 
its initialization is never read
                                   u8 tls_hs_type = (tls_hdr >> 24);
                                      ^~~~~~~~~~~   ~~~~~~~~~~~~~~~
   include/linux/scatterlist.h:214:16: warning: The left expression of the 
compound assignment is an uninitialized value. The computed value will also be 
garbage [clang-analyzer-core.uninitialized.Assign]
           sg->page_link |= SG_END;
                         ^
   drivers/nvme/host/tcp.c:2581:6: note: Assuming the condition is false
           if (!nvme_check_ready(&queue->ctrl->ctrl, rq, queue_ready))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:2581:2: note: Taking false branch
           if (!nvme_check_ready(&queue->ctrl->ctrl, rq, queue_ready))
           ^
   drivers/nvme/host/tcp.c:2585:2: note: Taking false branch
           if (unlikely(ret))
           ^
   drivers/nvme/host/tcp.c:2590:2: note: Calling 'nvme_tcp_queue_request'
           nvme_tcp_queue_request(req, true, bd->last);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:296:10: note: Assuming the condition is true
           empty = llist_add(&req->lentry, &queue->req_list) &&
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:296:10: note: Left side of '&&' is true
   drivers/nvme/host/tcp.c:297:3: note: Assuming the condition is true
                   list_empty(&queue->send_list) && !queue->request;
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:296:10: note: Left side of '&&' is true
           empty = llist_add(&req->lentry, &queue->req_list) &&
                   ^
   drivers/nvme/host/tcp.c:297:36: note: Assuming field 'request' is null
                   list_empty(&queue->send_list) && !queue->request;
                                                    ^~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:304:23: note: Loop condition is false.  Exiting loop
           if (queue->io_cpu == raw_smp_processor_id() &&
                                ^
   arch/x86/include/asm/smp.h:166:33: note: expanded from macro 
'raw_smp_processor_id'
   #define raw_smp_processor_id()  this_cpu_read(cpu_number)
                                   ^
   include/linux/percpu-defs.h:507:29: note: expanded from macro 'this_cpu_read'
   #define this_cpu_read(pcp)              
__pcpu_size_call_return(this_cpu_read_, pcp)
                                           ^
   include/linux/percpu-defs.h:319:2: note: expanded from macro 
'__pcpu_size_call_return'
           __verify_pcpu_ptr(&(variable));                                 \
           ^
   include/linux/percpu-defs.h:217:37: note: expanded from macro 
'__verify_pcpu_ptr'
   #define __verify_pcpu_ptr(ptr)                                          \
                                                                           ^
   drivers/nvme/host/tcp.c:304:23: note: Control jumps to 'case 4:'  at line 304
           if (queue->io_cpu == raw_smp_processor_id() &&
                                ^
   arch/x86/include/asm/smp.h:166:33: note: expanded from macro 
'raw_smp_processor_id'
   #define raw_smp_processor_id()  this_cpu_read(cpu_number)
                                   ^
   include/linux/percpu-defs.h:507:29: note: expanded from macro 'this_cpu_read'
   #define this_cpu_read(pcp)              
__pcpu_size_call_return(this_cpu_read_, pcp)
                                           ^
   include/linux/percpu-defs.h:320:2: note: expanded from macro 
'__pcpu_size_call_return'
           switch(sizeof(variable)) {                                      \
           ^
   drivers/nvme/host/tcp.c:304:23: note:  Execution continues on line 304
           if (queue->io_cpu == raw_smp_processor_id() &&
                                ^
   arch/x86/include/asm/smp.h:166:33: note: expanded from macro 
'raw_smp_processor_id'
   #define raw_smp_processor_id()  this_cpu_read(cpu_number)
                                   ^
   include/linux/percpu-defs.h:507:29: note: expanded from macro 'this_cpu_read'
   #define this_cpu_read(pcp)              
__pcpu_size_call_return(this_cpu_read_, pcp)
                                           ^
   include/linux/percpu-defs.h:323:42: note: expanded from macro 
'__pcpu_size_call_return'
           case 4: pscr_ret__ = stem##4(variable); break;                  \
                                                   ^
   drivers/nvme/host/tcp.c:304:6: note: Assuming the condition is true
           if (queue->io_cpu == raw_smp_processor_id() &&
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:304:6: note: Left side of '&&' is true
   drivers/nvme/host/tcp.c:305:6: note: 'sync' is true
               sync && empty && mutex_trylock(&queue->send_mutex)) {
               ^~~~
   drivers/nvme/host/tcp.c:304:6: note: Left side of '&&' is true
           if (queue->io_cpu == raw_smp_processor_id() &&
               ^
   drivers/nvme/host/tcp.c:305:14: note: 'empty' is true
               sync && empty && mutex_trylock(&queue->send_mutex)) {
                       ^~~~~
   drivers/nvme/host/tcp.c:304:6: note: Left side of '&&' is true
           if (queue->io_cpu == raw_smp_processor_id() &&
               ^
   drivers/nvme/host/tcp.c:305:23: note: Assuming the condition is true
               sync && empty && mutex_trylock(&queue->send_mutex)) {
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:304:2: note: Taking true branch
           if (queue->io_cpu == raw_smp_processor_id() &&
           ^
   drivers/nvme/host/tcp.c:306:26: note: Assuming 'last' is true
                   queue->more_requests = !last;
                                          ^~~~~
   drivers/nvme/host/tcp.c:307:3: note: Calling 'nvme_tcp_send_all'
                   nvme_tcp_send_all(queue);
                   ^~~~~~~~~~~~~~~~~~~~~~~~
--
   fs/ext4/inode.c:5710:6: note: Assuming the condition is false
           if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
               ^
   include/linux/compiler.h:78:22: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ext4/inode.c:5710:2: note: Taking false branch
           if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
           ^
   fs/ext4/inode.c:5713:8: note: Calling 'ext4_get_inode_loc'
           err = ext4_get_inode_loc(inode, iloc);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ext4/inode.c:4541:2: note: 'err_blk' declared without an initial value
           ext4_fsblk_t err_blk;
           ^~~~~~~~~~~~~~~~~~~~
   fs/ext4/inode.c:4544:8: note: Calling '__ext4_get_inode_loc'
           ret = __ext4_get_inode_loc(inode->i_sb, inode->i_ino, inode, iloc,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ext4/inode.c:4398:6: note: Assuming 'ino' is >= EXT4_ROOT_INO
           if (ino < EXT4_ROOT_INO ||
               ^~~~~~~~~~~~~~~~~~~
   fs/ext4/inode.c:4398:6: note: Left side of '||' is false
   fs/ext4/inode.c:4399:6: note: Assuming 'ino' is <= field 's_inodes_count'
               ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ext4/inode.c:4398:2: note: Taking false branch
           if (ino < EXT4_ROOT_INO ||
           ^
   fs/ext4/inode.c:4404:6: note: Assuming 'gdp' is null
           if (!gdp)
               ^~~~
   fs/ext4/inode.c:4404:2: note: Taking true branch
           if (!gdp)
           ^
   fs/ext4/inode.c:4405:3: note: Returning without writing to '*ret_block'
                   return -EIO;
                   ^
   fs/ext4/inode.c:4544:8: note: Returning from '__ext4_get_inode_loc'
           ret = __ext4_get_inode_loc(inode->i_sb, inode->i_ino, inode, iloc,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ext4/inode.c:4547:2: note: Taking true branch
           if (ret == -EIO)
           ^
   fs/ext4/inode.c:4548:3: note: 4th function call argument is an uninitialized 
value
                   ext4_error_inode_block(inode, err_blk, EIO,
                   ^
   fs/ext4/ext4.h:3156:2: note: expanded from macro 'ext4_error_inode_block'
           __ext4_error_inode((inode), __func__, __LINE__, (block), (err), \
           ^                                               ~~~~~~~
   Suppressed 6 warnings (6 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.
   17 warnings generated.
   net/sunrpc/auth_gss/gss_rpc_xdr.c:303:2: warning: Value stored to 'p' is 
never read [clang-analyzer-deadcode.DeadStores]
           p = xdr_decode_hyper(p, &status->major_status);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:303:2: note: Value stored to 'p' is never 
read
           p = xdr_decode_hyper(p, &status->major_status);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:314:2: warning: Value stored to 'p' is 
never read [clang-analyzer-deadcode.DeadStores]
           p = xdr_decode_hyper(p, &status->minor_status);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:314:2: note: Value stored to 'p' is never 
read
           p = xdr_decode_hyper(p, &status->minor_status);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:365:2: warning: Value stored to 'err' is 
never read [clang-analyzer-deadcode.DeadStores]
           err = gssx_enc_option(xdr, &opt);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:365:2: note: Value stored to 'err' is 
never read
           err = gssx_enc_option(xdr, &opt);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:607:2: warning: Value stored to 'p' is 
never read [clang-analyzer-deadcode.DeadStores]
           p = xdr_encode_hyper(p, ctx->ctx_flags);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:607:2: note: Value stored to 'p' is never 
read
           p = xdr_encode_hyper(p, ctx->ctx_flags);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:670:2: warning: Value stored to 'p' is 
never read [clang-analyzer-deadcode.DeadStores]
           p = xdr_decode_hyper(p, &ctx->ctx_flags);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:670:2: note: Value stored to 'p' is never 
read
           p = xdr_decode_hyper(p, &ctx->ctx_flags);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:698:2: warning: Value stored to 'p' is 
never read [clang-analyzer-deadcode.DeadStores]
           p = xdr_encode_hyper(p, cb->initiator_addrtype);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:698:2: note: Value stored to 'p' is never 
read
           p = xdr_encode_hyper(p, cb->initiator_addrtype);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:709:2: warning: Value stored to 'p' is 
never read [clang-analyzer-deadcode.DeadStores]
           p = xdr_encode_hyper(p, cb->acceptor_addrtype);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sunrpc/auth_gss/gss_rpc_xdr.c:709:2: note: Value stored to 'p' is never 
read
           p = xdr_encode_hyper(p, cb->acceptor_addrtype);
           ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 10 warnings (10 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.
   26 warnings generated.
   Suppressed 26 warnings (26 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.
   13 warnings generated.
>> drivers/nvme/host/tcp.c:1318:8: warning: Value stored to 'tls_hs_type' 
>> during its initialization is never read [clang-analyzer-deadcode.DeadStores]
                                   u8 tls_hs_type = (tls_hdr >> 24);
                                      ^~~~~~~~~~~   ~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:1318:8: note: Value stored to 'tls_hs_type' during 
its initialization is never read
                                   u8 tls_hs_type = (tls_hdr >> 24);
                                      ^~~~~~~~~~~   ~~~~~~~~~~~~~~~
   include/linux/scatterlist.h:214:16: warning: The left expression of the 
compound assignment is an uninitialized value. The computed value will also be 
garbage [clang-analyzer-core.uninitialized.Assign]
           sg->page_link |= SG_END;
                         ^
   drivers/nvme/host/tcp.c:2581:6: note: Assuming the condition is false
           if (!nvme_check_ready(&queue->ctrl->ctrl, rq, queue_ready))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:2581:2: note: Taking false branch
           if (!nvme_check_ready(&queue->ctrl->ctrl, rq, queue_ready))
           ^
   drivers/nvme/host/tcp.c:2585:2: note: Taking false branch
           if (unlikely(ret))
           ^
   drivers/nvme/host/tcp.c:2590:2: note: Calling 'nvme_tcp_queue_request'
           nvme_tcp_queue_request(req, true, bd->last);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:296:10: note: Assuming the condition is true
           empty = llist_add(&req->lentry, &queue->req_list) &&
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:296:10: note: Left side of '&&' is true
   drivers/nvme/host/tcp.c:297:3: note: Assuming the condition is true
                   list_empty(&queue->send_list) && !queue->request;
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:296:10: note: Left side of '&&' is true
           empty = llist_add(&req->lentry, &queue->req_list) &&
                   ^
   drivers/nvme/host/tcp.c:297:36: note: Assuming field 'request' is null
                   list_empty(&queue->send_list) && !queue->request;
                                                    ^~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:304:23: note: Loop condition is false.  Exiting loop
           if (queue->io_cpu == raw_smp_processor_id() &&
                                ^
   arch/x86/include/asm/smp.h:166:33: note: expanded from macro 
'raw_smp_processor_id'
   #define raw_smp_processor_id()  this_cpu_read(cpu_number)
                                   ^
   include/linux/percpu-defs.h:507:29: note: expanded from macro 'this_cpu_read'
   #define this_cpu_read(pcp)              
__pcpu_size_call_return(this_cpu_read_, pcp)
                                           ^
   include/linux/percpu-defs.h:319:2: note: expanded from macro 
'__pcpu_size_call_return'
           __verify_pcpu_ptr(&(variable));                                 \
           ^
   include/linux/percpu-defs.h:217:37: note: expanded from macro 
'__verify_pcpu_ptr'
   #define __verify_pcpu_ptr(ptr)                                          \
                                                                           ^
   drivers/nvme/host/tcp.c:304:23: note: Control jumps to 'case 4:'  at line 304
           if (queue->io_cpu == raw_smp_processor_id() &&
                                ^
   arch/x86/include/asm/smp.h:166:33: note: expanded from macro 
'raw_smp_processor_id'
   #define raw_smp_processor_id()  this_cpu_read(cpu_number)
                                   ^
   include/linux/percpu-defs.h:507:29: note: expanded from macro 'this_cpu_read'
   #define this_cpu_read(pcp)              
__pcpu_size_call_return(this_cpu_read_, pcp)
                                           ^
   include/linux/percpu-defs.h:320:2: note: expanded from macro 
'__pcpu_size_call_return'
           switch(sizeof(variable)) {                                      \
           ^
   drivers/nvme/host/tcp.c:304:23: note:  Execution continues on line 304
           if (queue->io_cpu == raw_smp_processor_id() &&
                                ^
   arch/x86/include/asm/smp.h:166:33: note: expanded from macro 
'raw_smp_processor_id'
   #define raw_smp_processor_id()  this_cpu_read(cpu_number)
                                   ^
   include/linux/percpu-defs.h:507:29: note: expanded from macro 'this_cpu_read'
   #define this_cpu_read(pcp)              
__pcpu_size_call_return(this_cpu_read_, pcp)
                                           ^
   include/linux/percpu-defs.h:323:42: note: expanded from macro 
'__pcpu_size_call_return'
           case 4: pscr_ret__ = stem##4(variable); break;                  \
                                                   ^
   drivers/nvme/host/tcp.c:304:6: note: Assuming the condition is true
           if (queue->io_cpu == raw_smp_processor_id() &&
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:304:6: note: Left side of '&&' is true
   drivers/nvme/host/tcp.c:305:6: note: 'sync' is true
               sync && empty && mutex_trylock(&queue->send_mutex)) {
               ^~~~
   drivers/nvme/host/tcp.c:304:6: note: Left side of '&&' is true
           if (queue->io_cpu == raw_smp_processor_id() &&
               ^
   drivers/nvme/host/tcp.c:305:14: note: 'empty' is true
               sync && empty && mutex_trylock(&queue->send_mutex)) {
                       ^~~~~
   drivers/nvme/host/tcp.c:304:6: note: Left side of '&&' is true
           if (queue->io_cpu == raw_smp_processor_id() &&
               ^
   drivers/nvme/host/tcp.c:305:23: note: Assuming the condition is true
               sync && empty && mutex_trylock(&queue->send_mutex)) {
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/nvme/host/tcp.c:304:2: note: Taking true branch
           if (queue->io_cpu == raw_smp_processor_id() &&
           ^
   drivers/nvme/host/tcp.c:306:26: note: Assuming 'last' is true
                   queue->more_requests = !last;
                                          ^~~~~
   drivers/nvme/host/tcp.c:307:3: note: Calling 'nvme_tcp_send_all'
                   nvme_tcp_send_all(queue);
                   ^~~~~~~~~~~~~~~~~~~~~~~~

vim +/tls_hs_type +1318 drivers/nvme/host/tcp.c

3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1255  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1256  static int 
nvme_tcp_init_connection(struct nvme_tcp_queue *queue)
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1257  {
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1258         struct 
nvme_tcp_icreq_pdu *icreq;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1259         struct 
nvme_tcp_icresp_pdu *icresp;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1260         struct msghdr msg = {};
83859876ef6b6f Hannes Reinecke 2022-02-23  1261         char 
cbuf[CMSG_LEN(sizeof(char))];
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1262         struct cmsghdr *cmsg;
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1263         unsigned char ctype;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1264         struct kvec iov;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1265         bool ctrl_hdgst, 
ctrl_ddgst;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1266         int ret;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1267  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1268         icreq = 
kzalloc(sizeof(*icreq), GFP_KERNEL);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1269         if (!icreq)
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1270                 return -ENOMEM;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1271  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1272         icresp = 
kzalloc(sizeof(*icresp), GFP_KERNEL);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1273         if (!icresp) {
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1274                 ret = -ENOMEM;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1275                 goto free_icreq;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1276         }
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1277  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1278         icreq->hdr.type = 
nvme_tcp_icreq;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1279         icreq->hdr.hlen = 
sizeof(*icreq);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1280         icreq->hdr.pdo = 0;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1281         icreq->hdr.plen = 
cpu_to_le32(icreq->hdr.hlen);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1282         icreq->pfv = 
cpu_to_le16(NVME_TCP_PFV_1_0);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1283         icreq->maxr2t = 0; /* 
single inflight r2t supported */
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1284         icreq->hpda = 0; /* no 
alignment constraint */
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1285         if (queue->hdr_digest)
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1286                 icreq->digest 
|= NVME_TCP_HDR_DIGEST_ENABLE;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1287         if (queue->data_digest)
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1288                 icreq->digest 
|= NVME_TCP_DATA_DIGEST_ENABLE;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1289  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1290         iov.iov_base = icreq;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1291         iov.iov_len = 
sizeof(*icreq);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1292         ret = 
kernel_sendmsg(queue->sock, &msg, &iov, 1, iov.iov_len);
6e498960c93f88 Hannes Reinecke 2022-02-18  1293         if (ret < 0) {
6e498960c93f88 Hannes Reinecke 2022-02-18  1294                 pr_err("queue 
%d: failed to send icresp, error %d\n",
6e498960c93f88 Hannes Reinecke 2022-02-18  1295                        
nvme_tcp_queue_id(queue), ret);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1296                 goto 
free_icresp;
6e498960c93f88 Hannes Reinecke 2022-02-18  1297         }
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1298         pr_debug("queue %d: 
sent %d/%lu icreq bytes\n",
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1299                  
nvme_tcp_queue_id(queue), ret, iov.iov_len);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1300         memset(&msg, 0, 
sizeof(msg));
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1301         msg.msg_control = cbuf;
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1302         msg.msg_controllen = 
sizeof(cbuf);
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1303         msg.msg_flags = 
MSG_WAITALL;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1304         iov.iov_base = icresp;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1305         iov.iov_len = 
sizeof(*icresp);
83859876ef6b6f Hannes Reinecke 2022-02-23  1306  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1307         ret = 
kernel_recvmsg(queue->sock, &msg, &iov, 1,
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1308                         
iov.iov_len, msg.msg_flags);
83859876ef6b6f Hannes Reinecke 2022-02-23  1309         cmsg = (struct cmsghdr 
*)cbuf;
83859876ef6b6f Hannes Reinecke 2022-02-23  1310         if (CMSG_OK(&msg, 
cmsg)) {
83859876ef6b6f Hannes Reinecke 2022-02-23  1311                 if 
(cmsg->cmsg_level == SOL_TLS &&
83859876ef6b6f Hannes Reinecke 2022-02-23  1312                     
cmsg->cmsg_type == TLS_GET_RECORD_TYPE) {
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1313                         
pr_debug("queue %d: received tls cmsg %d\n",
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1314                                 
 nvme_tcp_queue_id(queue), cmsg->cmsg_type);
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1315                         ctype = 
*((unsigned char *)CMSG_DATA(cmsg));
83859876ef6b6f Hannes Reinecke 2022-02-23  1316                         if 
(ctype == TLS_RECORD_TYPE_HANDSHAKE) {
83859876ef6b6f Hannes Reinecke 2022-02-23  1317                                 
u32 tls_hdr = get_unaligned_be32(iov.iov_base);
83859876ef6b6f Hannes Reinecke 2022-02-23 @1318                                 
u8 tls_hs_type = (tls_hdr >> 24);
83859876ef6b6f Hannes Reinecke 2022-02-23  1319                                 
u32 tls_hs_len = (tls_hdr & 0xFFFFFF);
83859876ef6b6f Hannes Reinecke 2022-02-23  1320                                 
pr_debug("queue %d: tls handshake type %d len %u\n",
83859876ef6b6f Hannes Reinecke 2022-02-23  1321                                 
         nvme_tcp_queue_id(queue), tls_hs_type,
83859876ef6b6f Hannes Reinecke 2022-02-23  1322                                 
         tls_hs_len);
83859876ef6b6f Hannes Reinecke 2022-02-23  1323                                 
if (tls_hs_len > iov.iov_len) {
83859876ef6b6f Hannes Reinecke 2022-02-23  1324                                 
        tls_hs_len -= iov.iov_len;
83859876ef6b6f Hannes Reinecke 2022-02-23  1325                                 
        if (tls_hs_len > iov.iov_len)
83859876ef6b6f Hannes Reinecke 2022-02-23  1326                                 
                iov.iov_len = sizeof(*icresp);
83859876ef6b6f Hannes Reinecke 2022-02-23  1327                                 
        else
83859876ef6b6f Hannes Reinecke 2022-02-23  1328                                 
                iov.iov_len = tls_hs_len;
83859876ef6b6f Hannes Reinecke 2022-02-23  1329                                 
} else
83859876ef6b6f Hannes Reinecke 2022-02-23  1330                                 
        iov.iov_len = sizeof(*icresp);
83859876ef6b6f Hannes Reinecke 2022-02-23  1331                                 
pr_debug("queue %d: retry %lu icresp bytes\n",
83859876ef6b6f Hannes Reinecke 2022-02-23  1332                                 
         nvme_tcp_queue_id(queue),
83859876ef6b6f Hannes Reinecke 2022-02-23  1333                                 
         iov.iov_len);
83859876ef6b6f Hannes Reinecke 2022-02-23  1334                                 
ret = -ENOTCONN;
83859876ef6b6f Hannes Reinecke 2022-02-23  1335                         } else 
if (ctype != TLS_RECORD_TYPE_DATA) {
83859876ef6b6f Hannes Reinecke 2022-02-23  1336                                 
pr_debug("queue %d: skip tls record %d\n",
83859876ef6b6f Hannes Reinecke 2022-02-23  1337                                 
         nvme_tcp_queue_id(queue), ctype);
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1338                                 
ret = -ENOTCONN;
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1339                         }
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1340                 }
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1341         }
6e498960c93f88 Hannes Reinecke 2022-02-18  1342         if (ret < 0) {
6e498960c93f88 Hannes Reinecke 2022-02-18  1343                 pr_err("queue 
%d: failed to receive icresp, error %d\n",
6e498960c93f88 Hannes Reinecke 2022-02-18  1344                        
nvme_tcp_queue_id(queue), ret);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1345                 goto 
free_icresp;
6e498960c93f88 Hannes Reinecke 2022-02-18  1346         }
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1347         pr_debug("queue %d: 
received %d/%lu icresp bytes\n",
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1348                  
nvme_tcp_queue_id(queue), ret, iov.iov_len);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1349         ret = -EINVAL;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1350         if (icresp->hdr.type != 
nvme_tcp_icresp) {
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1351                 pr_err("queue 
%d: bad type returned %d\n",
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1352                         
nvme_tcp_queue_id(queue), icresp->hdr.type);
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1353                 
print_hex_dump(KERN_ERR, "icresp: ", 0,
96e2b9364c5e07 Hannes Reinecke 2022-02-22  1354                                
8, 1, icresp, iov.iov_len, true);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1355                 goto 
free_icresp;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1356         }
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1357  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1358         if 
(le32_to_cpu(icresp->hdr.plen) != sizeof(*icresp)) {
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1359                 pr_err("queue 
%d: bad pdu length returned %d\n",
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1360                         
nvme_tcp_queue_id(queue), icresp->hdr.plen);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1361                 goto 
free_icresp;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1362         }
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1363  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1364         if (icresp->pfv != 
NVME_TCP_PFV_1_0) {
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1365                 pr_err("queue 
%d: bad pfv returned %d\n",
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1366                         
nvme_tcp_queue_id(queue), icresp->pfv);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1367                 goto 
free_icresp;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1368         }
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1369  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1370         ctrl_ddgst = 
!!(icresp->digest & NVME_TCP_DATA_DIGEST_ENABLE);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1371         if ((queue->data_digest 
&& !ctrl_ddgst) ||
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1372             
(!queue->data_digest && ctrl_ddgst)) {
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1373                 pr_err("queue 
%d: data digest mismatch host: %s ctrl: %s\n",
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1374                         
nvme_tcp_queue_id(queue),
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1375                         
queue->data_digest ? "enabled" : "disabled",
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1376                         
ctrl_ddgst ? "enabled" : "disabled");
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1377                 goto 
free_icresp;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1378         }
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1379  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1380         ctrl_hdgst = 
!!(icresp->digest & NVME_TCP_HDR_DIGEST_ENABLE);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1381         if ((queue->hdr_digest 
&& !ctrl_hdgst) ||
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1382             (!queue->hdr_digest 
&& ctrl_hdgst)) {
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1383                 pr_err("queue 
%d: header digest mismatch host: %s ctrl: %s\n",
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1384                         
nvme_tcp_queue_id(queue),
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1385                         
queue->hdr_digest ? "enabled" : "disabled",
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1386                         
ctrl_hdgst ? "enabled" : "disabled");
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1387                 goto 
free_icresp;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1388         }
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1389  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1390         if (icresp->cpda != 0) {
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1391                 pr_err("queue 
%d: unsupported cpda returned %d\n",
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1392                         
nvme_tcp_queue_id(queue), icresp->cpda);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1393                 goto 
free_icresp;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1394         }
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1395  
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1396         ret = 0;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1397  free_icresp:
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1398         kfree(icresp);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1399  free_icreq:
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1400         kfree(icreq);
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1401         return ret;
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1402  }
3f2304f8c6d6ed Sagi Grimberg   2018-12-03  1403  

:::::: The code at line 1318 was first introduced by commit
:::::: 83859876ef6b6f754916508d69c7f628e0a3dbb4 nvme-tcp: fixup tls sendmsg()

:::::: TO: Hannes Reinecke <[email protected]>
:::::: CC: Hannes Reinecke <[email protected]>

---
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]

Reply via email to