All of lore.kernel.org
 help / color / mirror / Atom feed
* [hare-scsi-devel:tls-upcall.v4 121/156] net/tls/af_tlsh.c:640:6: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
@ 2022-03-14  3:10 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-03-14  3:10 UTC (permalink / raw)
  To: kbuild

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

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: Chuck Lever <chuck.lever@oracle.com>
CC: Hannes Reinecke <hare@suse.de>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git tls-upcall.v4
head:   d2416ecdb6b03fc2e4aa40b20cdf919322713224
commit: 33ec82590b0b919215a255fb431d661be4807b45 [121/156] net/tls: Add support for PF_TLSH (a TLS handshake listener)
:::::: branch date: 4 days ago
:::::: commit date: 6 days ago
config: arm-randconfig-c002-20220313 (https://download.01.org/0day-ci/archive/20220314/202203141106.9fgCAlQD-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 0467eb2cb7654c15ae366967ef35093c5724c416)
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 arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git/commit/?id=33ec82590b0b919215a255fb431d661be4807b45
        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.v4
        git checkout 33ec82590b0b919215a255fb431d661be4807b45
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer 

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


clang-analyzer warnings: (new ones prefixed by >>)
   drivers/mmc/host/atmel-mci.c:1253:6: note: Left side of '||' is false
   drivers/mmc/host/atmel-mci.c:1253:26: note: Assuming field 'need_reset_after_xfer' is false
           if (host->need_reset || host->caps.need_reset_after_xfer) {
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/mmc/host/atmel-mci.c:1253:2: note: Taking false branch
           if (host->need_reset || host->caps.need_reset_after_xfer) {
           ^
   drivers/mmc/host/atmel-mci.c:1267:6: note: Assuming the condition is false
           if (iflags & ~(ATMCI_SDIOIRQA | ATMCI_SDIOIRQB))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/mmc/host/atmel-mci.c:1267:2: note: Taking false branch
           if (iflags & ~(ATMCI_SDIOIRQA | ATMCI_SDIOIRQB))
           ^
   drivers/mmc/host/atmel-mci.c:1271:15: note: '?' condition is true
           if (unlikely(test_and_clear_bit(ATMCI_CARD_NEED_INIT, &slot->flags))) {
                        ^
   arch/arm/include/asm/bitops.h:193:34: note: expanded from macro 'test_and_clear_bit'
   #define test_and_clear_bit(nr,p)        ATOMIC_BITOP(test_and_clear_bit,nr,p)
                                           ^
   arch/arm/include/asm/bitops.h:181:3: note: expanded from macro 'ATOMIC_BITOP'
           (__builtin_constant_p(nr) ? ____atomic_##name(nr, p) : _##name(nr,p))
            ^
   drivers/mmc/host/atmel-mci.c:1271:6: note: Assuming the condition is true
           if (unlikely(test_and_clear_bit(ATMCI_CARD_NEED_INIT, &slot->flags))) {
               ^
   include/linux/compiler.h:78:40: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                             ^~~~
   drivers/mmc/host/atmel-mci.c:1271:2: note: Taking false branch
           if (unlikely(test_and_clear_bit(ATMCI_CARD_NEED_INIT, &slot->flags))) {
           ^
   drivers/mmc/host/atmel-mci.c:1278:2: note: Value assigned to 'data'
           data = mrq->data;
           ^~~~~~~~~~~~~~~~
   drivers/mmc/host/atmel-mci.c:1279:6: note: Assuming 'data' is null
           if (data) {
               ^~~~
   drivers/mmc/host/atmel-mci.c:1279:2: note: Taking false branch
           if (data) {
           ^
   drivers/mmc/host/atmel-mci.c:1301:6: note: Assuming the condition is false
           if (host->submit_data != &atmci_submit_data_dma)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/mmc/host/atmel-mci.c:1301:2: note: Taking false branch
           if (host->submit_data != &atmci_submit_data_dma)
           ^
   drivers/mmc/host/atmel-mci.c:1304:6: note: 'data' is null
           if (data)
               ^~~~
   drivers/mmc/host/atmel-mci.c:1304:2: note: Taking false branch
           if (data)
           ^
   drivers/mmc/host/atmel-mci.c:1307:6: note: Assuming the condition is false
           if (host->submit_data == &atmci_submit_data_dma)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/mmc/host/atmel-mci.c:1307:2: note: Taking false branch
           if (host->submit_data == &atmci_submit_data_dma)
           ^
   drivers/mmc/host/atmel-mci.c:1310:6: note: Assuming field 'stop' is non-null
           if (mrq->stop) {
               ^~~~~~~~~
   drivers/mmc/host/atmel-mci.c:1310:2: note: Taking true branch
           if (mrq->stop) {
           ^
   drivers/mmc/host/atmel-mci.c:1313:9: note: Access to field 'flags' results in a dereference of a null pointer (loaded from variable 'data')
                   if (!(data->flags & MMC_DATA_WRITE))
                         ^~~~
   drivers/mmc/host/atmel-mci.c:1727:23: warning: Value stored to 'state' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           enum atmel_mci_state    state = host->state;
                                   ^~~~~   ~~~~~~~~~~~
   drivers/mmc/host/atmel-mci.c:1727:23: note: Value stored to 'state' during its initialization is never read
           enum atmel_mci_state    state = host->state;
                                   ^~~~~   ~~~~~~~~~~~
   Suppressed 4 warnings (4 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.
   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.
   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.
   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.
   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.
   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.
   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.
   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.
   8 warnings generated.
>> net/tls/af_tlsh.c:640:6: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
           if (put_user(outlen, optlen)) {
               ^
   arch/arm/include/asm/uaccess.h:369:2: note: expanded from macro 'put_user'
           __put_user_switch((x), (ptr), __pu_err, __put_user_check);      \
           ^
   arch/arm/include/asm/uaccess.h:352:3: note: expanded from macro '__put_user_switch'
                   __typeof__(*(ptr)) __pu_val = (x);                      \
                   ^
   net/tls/af_tlsh.c:701:2: note: Control jumps to 'case 2:'  at line 702
           switch (sk->sk_family) {
           ^
   net/tls/af_tlsh.c:703:3: note:  Execution continues on line 712
                   break;
                   ^
   net/tls/af_tlsh.c:712:6: note: Assuming 'level' is equal to SOL_TLSH
           if (level != SOL_TLSH)
               ^~~~~~~~~~~~~~~~~
   net/tls/af_tlsh.c:712:2: note: Taking false branch
           if (level != SOL_TLSH)
           ^
   net/tls/af_tlsh.c:715:2: note: Control jumps to 'case 1:'  at line 716
           switch (optname) {
           ^
   net/tls/af_tlsh.c:717:9: note: Calling 'tlsh_getsockopt_priorities'
                   ret = tlsh_getsockopt_priorities(sk, optval, optlen);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/tls/af_tlsh.c:605:6: note: 'outlen' declared without an initial value
           int outlen, len, ret;
               ^~~~~~
   net/tls/af_tlsh.c:608:6: note: Control jumps to 'case 4:'  at line 608
           if (get_user(len, optlen))
               ^
   arch/arm/include/asm/uaccess.h:216:3: note: expanded from macro 'get_user'
                   __get_user_check(x, p);                                 \
                   ^
   arch/arm/include/asm/uaccess.h:180:3: note: expanded from macro '__get_user_check'
                   switch (sizeof(*(__p))) {                               \
                   ^
   net/tls/af_tlsh.c:608:6: note: Taking false branch
           if (get_user(len, optlen))
               ^
   arch/arm/include/asm/uaccess.h:216:3: note: expanded from macro 'get_user'
                   __get_user_check(x, p);                                 \
                   ^
   arch/arm/include/asm/uaccess.h:194:4: note: expanded from macro '__get_user_check'
                           if (sizeof((x)) >= 8)                           \
                           ^
   net/tls/af_tlsh.c:608:6: note:  Execution continues on line 608
           if (get_user(len, optlen))
               ^
   arch/arm/include/asm/uaccess.h:216:3: note: expanded from macro 'get_user'
                   __get_user_check(x, p);                                 \
                   ^
   arch/arm/include/asm/uaccess.h:198:4: note: expanded from macro '__get_user_check'
                           break;                                          \
                           ^
   net/tls/af_tlsh.c:608:6: note: Assuming the condition is false
           if (get_user(len, optlen))
               ^
   arch/arm/include/asm/uaccess.h:214:2: note: expanded from macro 'get_user'
           ({                                                              \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/tls/af_tlsh.c:608:2: note: Taking false branch
           if (get_user(len, optlen))
           ^
   net/tls/af_tlsh.c:610:6: note: Assuming 'optval' is non-null
           if (!optval)
               ^~~~~~~
   net/tls/af_tlsh.c:610:2: note: Taking false branch
           if (!optval)
           ^
   net/tls/af_tlsh.c:619:6: note: Assuming 'info' is non-null
           if (info) {
               ^~~~
   net/tls/af_tlsh.c:619:2: note: Taking true branch
           if (info) {
           ^
   net/tls/af_tlsh.c:629:6: note: Assuming 'val' is non-null
           if (val) {
               ^~~
   net/tls/af_tlsh.c:629:2: note: Taking true branch
           if (val) {
           ^
   net/tls/af_tlsh.c:632:7: note: Assuming 'len' is >= 'outlen'
                   if (len < outlen) {
                       ^~~~~~~~~~~~
   net/tls/af_tlsh.c:632:3: note: Taking false branch
                   if (len < outlen) {
                   ^
   net/tls/af_tlsh.c:640:6: note: Assigned value is garbage or undefined
           if (put_user(outlen, optlen)) {
               ^
   arch/arm/include/asm/uaccess.h:369:2: note: expanded from macro 'put_user'
           __put_user_switch((x), (ptr), __pu_err, __put_user_check);      \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/arm/include/asm/uaccess.h:352:3: note: expanded from macro '__put_user_switch'
                   __typeof__(*(ptr)) __pu_val = (x);                      \
                   ^                             ~~~
   Suppressed 7 warnings (5 in non-user code, 2 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.
--
               ^~~~
   net/ceph/messenger_v2.c:2548:2: note: Taking false branch
           if (skip)
           ^
   net/ceph/messenger_v2.c:2552:10: note: Access to field 'con' results in a dereference of a null pointer (loaded from field 'in_msg')
           WARN_ON(con->in_msg->con != con);
                   ^
   include/asm-generic/bug.h:166:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   Suppressed 7 warnings (6 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.
   7 warnings generated.
   fs/splice.c:725:2: warning: Undefined or garbage value returned to caller [clang-analyzer-core.uninitialized.UndefReturn]
           return ret;
           ^      ~~~
   fs/splice.c:630:2: note: 'ret' declared without an initial value
           ssize_t ret;
           ^~~~~~~~~~~
   fs/splice.c:632:15: note: Assuming 'array' is non-null
           if (unlikely(!array))
                        ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   fs/splice.c:632:2: note: Taking false branch
           if (unlikely(!array))
           ^
   fs/splice.c:638:2: note: Loop condition is false. Execution continues on line 717
           while (sd.total_len) {
           ^
   fs/splice.c:722:9: note: Field 'num_spliced' is 0
           if (sd.num_spliced)
                  ^
   fs/splice.c:722:2: note: Taking false branch
           if (sd.num_spliced)
           ^
   fs/splice.c:725:2: note: Undefined or garbage value returned to caller
           return ret;
           ^      ~~~
   fs/splice.c:853:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores]
           ret = 0;
           ^     ~
   fs/splice.c:853:2: note: Value stored to 'ret' is never read
           ret = 0;
           ^     ~
   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.
   8 warnings generated.
   net/rxrpc/local_object.c:218:3: warning: Value stored to 'age' is never read [clang-analyzer-deadcode.DeadStores]
                   age = "old";
                   ^     ~~~~~
   net/rxrpc/local_object.c:218:3: note: Value stored to 'age' is never read
                   age = "old";
                   ^     ~~~~~
   net/rxrpc/local_object.c:234:2: warning: Value stored to 'age' is never read [clang-analyzer-deadcode.DeadStores]
           age = "new";
           ^     ~~~~~
   net/rxrpc/local_object.c:234:2: note: Value stored to 'age' is never read
           age = "new";
           ^     ~~~~~
   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.
   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.
   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.
   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.
   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.
   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.
   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.
   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.
   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.
   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.
   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.
   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.
   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.
   8 warnings generated.
>> net/tls/af_tlsh.c:640:6: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
           if (put_user(outlen, optlen)) {
               ^
   arch/arm/include/asm/uaccess.h:369:2: note: expanded from macro 'put_user'
           __put_user_switch((x), (ptr), __pu_err, __put_user_check);      \
           ^
   arch/arm/include/asm/uaccess.h:352:3: note: expanded from macro '__put_user_switch'
                   __typeof__(*(ptr)) __pu_val = (x);                      \
                   ^
   net/tls/af_tlsh.c:701:2: note: Control jumps to 'case 2:'  at line 702
           switch (sk->sk_family) {
           ^
   net/tls/af_tlsh.c:703:3: note:  Execution continues on line 712
                   break;
                   ^
   net/tls/af_tlsh.c:712:6: note: Assuming 'level' is equal to SOL_TLSH
           if (level != SOL_TLSH)
               ^~~~~~~~~~~~~~~~~
   net/tls/af_tlsh.c:712:2: note: Taking false branch
           if (level != SOL_TLSH)
           ^
   net/tls/af_tlsh.c:715:2: note: Control jumps to 'case 1:'  at line 716
           switch (optname) {
           ^
   net/tls/af_tlsh.c:717:9: note: Calling 'tlsh_getsockopt_priorities'
                   ret = tlsh_getsockopt_priorities(sk, optval, optlen);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/tls/af_tlsh.c:605:6: note: 'outlen' declared without an initial value
           int outlen, len, ret;
               ^~~~~~
   net/tls/af_tlsh.c:608:6: note: Control jumps to 'case 4:'  at line 608
           if (get_user(len, optlen))
               ^
   arch/arm/include/asm/uaccess.h:216:3: note: expanded from macro 'get_user'
                   __get_user_check(x, p);                                 \
                   ^
   arch/arm/include/asm/uaccess.h:180:3: note: expanded from macro '__get_user_check'
                   switch (sizeof(*(__p))) {                               \
                   ^
   net/tls/af_tlsh.c:608:6: note: Taking false branch
           if (get_user(len, optlen))
               ^
   arch/arm/include/asm/uaccess.h:216:3: note: expanded from macro 'get_user'
                   __get_user_check(x, p);                                 \
                   ^
   arch/arm/include/asm/uaccess.h:194:4: note: expanded from macro '__get_user_check'
                           if (sizeof((x)) >= 8)                           \
                           ^
   net/tls/af_tlsh.c:608:6: note:  Execution continues on line 608
           if (get_user(len, optlen))
               ^
   arch/arm/include/asm/uaccess.h:216:3: note: expanded from macro 'get_user'
                   __get_user_check(x, p);                                 \
                   ^
   arch/arm/include/asm/uaccess.h:198:4: note: expanded from macro '__get_user_check'
                           break;                                          \
                           ^
   net/tls/af_tlsh.c:608:6: note: Assuming the condition is false
           if (get_user(len, optlen))
               ^
   arch/arm/include/asm/uaccess.h:214:2: note: expanded from macro 'get_user'
           ({                                                              \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/tls/af_tlsh.c:608:2: note: Taking false branch
           if (get_user(len, optlen))
           ^
   net/tls/af_tlsh.c:610:6: note: Assuming 'optval' is non-null
           if (!optval)
               ^~~~~~~
   net/tls/af_tlsh.c:610:2: note: Taking false branch
           if (!optval)
           ^
   net/tls/af_tlsh.c:619:6: note: Assuming 'info' is non-null
           if (info) {
               ^~~~
   net/tls/af_tlsh.c:619:2: note: Taking true branch
           if (info) {
           ^
   net/tls/af_tlsh.c:629:6: note: Assuming 'val' is non-null
           if (val) {
               ^~~
   net/tls/af_tlsh.c:629:2: note: Taking true branch
           if (val) {
           ^
   net/tls/af_tlsh.c:632:7: note: Assuming 'len' is >= 'outlen'
                   if (len < outlen) {
                       ^~~~~~~~~~~~
   net/tls/af_tlsh.c:632:3: note: Taking false branch
                   if (len < outlen) {
                   ^
   net/tls/af_tlsh.c:640:6: note: Assigned value is garbage or undefined
           if (put_user(outlen, optlen)) {
               ^
   arch/arm/include/asm/uaccess.h:369:2: note: expanded from macro 'put_user'
           __put_user_switch((x), (ptr), __pu_err, __put_user_check);      \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/arm/include/asm/uaccess.h:352:3: note: expanded from macro '__put_user_switch'
                   __typeof__(*(ptr)) __pu_val = (x);                      \
                   ^                             ~~~
   Suppressed 7 warnings (5 in non-user code, 2 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.

vim +640 net/tls/af_tlsh.c

33ec82590b0b91 Chuck Lever 2021-11-19  600  
33ec82590b0b91 Chuck Lever 2021-11-19  601  static int tlsh_getsockopt_priorities(struct sock *sk, char __user *optval,
33ec82590b0b91 Chuck Lever 2021-11-19  602  				      int __user *optlen)
33ec82590b0b91 Chuck Lever 2021-11-19  603  {
33ec82590b0b91 Chuck Lever 2021-11-19  604  	struct tlsh_sock_info *info;
33ec82590b0b91 Chuck Lever 2021-11-19  605  	int outlen, len, ret;
33ec82590b0b91 Chuck Lever 2021-11-19  606  	const char *val;
33ec82590b0b91 Chuck Lever 2021-11-19  607  
33ec82590b0b91 Chuck Lever 2021-11-19  608  	if (get_user(len, optlen))
33ec82590b0b91 Chuck Lever 2021-11-19  609  		return -EFAULT;
33ec82590b0b91 Chuck Lever 2021-11-19  610  	if (!optval)
33ec82590b0b91 Chuck Lever 2021-11-19  611  		return -EINVAL;
33ec82590b0b91 Chuck Lever 2021-11-19  612  
33ec82590b0b91 Chuck Lever 2021-11-19  613  	ret = 0;
33ec82590b0b91 Chuck Lever 2021-11-19  614  
33ec82590b0b91 Chuck Lever 2021-11-19  615  	sock_hold(sk);
33ec82590b0b91 Chuck Lever 2021-11-19  616  	write_lock_bh(&sk->sk_callback_lock);
33ec82590b0b91 Chuck Lever 2021-11-19  617  
33ec82590b0b91 Chuck Lever 2021-11-19  618  	info = sk->sk_tlsh_priv;
33ec82590b0b91 Chuck Lever 2021-11-19  619  	if (info) {
33ec82590b0b91 Chuck Lever 2021-11-19  620  		val = info->tsi_tls_priorities;
33ec82590b0b91 Chuck Lever 2021-11-19  621  	} else {
33ec82590b0b91 Chuck Lever 2021-11-19  622  		write_unlock_bh(&sk->sk_callback_lock);
33ec82590b0b91 Chuck Lever 2021-11-19  623  		ret = -EBUSY;
33ec82590b0b91 Chuck Lever 2021-11-19  624  		goto out_put;
33ec82590b0b91 Chuck Lever 2021-11-19  625  	}
33ec82590b0b91 Chuck Lever 2021-11-19  626  
33ec82590b0b91 Chuck Lever 2021-11-19  627  	write_unlock_bh(&sk->sk_callback_lock);
33ec82590b0b91 Chuck Lever 2021-11-19  628  
33ec82590b0b91 Chuck Lever 2021-11-19  629  	if (val) {
33ec82590b0b91 Chuck Lever 2021-11-19  630  		int outlen = strlen(val);
33ec82590b0b91 Chuck Lever 2021-11-19  631  
33ec82590b0b91 Chuck Lever 2021-11-19  632  		if (len < outlen) {
33ec82590b0b91 Chuck Lever 2021-11-19  633  			ret = -EINVAL;
33ec82590b0b91 Chuck Lever 2021-11-19  634  			goto out_put;
33ec82590b0b91 Chuck Lever 2021-11-19  635  		}
33ec82590b0b91 Chuck Lever 2021-11-19  636  	} else {
33ec82590b0b91 Chuck Lever 2021-11-19  637  		outlen = 0;
33ec82590b0b91 Chuck Lever 2021-11-19  638  	}
33ec82590b0b91 Chuck Lever 2021-11-19  639  
33ec82590b0b91 Chuck Lever 2021-11-19 @640  	if (put_user(outlen, optlen)) {
33ec82590b0b91 Chuck Lever 2021-11-19  641  		ret = -EFAULT;
33ec82590b0b91 Chuck Lever 2021-11-19  642  		goto out_put;
33ec82590b0b91 Chuck Lever 2021-11-19  643  	}
33ec82590b0b91 Chuck Lever 2021-11-19  644  	if (copy_to_user(optval, &val, outlen))
33ec82590b0b91 Chuck Lever 2021-11-19  645  		ret = -EFAULT;
33ec82590b0b91 Chuck Lever 2021-11-19  646  
33ec82590b0b91 Chuck Lever 2021-11-19  647  out_put:
33ec82590b0b91 Chuck Lever 2021-11-19  648  	sock_put(sk);
33ec82590b0b91 Chuck Lever 2021-11-19  649  	return ret;
33ec82590b0b91 Chuck Lever 2021-11-19  650  }
33ec82590b0b91 Chuck Lever 2021-11-19  651  

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-03-14  3:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-14  3:10 [hare-scsi-devel:tls-upcall.v4 121/156] net/tls/af_tlsh.c:640:6: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.