All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [alobakin:bitops 2/7] include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]
Date: Sun, 19 Jun 2022 22:24:47 +0800	[thread overview]
Message-ID: <202206192259.xQdByQP6-lkp@intel.com> (raw)

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

:::::: 
:::::: Manual check reason: "low confidence static check warning: include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]"
:::::: 

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: Alexander Lobakin <alexandr.lobakin@intel.com>
CC: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

tree:   https://github.com/alobakin/linux bitops
head:   9bd39b17ce49d350eed93a031e0da6389067013e
commit: b9944c14c86ab2ac2a97aeec1426812751e0039b [2/7] bitops: always define asm-generic non-atomic bitops
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: riscv-randconfig-c006-20220617 (https://download.01.org/0day-ci/archive/20220619/202206192259.xQdByQP6-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 91688716ba49942051dccdf7b9c4f81a7ec8feaf)
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-riscv-linux-gnu
        # https://github.com/alobakin/linux/commit/b9944c14c86ab2ac2a97aeec1426812751e0039b
        git remote add alobakin https://github.com/alobakin/linux
        git fetch --no-tags alobakin bitops
        git checkout b9944c14c86ab2ac2a97aeec1426812751e0039b
        # save the config file
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer 

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


clang-analyzer warnings: (new ones prefixed by >>)
   mm/hugetlb_cgroup.c:830:2: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.max_usage_in_bytes", buf);
           ^~~~~~~~
   mm/hugetlb_cgroup.c:830:2: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11
           snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.max_usage_in_bytes", buf);
           ^~~~~~~~
   mm/hugetlb_cgroup.c:837:2: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           snprintf(cft->name, MAX_CFTYPE_NAME, "%s.failcnt", buf);
           ^~~~~~~~
   mm/hugetlb_cgroup.c:837:2: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11
           snprintf(cft->name, MAX_CFTYPE_NAME, "%s.failcnt", buf);
           ^~~~~~~~
   mm/hugetlb_cgroup.c:844:2: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.failcnt", buf);
           ^~~~~~~~
   mm/hugetlb_cgroup.c:844:2: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11
           snprintf(cft->name, MAX_CFTYPE_NAME, "%s.rsvd.failcnt", buf);
           ^~~~~~~~
   mm/hugetlb_cgroup.c:851:2: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           snprintf(cft->name, MAX_CFTYPE_NAME, "%s.numa_stat", buf);
           ^~~~~~~~
   mm/hugetlb_cgroup.c:851:2: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11
           snprintf(cft->name, MAX_CFTYPE_NAME, "%s.numa_stat", buf);
           ^~~~~~~~
   mm/hugetlb_cgroup.c:857:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(cft, 0, sizeof(*cft));
           ^~~~~~
   mm/hugetlb_cgroup.c:857:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(cft, 0, sizeof(*cft));
           ^~~~~~
   Suppressed 44 warnings (44 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.
   49 warnings generated.
   fs/ext4/readpage.c:373:39: warning: The left operand of '<<' is a garbage value [clang-analyzer-core.UndefinedBinaryOperatorResult]
                           bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
                                                    ~~~~~~~~~ ^
   fs/ext4/readpage.c:242:26: note: Assuming 'rac' is null
           unsigned int nr_pages = rac ? readahead_count(rac) : 1;
                                   ^~~
   fs/ext4/readpage.c:242:26: note: '?' condition is false
   fs/ext4/readpage.c:249:2: note: Loop condition is true.  Entering loop body
           for (; nr_pages; nr_pages--) {
           ^
   fs/ext4/readpage.c:253:7: note: 'rac' is null
                   if (rac) {
                       ^~~
   fs/ext4/readpage.c:253:3: note: Taking false branch
                   if (rac) {
                   ^
   fs/ext4/readpage.c:258:7: note: Assuming the condition is false
                   if (page_has_buffers(page))
                       ^
   include/linux/buffer_head.h:146:32: note: expanded from macro 'page_has_buffers'
   #define page_has_buffers(page)  PagePrivate(page)
                                   ^~~~~~~~~~~~~~~~~
   fs/ext4/readpage.c:258:3: note: Taking false branch
                   if (page_has_buffers(page))
                   ^
   fs/ext4/readpage.c:266:7: note: Assuming 'last_block' is <= 'last_block_in_file'
                   if (last_block > last_block_in_file)
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ext4/readpage.c:266:3: note: Taking false branch
                   if (last_block > last_block_in_file)
                   ^
   fs/ext4/readpage.c:273:39: note: Left side of '&&' is false
                   if ((map.m_flags & EXT4_MAP_MAPPED) &&
                                                       ^
   fs/ext4/readpage.c:298:10: note: Assuming 'page_block' is >= 'blocks_per_page'
                   while (page_block < blocks_per_page) {
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ext4/readpage.c:298:3: note: Loop condition is false. Execution continues on line 338
                   while (page_block < blocks_per_page) {
                   ^
   fs/ext4/readpage.c:338:7: note: 'first_hole' is equal to 'blocks_per_page'
                   if (first_hole != blocks_per_page) {
                       ^~~~~~~~~~
   fs/ext4/readpage.c:338:3: note: Taking false branch
                   if (first_hole != blocks_per_page) {
                   ^
   fs/ext4/readpage.c:349:14: note: 'fully_mapped' is 1
                   } else if (fully_mapped) {
                              ^~~~~~~~~~~~
   fs/ext4/readpage.c:349:10: note: Taking true branch
                   } else if (fully_mapped) {
                          ^
   fs/ext4/readpage.c:357:7: note: 'bio' is null
                   if (bio && (last_block_in_bio != blocks[0] - 1 ||
                       ^~~
   fs/ext4/readpage.c:357:11: note: Left side of '&&' is false
                   if (bio && (last_block_in_bio != blocks[0] - 1 ||
                           ^
   fs/ext4/readpage.c:363:7: note: 'bio' is equal to NULL
                   if (bio == NULL) {
                       ^~~
   fs/ext4/readpage.c:363:3: note: Taking true branch
                   if (bio == NULL) {
                   ^
   fs/ext4/readpage.c:373:39: note: The left operand of '<<' is a garbage value
                           bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
                                                    ~~~~~~~~~ ^
>> include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^
   fs/ext4/readpage.c:242:26: note: Assuming 'rac' is non-null
           unsigned int nr_pages = rac ? readahead_count(rac) : 1;
                                   ^~~
   fs/ext4/readpage.c:242:26: note: '?' condition is true
   fs/ext4/readpage.c:249:2: note: Loop condition is true.  Entering loop body
           for (; nr_pages; nr_pages--) {
           ^
   fs/ext4/readpage.c:253:7: note: 'rac' is non-null
                   if (rac) {
                       ^~~
   fs/ext4/readpage.c:253:3: note: Taking true branch
                   if (rac) {
                   ^
   fs/ext4/readpage.c:258:7: note: Calling 'PagePrivate'
                   if (page_has_buffers(page))
                       ^
   include/linux/buffer_head.h:146:32: note: expanded from macro 'page_has_buffers'
   #define page_has_buffers(page)  PagePrivate(page)
                                   ^~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:530:1: note: Passing null pointer value via 2nd parameter 'addr'
   PAGEFLAG(Private, private, PF_ANY)
   ^
   include/linux/page-flags.h:447:2: note: expanded from macro 'PAGEFLAG'
           TESTPAGEFLAG(uname, lname, policy)                              \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:402:31: note: expanded from macro 'TESTPAGEFLAG'
   { return test_bit(PG_##lname, &policy(page, 0)->flags); }
                                 ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:530:1: note: Calling 'generic_test_bit'
   PAGEFLAG(Private, private, PF_ANY)
   ^
   include/linux/page-flags.h:447:2: note: expanded from macro 'PAGEFLAG'
           TESTPAGEFLAG(uname, lname, policy)                              \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:402:10: note: expanded from macro 'TESTPAGEFLAG'
   { return test_bit(PG_##lname, &policy(page, 0)->flags); }
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/asm-generic/bitops/non-atomic.h:26:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   include/asm-generic/bitops/non-atomic.h:25:23: note: expanded from macro 'arch_test_bit'
   #define arch_test_bit generic_test_bit
                         ^
   include/asm-generic/bitops/generic-non-atomic.h:127:16: note: Array access (from variable 'addr') results in a null pointer dereference
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^~~~
   Suppressed 47 warnings (47 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.
   85 warnings generated.
   init/main.c:344:10: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                           ret = snprintf(buf, rest(buf, end), "%s ", xbc_namebuf);
                                 ^~~~~~~~
   init/main.c:344:10: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11
                           ret = snprintf(buf, rest(buf, end), "%s ", xbc_namebuf);
                                 ^~~~~~~~
   init/main.c:351:10: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                           ret = snprintf(buf, rest(buf, end), "%s=\"%s\" ",
                                 ^~~~~~~~
   init/main.c:351:10: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11
                           ret = snprintf(buf, rest(buf, end), "%s=\"%s\" ",
                                 ^~~~~~~~
   init/main.c:498:4: warning: Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memmove_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                           memmove(val-1, val, strlen(val)+1);
                           ^~~~~~~
   init/main.c:498:4: note: Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memmove_s' in case of C11
                           memmove(val-1, val, strlen(val)+1);
                           ^~~~~~~
   init/main.c:640:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
                   strcpy(saved_command_line, extra_command_line);
                   ^~~~~~
   init/main.c:640:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
                   strcpy(saved_command_line, extra_command_line);
                   ^~~~~~
   init/main.c:641:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
                   strcpy(static_command_line, extra_command_line);
                   ^~~~~~
   init/main.c:641:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
                   strcpy(static_command_line, extra_command_line);
                   ^~~~~~
   init/main.c:643:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(saved_command_line + xlen, boot_command_line);
           ^~~~~~
   init/main.c:643:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
           strcpy(saved_command_line + xlen, boot_command_line);
           ^~~~~~
   init/main.c:644:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(static_command_line + xlen, command_line);
           ^~~~~~
   init/main.c:644:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
           strcpy(static_command_line + xlen, command_line);
           ^~~~~~
   init/main.c:656:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
                           strcpy(saved_command_line + len, extra_init_args);
                           ^~~~~~
   init/main.c:656:4: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
                           strcpy(saved_command_line + len, extra_init_args);
                           ^~~~~~
   init/main.c:658:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
--
   block/blk-mq.c:2570:7: note: Assuming 'hctx' is equal to field 'mq_hctx'
                   if (hctx != rq->mq_hctx) {
                       ^~~~~~~~~~~~~~~~~~~
   block/blk-mq.c:2570:3: note: Taking false branch
                   if (hctx != rq->mq_hctx) {
                   ^
   block/blk-mq.c:2577:3: note: Control jumps to the 'default' case at line 2586
                   switch (ret) {
                   ^
   block/blk-mq.c:2589:4: note:  Execution continues on line 2566
                           break;
                           ^
   block/blk-mq.c:2566:15: note: Left side of '&&' is true
           while ((rq = rq_list_pop(&plug->mq_list))) {
                        ^
   include/linux/blk-mq.h:226:6: note: expanded from macro 'rq_list_pop'
           if ((listptr) && *(listptr))    {               \
               ^
   block/blk-mq.c:2566:15: note: Taking false branch
           while ((rq = rq_list_pop(&plug->mq_list))) {
                        ^
   include/linux/blk-mq.h:226:2: note: expanded from macro 'rq_list_pop'
           if ((listptr) && *(listptr))    {               \
           ^
   block/blk-mq.c:2566:2: note: Loop condition is false. Execution continues on line 2597
           while ((rq = rq_list_pop(&plug->mq_list))) {
           ^
   block/blk-mq.c:2597:6: note: 'errors' is 1
           if (errors)
               ^~~~~~
   block/blk-mq.c:2597:2: note: Taking true branch
           if (errors)
           ^
   block/blk-mq.c:2598:21: note: Passing null pointer value via 1st parameter 'hctx'
                   blk_mq_commit_rqs(hctx, &queued, from_schedule);
                                     ^~~~
   block/blk-mq.c:2598:3: note: Calling 'blk_mq_commit_rqs'
                   blk_mq_commit_rqs(hctx, &queued, from_schedule);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   block/blk-mq.c:2429:6: note: Access to field 'queue' results in a dereference of a null pointer (loaded from variable 'hctx')
           if (hctx->queue->mq_ops->commit_rqs) {
               ^~~~
   block/blk-mq.c:3003:6: warning: Branch condition evaluates to a garbage value [clang-analyzer-core.uninitialized.Branch]
           if (bio)
               ^~~
   block/blk-mq.c:2964:14: note: 'bio' declared without an initial value
           struct bio *bio, *bio_src;
                       ^~~
   block/blk-mq.c:2966:6: note: Assuming 'bs' is non-null
           if (!bs)
               ^~~
   block/blk-mq.c:2966:2: note: Taking false branch
           if (!bs)
           ^
   block/blk-mq.c:2969:2: note: Assuming field 'bio' is null
           __rq_for_each_bio(bio_src, rq_src) {
           ^
   include/linux/blk-mq.h:981:6: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
               ^~~~~~~~~
   block/blk-mq.c:2969:2: note: Taking false branch
           __rq_for_each_bio(bio_src, rq_src) {
           ^
   include/linux/blk-mq.h:981:2: note: expanded from macro '__rq_for_each_bio'
           if ((rq->bio))                  \
           ^
   block/blk-mq.c:2990:6: note: Assuming the condition is false
           if (rq_src->rq_flags & RQF_SPECIAL_PAYLOAD) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   block/blk-mq.c:2990:2: note: Taking false branch
           if (rq_src->rq_flags & RQF_SPECIAL_PAYLOAD) {
           ^
   block/blk-mq.c:2997:6: note: Assuming field 'bio' is non-null
           if (rq->bio && blk_crypto_rq_bio_prep(rq, rq->bio, gfp_mask) < 0)
               ^~~~~~~
   block/blk-mq.c:2997:6: note: Left side of '&&' is true
   block/blk-mq.c:2997:17: note: Assuming the condition is true
           if (rq->bio && blk_crypto_rq_bio_prep(rq, rq->bio, gfp_mask) < 0)
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   block/blk-mq.c:2997:2: note: Taking true branch
           if (rq->bio && blk_crypto_rq_bio_prep(rq, rq->bio, gfp_mask) < 0)
           ^
   block/blk-mq.c:2998:3: note: Control jumps to line 3003
                   goto free_and_out;
                   ^
   block/blk-mq.c:3003:6: note: Branch condition evaluates to a garbage value
           if (bio)
               ^~~
   block/blk-mq.c:4219:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   memcpy(new_tags, set->tags, cur_nr_hw_queues *
                   ^~~~~~
   block/blk-mq.c:4219:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
                   memcpy(new_tags, set->tags, cur_nr_hw_queues *
                   ^~~~~~
   block/blk-mq.c:4329:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(set, 0, sizeof(*set));
           ^~~~~~
   block/blk-mq.c:4329:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(set, 0, sizeof(*set));
           ^~~~~~
>> include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^
   block/blk-mq.c:3373:9: note: Assuming '____ptr' is null
           hctx = hlist_entry_safe(node, struct blk_mq_hw_ctx, cpuhp_dead);
                  ^
   include/linux/list.h:1029:5: note: expanded from macro 'hlist_entry_safe'
              ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
              ^~~~~~~
   block/blk-mq.c:3373:9: note: '?' condition is false
           hctx = hlist_entry_safe(node, struct blk_mq_hw_ctx, cpuhp_dead);
                  ^
   include/linux/list.h:1029:5: note: expanded from macro 'hlist_entry_safe'
              ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
              ^
   block/blk-mq.c:3374:7: note: Calling 'cpumask_test_cpu'
           if (!cpumask_test_cpu(cpu, hctx->cpumask))
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/cpumask.h:379:38: note: Passing null pointer value via 2nd parameter 'addr'
           return test_bit(cpumask_check(cpu), cpumask_bits((cpumask)));
                                               ^
   include/linux/cpumask.h:26:29: note: expanded from macro 'cpumask_bits'
   #define cpumask_bits(maskp) ((maskp)->bits)
                               ^~~~~~~~~~~~~~~
   include/linux/cpumask.h:379:9: note: Calling 'generic_test_bit'
           return test_bit(cpumask_check(cpu), cpumask_bits((cpumask)));
                  ^
   include/asm-generic/bitops/non-atomic.h:26:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   include/asm-generic/bitops/non-atomic.h:25:23: note: expanded from macro 'arch_test_bit'
   #define arch_test_bit generic_test_bit
                         ^
   include/asm-generic/bitops/generic-non-atomic.h:127:16: note: Array access (from variable 'addr') results in a null pointer dereference
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^~~~
   Suppressed 49 warnings (49 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.
   65 warnings generated.
   crypto/aead.c:36:2: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memcpy(alignbuffer, key, keylen);
           ^~~~~~
   crypto/aead.c:36:2: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
           memcpy(alignbuffer, key, keylen);
           ^~~~~~
   crypto/aead.c:38:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(alignbuffer, 0, keylen);
           ^~~~~~
   crypto/aead.c:38:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(alignbuffer, 0, keylen);
           ^~~~~~
   Suppressed 63 warnings (63 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.
   66 warnings generated.
   crypto/geniv.c:77:6: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           if (snprintf(inst->alg.base.cra_name, CRYPTO_MAX_ALG_NAME,
               ^~~~~~~~
   crypto/geniv.c:77:6: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11
           if (snprintf(inst->alg.base.cra_name, CRYPTO_MAX_ALG_NAME,
               ^~~~~~~~
   crypto/geniv.c:81:6: warning: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           if (snprintf(inst->alg.base.cra_driver_name, CRYPTO_MAX_ALG_NAME,
               ^~~~~~~~
   crypto/geniv.c:81:6: note: Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11
           if (snprintf(inst->alg.base.cra_driver_name, CRYPTO_MAX_ALG_NAME,
               ^~~~~~~~
   Suppressed 64 warnings (64 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.
   71 warnings generated.
   crypto/skcipher.c:129:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   memcpy(walk->dst.virt.addr, walk->page, n);
                   ^~~~~~
   crypto/skcipher.c:129:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
                   memcpy(walk->dst.virt.addr, walk->page, n);
                   ^~~~~~
   crypto/skcipher.c:129:3: warning: Null pointer passed as 2nd argument to memory copy function [clang-analyzer-unix.cstring.NullArg]
                   memcpy(walk->dst.virt.addr, walk->page, n);
                   ^
   crypto/skcipher.c:563:9: note: Calling 'skcipher_walk_aead_common'
           return skcipher_walk_aead_common(walk, req, atomic);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   crypto/skcipher.c:515:15: note: Assuming field 'total' is not equal to 0
           if (unlikely(!walk->total))
                        ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   crypto/skcipher.c:515:2: note: Taking false branch
           if (unlikely(!walk->total))
           ^
   crypto/skcipher.c:529:6: note: Assuming the condition is false
           if (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   crypto/skcipher.c:529:2: note: Taking false branch
           if (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP)
           ^
   crypto/skcipher.c:539:8: note: Calling 'skcipher_walk_first'
           err = skcipher_walk_first(walk);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~
   crypto/skcipher.c:434:6: note: Assuming the condition is true
           if (WARN_ON_ONCE(in_hardirq()))
--
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                             ^
   fs/buffer.c:1982:9: note: Assuming the condition is false
           BUG_ON(to > PAGE_SIZE);
                  ^
   include/asm-generic/bug.h:71:45: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                      ~~~~~~~~~^~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   fs/buffer.c:1982:2: note: Taking false branch
           BUG_ON(to > PAGE_SIZE);
           ^
   include/asm-generic/bug.h:71:32: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                  ^
   fs/buffer.c:1982:2: note: Loop condition is false.  Exiting loop
           BUG_ON(to > PAGE_SIZE);
           ^
   include/asm-generic/bug.h:71:27: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                             ^
   fs/buffer.c:1983:9: note: Assuming 'from' is <= 'to'
           BUG_ON(from > to);
                  ^
   include/asm-generic/bug.h:71:45: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                               ^~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   fs/buffer.c:1983:2: note: Taking false branch
           BUG_ON(from > to);
           ^
   include/asm-generic/bug.h:71:32: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                  ^
   fs/buffer.c:1983:2: note: Loop condition is false.  Exiting loop
           BUG_ON(from > to);
           ^
   include/asm-generic/bug.h:71:27: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                             ^
   fs/buffer.c:1991:34: note: 'bh' is equal to 'head'
           for(bh = head, block_start = 0; bh != head || !block_start;
                                           ^~
   fs/buffer.c:1991:34: note: Left side of '||' is false
   fs/buffer.c:1991:2: note: Loop condition is true.  Entering loop body
           for(bh = head, block_start = 0; bh != head || !block_start;
           ^
   fs/buffer.c:1994:7: note: Assuming 'block_end' is > 'from'
                   if (block_end <= from || block_start >= to) {
                       ^~~~~~~~~~~~~~~~~
   fs/buffer.c:1994:7: note: Left side of '||' is false
   fs/buffer.c:1994:28: note: Assuming 'block_start' is < 'to'
                   if (block_end <= from || block_start >= to) {
                                            ^~~~~~~~~~~~~~~~~
   fs/buffer.c:1994:3: note: Taking false branch
                   if (block_end <= from || block_start >= to) {
                   ^
   fs/buffer.c:2001:7: note: Assuming the condition is false
                   if (buffer_new(bh))
                       ^~~~~~~~~~~~~~
   fs/buffer.c:2001:3: note: Taking false branch
                   if (buffer_new(bh))
                   ^
   fs/buffer.c:2003:7: note: Assuming the condition is true
                   if (!buffer_mapped(bh)) {
                       ^~~~~~~~~~~~~~~~~~
   fs/buffer.c:2003:3: note: Taking true branch
                   if (!buffer_mapped(bh)) {
                   ^
   fs/buffer.c:2004:4: note: Taking false branch
                           WARN_ON(bh->b_size != blocksize);
                           ^
   include/asm-generic/bug.h:123:2: note: expanded from macro 'WARN_ON'
           if (unlikely(__ret_warn_on))                                    \
           ^
   fs/buffer.c:2005:8: note: Assuming 'get_block' is null
                           if (get_block) {
                               ^~~~~~~~~
   fs/buffer.c:2005:4: note: Taking false branch
                           if (get_block) {
                           ^
   fs/buffer.c:2010:35: note: Passing null pointer value via 4th parameter 'iomap'
                                   iomap_to_bh(inode, block, bh, iomap);
                                                                 ^~~~~
   fs/buffer.c:2010:5: note: Calling 'iomap_to_bh'
                                   iomap_to_bh(inode, block, bh, iomap);
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/buffer.c:1919:15: note: Access to field 'bdev' results in a dereference of a null pointer (loaded from variable 'iomap')
           bh->b_bdev = iomap->bdev;
                        ^~~~~
   fs/buffer.c:2901:2: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores]
           err = 0;
           ^     ~
   fs/buffer.c:2901:2: note: Value stored to 'err' is never read
           err = 0;
           ^     ~
>> include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^
   fs/buffer.c:349:9: note: Assuming the condition is false
           BUG_ON(!buffer_async_write(bh));
                  ^
   include/asm-generic/bug.h:71:45: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                               ^~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   fs/buffer.c:349:2: note: Taking false branch
           BUG_ON(!buffer_async_write(bh));
           ^
   include/asm-generic/bug.h:71:32: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                  ^
   fs/buffer.c:349:2: note: Loop condition is false.  Exiting loop
           BUG_ON(!buffer_async_write(bh));
           ^
   include/asm-generic/bug.h:71:27: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                             ^
   fs/buffer.c:352:6: note: Assuming 'uptodate' is 0
           if (uptodate) {
               ^~~~~~~~
   fs/buffer.c:352:2: note: Taking false branch
           if (uptodate) {
           ^
   fs/buffer.c:361:10: note: Calling 'PagePrivate'
           first = page_buffers(page);
                   ^
   include/linux/buffer_head.h:143:11: note: expanded from macro 'page_buffers'
                   BUG_ON(!PagePrivate(page));                     \
                   ~~~~~~~~^~~~~~~~~~~~~~~~~~
   include/asm-generic/bug.h:71:45: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                      ~~~~~~~~~^~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   include/linux/page-flags.h:530:1: note: Passing null pointer value via 2nd parameter 'addr'
   PAGEFLAG(Private, private, PF_ANY)
   ^
   include/linux/page-flags.h:447:2: note: expanded from macro 'PAGEFLAG'
           TESTPAGEFLAG(uname, lname, policy)                              \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:402:31: note: expanded from macro 'TESTPAGEFLAG'
   { return test_bit(PG_##lname, &policy(page, 0)->flags); }
                                 ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:530:1: note: Calling 'generic_test_bit'
   PAGEFLAG(Private, private, PF_ANY)
   ^
   include/linux/page-flags.h:447:2: note: expanded from macro 'PAGEFLAG'
           TESTPAGEFLAG(uname, lname, policy)                              \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/page-flags.h:402:10: note: expanded from macro 'TESTPAGEFLAG'
   { return test_bit(PG_##lname, &policy(page, 0)->flags); }
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/asm-generic/bitops/non-atomic.h:26:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   include/asm-generic/bitops/non-atomic.h:25:23: note: expanded from macro 'arch_test_bit'
   #define arch_test_bit generic_test_bit
                         ^
   include/asm-generic/bitops/generic-non-atomic.h:127:16: note: Array access (from variable 'addr') results in a null pointer dereference
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^~~~
   include/linux/list.h:88:24: warning: Access to field 'next' results in a dereference of a null pointer (loaded from variable 'head') [clang-analyzer-core.NullDereference]
           __list_add(new, head, head->next);
                                 ^
   fs/buffer.c:545:6: note: Assuming 'buffer_mapping' is not equal to NULL
           if (buffer_mapping == NULL || list_empty(&mapping->private_list))
               ^~~~~~~~~~~~~~~~~~~~~~
   fs/buffer.c:545:6: note: Left side of '||' is false
   fs/buffer.c:545:32: note: Assuming the condition is false
           if (buffer_mapping == NULL || list_empty(&mapping->private_list))
                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/buffer.c:545:2: note: Taking false branch
           if (buffer_mapping == NULL || list_empty(&mapping->private_list))
           ^
   fs/buffer.c:548:9: note: Calling 'fsync_buffers_list'
           return fsync_buffers_list(&buffer_mapping->private_lock,
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/buffer.c:682:2: note: Loop condition is true.  Entering loop body
           while (!list_empty(list)) {
           ^
   fs/buffer.c:685:3: note: Calling '__remove_assoc_queue'
                   __remove_assoc_queue(bh);
                   ^~~~~~~~~~~~~~~~~~~~~~~~
   fs/buffer.c:480:10: note: Assuming field 'b_assoc_map' is non-null
           WARN_ON(!bh->b_assoc_map);
                   ^
   include/asm-generic/bug.h:122:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   fs/buffer.c:480:2: note: Taking false branch
           WARN_ON(!bh->b_assoc_map);
           ^
   include/asm-generic/bug.h:123:2: note: expanded from macro 'WARN_ON'
--
                                                  ~~~~~~~~~~~~^~~~~~~~
   arch/riscv/include/asm/mmio.h:93:71: note: expanded from macro 'writel_cpu'
   #define writel_cpu(v, c)        ((void)__raw_writel((__force u32)cpu_to_le32(v), (c)))
                                                                    ~~~~~~~~~~~~^~
   include/uapi/linux/byteorder/little_endian.h:34:51: note: expanded from macro '__cpu_to_le32'
   #define __cpu_to_le32(x) ((__force __le32)(__u32)(x))
                                                     ^
   Suppressed 32 warnings (32 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.
   49 warnings generated.
   drivers/gpio/gpiolib-cdev.c:213:3: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   memset(&ghd, 0, sizeof(ghd));
                   ^~~~~~
   drivers/gpio/gpiolib-cdev.c:213:3: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
                   memset(&ghd, 0, sizeof(ghd));
                   ^~~~~~
   drivers/gpio/gpiolib-cdev.c:586:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(&le, 0, sizeof(le));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:586:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(&le, 0, sizeof(le));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:666:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(&le, 0, sizeof(le));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:666:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(&le, 0, sizeof(le));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:798:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(&le, 0, sizeof(le));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:798:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(&le, 0, sizeof(le));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:1448:4: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores]
                           ret = -EIO;
                           ^     ~~~~
   drivers/gpio/gpiolib-cdev.c:1448:4: note: Value stored to 'ret' is never read
                           ret = -EIO;
                           ^     ~~~~
   drivers/gpio/gpiolib-cdev.c:1754:4: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores]
                           ret = -EIO;
                           ^     ~~~~
   drivers/gpio/gpiolib-cdev.c:1754:4: note: Value stored to 'ret' is never read
                           ret = -EIO;
                           ^     ~~~~
   drivers/gpio/gpiolib-cdev.c:1797:3: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   memset(&ghd, 0, sizeof(ghd));
                   ^~~~~~
   drivers/gpio/gpiolib-cdev.c:1797:3: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
                   memset(&ghd, 0, sizeof(ghd));
                   ^~~~~~
   drivers/gpio/gpiolib-cdev.c:1839:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(&ge, 0, sizeof(ge));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:1839:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(&ge, 0, sizeof(ge));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2038:2: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memcpy(info_v1->name, info_v2->name, sizeof(info_v1->name));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2038:2: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
           memcpy(info_v1->name, info_v2->name, sizeof(info_v1->name));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2039:2: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memcpy(info_v1->consumer, info_v2->consumer, sizeof(info_v1->consumer));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2039:2: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
           memcpy(info_v1->consumer, info_v2->consumer, sizeof(info_v1->consumer));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2069:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(lic_v1, 0, sizeof(*lic_v1));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2069:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(lic_v1, 0, sizeof(*lic_v1));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2086:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(info, 0, sizeof(*info));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2086:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(info, 0, sizeof(*info));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2178:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(&chipinfo, 0, sizeof(chipinfo));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2178:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(&chipinfo, 0, sizeof(chipinfo));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2355:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(&chg, 0, sizeof(chg));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2355:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(&chg, 0, sizeof(chg));
           ^~~~~~
   drivers/gpio/gpiolib-cdev.c:2433:4: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores]
                           ret = -EIO;
                           ^     ~~~~
   drivers/gpio/gpiolib-cdev.c:2433:4: note: Value stored to 'ret' is never read
                           ret = -EIO;
                           ^     ~~~~
>> include/asm-generic/bitops/generic-non-atomic.h:32:6: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
           *p  |= mask;
               ^
   drivers/gpio/gpiolib-cdev.c:204:2: note: Control jumps to 'case 3225465865:'  at line 221
           switch (cmd) {
           ^
   drivers/gpio/gpiolib-cdev.c:226:7: note: Assuming the condition is false
                   if (!test_bit(FLAG_IS_OUT, &lh->descs[0]->flags))
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpiolib-cdev.c:226:3: note: Taking false branch
                   if (!test_bit(FLAG_IS_OUT, &lh->descs[0]->flags))
                   ^
   drivers/gpio/gpiolib-cdev.c:229:7: note: Assuming the condition is false
                   if (copy_from_user(&ghd, ip, sizeof(ghd)))
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpiolib-cdev.c:229:3: note: Taking false branch
                   if (copy_from_user(&ghd, ip, sizeof(ghd)))
                   ^
   drivers/gpio/gpiolib-cdev.c:233:15: note: Assuming 'i' is < field 'num_descs'
                   for (i = 0; i < lh->num_descs; i++)
                               ^~~~~~~~~~~~~~~~~
   drivers/gpio/gpiolib-cdev.c:233:3: note: Loop condition is true.  Entering loop body
                   for (i = 0; i < lh->num_descs; i++)
                   ^
   drivers/gpio/gpiolib-cdev.c:234:4: note: Calling '__assign_bit'
                           __assign_bit(i, vals, ghd.values[i]);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitops.h:217:6: note: Assuming 'value' is true
           if (value)
               ^~~~~
   include/linux/bitops.h:217:2: note: Taking true branch
           if (value)
           ^
   include/linux/bitops.h:218:3: note: Calling 'generic___set_bit'
                   __set_bit(nr, addr);
                   ^
   include/asm-generic/bitops/non-atomic.h:8:19: note: expanded from macro '__set_bit'
   #define __set_bit arch___set_bit
                     ^
   include/asm-generic/bitops/non-atomic.h:7:24: note: expanded from macro 'arch___set_bit'
   #define arch___set_bit generic___set_bit
                          ^
   include/asm-generic/bitops/generic-non-atomic.h:32:6: note: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage
           *p  |= mask;
           ~~  ^
   include/asm-generic/bitops/generic-non-atomic.h:41:5: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
           *p &= ~mask;
              ^
   drivers/gpio/gpiolib-cdev.c:204:2: note: Control jumps to 'case 3225465865:'  at line 221
           switch (cmd) {
           ^
   drivers/gpio/gpiolib-cdev.c:226:7: note: Assuming the condition is false
                   if (!test_bit(FLAG_IS_OUT, &lh->descs[0]->flags))
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpiolib-cdev.c:226:3: note: Taking false branch
                   if (!test_bit(FLAG_IS_OUT, &lh->descs[0]->flags))
                   ^
   drivers/gpio/gpiolib-cdev.c:229:7: note: Assuming the condition is false
                   if (copy_from_user(&ghd, ip, sizeof(ghd)))
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpiolib-cdev.c:229:3: note: Taking false branch
                   if (copy_from_user(&ghd, ip, sizeof(ghd)))
                   ^
   drivers/gpio/gpiolib-cdev.c:233:15: note: Assuming 'i' is < field 'num_descs'
                   for (i = 0; i < lh->num_descs; i++)
                               ^~~~~~~~~~~~~~~~~
   drivers/gpio/gpiolib-cdev.c:233:3: note: Loop condition is true.  Entering loop body
                   for (i = 0; i < lh->num_descs; i++)
                   ^
   drivers/gpio/gpiolib-cdev.c:234:4: note: Calling '__assign_bit'
                           __assign_bit(i, vals, ghd.values[i]);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitops.h:217:6: note: Assuming 'value' is false
           if (value)
               ^~~~~
   include/linux/bitops.h:217:2: note: Taking false branch
           if (value)
           ^
   include/linux/bitops.h:220:3: note: Calling 'generic___clear_bit'
                   __clear_bit(nr, addr);
                   ^
   include/asm-generic/bitops/non-atomic.h:11:21: note: expanded from macro '__clear_bit'
   #define __clear_bit arch___clear_bit
                       ^
   include/asm-generic/bitops/non-atomic.h:10:26: note: expanded from macro 'arch___clear_bit'
   #define arch___clear_bit generic___clear_bit
                            ^
   include/asm-generic/bitops/generic-non-atomic.h:41:5: note: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage
           *p &= ~mask;
           ~~ ^
   Suppressed 32 warnings (32 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.
   31 warnings generated.
   fs/proc/generic.c:440:2: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memcpy(ent->name, fn, qstr.len + 1);
           ^~~~~~
   fs/proc/generic.c:440:2: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
           memcpy(ent->name, fn, qstr.len + 1);
           ^~~~~~
   fs/proc/generic.c:470:4: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
                           strcpy((char*)ent->data,dest);
--
           ^      ~~~
   fs/sysfs/file.c:48:19: note: Assuming field 'show' is non-null
           if (WARN_ON_ONCE(!ops->show))
                            ^
   include/asm-generic/bug.h:110:25: note: expanded from macro 'WARN_ON_ONCE'
           int __ret_warn_on = !!(condition);                      \
                                  ^~~~~~~~~
   fs/sysfs/file.c:48:6: note: Taking false branch
           if (WARN_ON_ONCE(!ops->show))
               ^
   include/asm-generic/bug.h:111:2: note: expanded from macro 'WARN_ON_ONCE'
           if (unlikely(__ret_warn_on))                            \
           ^
   fs/sysfs/file.c:48:2: note: Taking false branch
           if (WARN_ON_ONCE(!ops->show))
           ^
   fs/sysfs/file.c:52:10: note: Calling 'seq_get_buf'
           count = seq_get_buf(sf, &buf);
                   ^~~~~~~~~~~~~~~~~~~~~
   include/linux/seq_file.h:66:9: note: Assuming field 'count' is <= field 'size'
           BUG_ON(m->count > m->size);
                  ^
   include/asm-generic/bug.h:71:45: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                               ^~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   include/linux/seq_file.h:66:2: note: Taking false branch
           BUG_ON(m->count > m->size);
           ^
   include/asm-generic/bug.h:71:32: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                  ^
   include/linux/seq_file.h:66:2: note: Loop condition is false.  Exiting loop
           BUG_ON(m->count > m->size);
           ^
   include/asm-generic/bug.h:71:27: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                             ^
   include/linux/seq_file.h:67:6: note: Assuming field 'count' is >= field 'size'
           if (m->count < m->size)
               ^~~~~~~~~~~~~~~~~~
   include/linux/seq_file.h:67:2: note: Taking false branch
           if (m->count < m->size)
           ^
   include/linux/seq_file.h:70:3: note: Null pointer value stored to 'buf'
                   *bufp = NULL;
                   ^~~~~~~~~~~~
   fs/sysfs/file.c:52:10: note: Returning from 'seq_get_buf'
           count = seq_get_buf(sf, &buf);
                   ^~~~~~~~~~~~~~~~~~~~~
   fs/sysfs/file.c:53:6: note: Assuming the condition is false
           if (count < PAGE_SIZE) {
               ^~~~~~~~~~~~~~~~~
   fs/sysfs/file.c:53:2: note: Taking false branch
           if (count < PAGE_SIZE) {
           ^
   fs/sysfs/file.c:57:2: note: Null pointer passed as 1st argument to memory set function
           memset(buf, 0, PAGE_SIZE);
           ^      ~~~
   fs/sysfs/file.c:121:3: warning: Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memmove_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   memmove(buf, buf + pos, len);
                   ^~~~~~~
   fs/sysfs/file.c:121:3: note: Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memmove_s' in case of C11
                   memmove(buf, buf + pos, len);
                   ^~~~~~~
   Suppressed 29 warnings (29 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.
   46 warnings generated.
   Suppressed 46 warnings (45 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.
   44 warnings generated.
   Suppressed 44 warnings (44 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.
   45 warnings generated.
   mm/debug.c:262:3: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   memset(page, PAGE_POISON_PATTERN, size);
                   ^~~~~~
   mm/debug.c:262:3: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
                   memset(page, PAGE_POISON_PATTERN, size);
                   ^~~~~~
   Suppressed 44 warnings (44 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.
   45 warnings generated.
   mm/gup.c:711:2: warning: Value stored to 'page' is never read [clang-analyzer-deadcode.DeadStores]
           page = follow_trans_huge_pmd(vma, address, pmd, flags);
           ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/gup.c:711:2: note: Value stored to 'page' is never read
           page = follow_trans_huge_pmd(vma, address, pmd, flags);
           ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 44 warnings (44 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.
   48 warnings generated.
   Suppressed 48 warnings (48 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.
   44 warnings generated.
   Suppressed 44 warnings (44 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.
   57 warnings generated.
>> include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^
   mm/memory.c:3723:2: note: Taking false branch
           if (!pte_unmap_same(vmf))
           ^
   mm/memory.c:3727:2: note: Taking false branch
           if (unlikely(non_swap_entry(entry))) {
           ^
   mm/memory.c:3752:15: note: Assuming 'si' is non-null
           if (unlikely(!si))
                        ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   mm/memory.c:3752:2: note: Taking false branch
           if (unlikely(!si))
           ^
   mm/memory.c:3758:6: note: Assuming 'page' is non-null
           if (!page) {
               ^~~~~
   mm/memory.c:3758:2: note: Taking false branch
           if (!page) {
           ^
   mm/memory.c:3809:9: note: Taking false branch
           } else if (PageHWPoison(page)) {
                  ^
   mm/memory.c:3820:7: note: 'locked' is 1
           if (!locked) {
                ^~~~~~
   mm/memory.c:3820:2: note: Taking false branch
           if (!locked) {
           ^
   mm/memory.c:3825:6: note: 'swapcache' is non-null
           if (swapcache) {
               ^~~~~~~~~
   mm/memory.c:3825:2: note: Taking true branch
           if (swapcache) {
           ^
   mm/memory.c:3833:16: note: Assuming the condition is false
                   if (unlikely(!PageSwapCache(page) ||
                                ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   mm/memory.c:3833:16: note: Left side of '||' is false
                   if (unlikely(!PageSwapCache(page) ||
                                ^
   mm/memory.c:3834:9: note: Assuming field 'private' is equal to field 'val'
                                page_private(page) != entry.val))
                                ^
   include/linux/mm_types.h:328:29: note: expanded from macro 'page_private'
   #define page_private(page)              ((page)->private)
                                           ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   mm/memory.c:3833:3: note: Taking false branch
                   if (unlikely(!PageSwapCache(page) ||
                   ^
   mm/memory.c:3843:17: note: 'page' is non-null
                   if (unlikely(!page)) {
                                 ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   mm/memory.c:3843:3: note: Taking false branch
                   if (unlikely(!page)) {
                   ^
   mm/memory.c:3855:8: note: Assuming the condition is true
                   if ((vmf->flags & FAULT_FLAG_WRITE) && page == swapcache &&
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/memory.c:3855:7: note: Left side of '&&' is true
                   if ((vmf->flags & FAULT_FLAG_WRITE) && page == swapcache &&
                       ^
   mm/memory.c:3855:42: note: 'page' is equal to 'swapcache'
                   if ((vmf->flags & FAULT_FLAG_WRITE) && page == swapcache &&
                                                          ^~~~
   mm/memory.c:3855:7: note: Left side of '&&' is true
                   if ((vmf->flags & FAULT_FLAG_WRITE) && page == swapcache &&
                       ^
   mm/memory.c:3855:7: note: Left side of '&&' is true
   mm/memory.c:3856:25: note: Assuming the condition is false
                       !PageKsm(page) && !PageLRU(page))
                                         ^~~~~~~~~~~~~~
   mm/memory.c:3855:3: note: Taking false branch
                   if ((vmf->flags & FAULT_FLAG_WRITE) && page == swapcache &&
                   ^
   mm/memory.c:3867:2: note: Taking false branch
           if (unlikely(!pte_same(*vmf->pte, vmf->orig_pte)))
           ^
   mm/memory.c:3870:2: note: Taking false branch
           if (unlikely(!PageUptodate(page))) {
           ^
   mm/memory.c:3883:9: note: Assuming the condition is false
           BUG_ON(!PageAnon(page) && PageMappedToDisk(page));
                  ^
   include/asm-generic/bug.h:71:45: note: expanded from macro 'BUG_ON'
   #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
                                               ^~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
--
                                           ^
   include/linux/percpu-defs.h:458:2: note: expanded from macro '__this_cpu_add'
           raw_cpu_add(pcp, val);                                          \
           ^
   include/linux/percpu-defs.h:422:32: note: expanded from macro 'raw_cpu_add'
   #define raw_cpu_add(pcp, val)           __pcpu_size_call(raw_cpu_add_, pcp, val)
                                           ^
   note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
   note: expanded from here
   include/asm-generic/percpu.h:227:34: note: expanded from macro 'raw_cpu_add_4'
   #define raw_cpu_add_4(pcp, val)         raw_cpu_generic_to_op(pcp, val, +=)
                                           ^
   include/asm-generic/percpu.h:70:48: note: expanded from macro 'raw_cpu_generic_to_op'
   #define raw_cpu_generic_to_op(pcp, val, op)                             \
                                                                           ^
   kernel/rcu/rcutorture.c:1706:2: note:  Execution continues on line 1706
           __this_cpu_inc(rcu_torture_batch[completed]);
           ^
   include/linux/percpu-defs.h:497:30: note: expanded from macro '__this_cpu_inc'
   #define __this_cpu_inc(pcp)             __this_cpu_add(pcp, 1)
                                           ^
   include/linux/percpu-defs.h:458:2: note: expanded from macro '__this_cpu_add'
           raw_cpu_add(pcp, val);                                          \
           ^
   include/linux/percpu-defs.h:422:32: note: expanded from macro 'raw_cpu_add'
   #define raw_cpu_add(pcp, val)           __pcpu_size_call(raw_cpu_add_, pcp, val)
                                           ^
   include/linux/percpu-defs.h:379:42: note: expanded from macro '__pcpu_size_call'
                   case 4: stem##4(variable, __VA_ARGS__);break;           \
                                                          ^
   kernel/rcu/rcutorture.c:1706:2: note: Loop condition is false.  Exiting loop
           __this_cpu_inc(rcu_torture_batch[completed]);
           ^
   include/linux/percpu-defs.h:497:30: note: expanded from macro '__this_cpu_inc'
   #define __this_cpu_inc(pcp)             __this_cpu_add(pcp, 1)
                                           ^
   include/linux/percpu-defs.h:458:2: note: expanded from macro '__this_cpu_add'
           raw_cpu_add(pcp, val);                                          \
           ^
   include/linux/percpu-defs.h:422:32: note: expanded from macro 'raw_cpu_add'
   #define raw_cpu_add(pcp, val)           __pcpu_size_call(raw_cpu_add_, pcp, val)
                                           ^
   include/linux/percpu-defs.h:373:50: note: expanded from macro '__pcpu_size_call'
   #define __pcpu_size_call(stem, variable, ...)                           \
                                                                           ^
   kernel/rcu/rcutorture.c:1707:2: note: Taking false branch
           preempt_enable();
           ^
   include/linux/preempt.h:221:2: note: expanded from macro 'preempt_enable'
           if (unlikely(preempt_count_dec_and_test())) \
           ^
   kernel/rcu/rcutorture.c:1707:2: note: Loop condition is false.  Exiting loop
           preempt_enable();
           ^
   include/linux/preempt.h:218:26: note: expanded from macro 'preempt_enable'
   #define preempt_enable() \
                            ^
   kernel/rcu/rcutorture.c:1708:6: note: Assuming field 'get_gp_state' is non-null
           if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
               ^~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:1708:6: note: Left side of '&&' is true
   kernel/rcu/rcutorture.c:1708:31: note: Assuming field 'poll_gp_state' is non-null
           if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
                                        ^~~~~~~~~~~~~~~~~~~~~~
   kernel/rcu/rcutorture.c:1708:2: note: Taking true branch
           if (cur_ops->get_gp_state && cur_ops->poll_gp_state)
           ^
   kernel/rcu/rcutorture.c:1709:13: note: 1st function call argument is an uninitialized value
                   WARN_ONCE(cur_ops->poll_gp_state(cookie),
                             ^
   include/asm-generic/bug.h:151:18: note: expanded from macro 'WARN_ONCE'
           DO_ONCE_LITE_IF(condition, WARN, 1, format)
                           ^~~~~~~~~
   include/linux/once_lite.h:15:27: note: expanded from macro 'DO_ONCE_LITE_IF'
                   bool __ret_do_once = !!(condition);                     \
                                           ^~~~~~~~~
   kernel/rcu/rcutorture.c:2908:4: warning: Value stored to 'errexit' is never read [clang-analyzer-deadcode.DeadStores]
                           errexit = true;
                           ^         ~~~~
   kernel/rcu/rcutorture.c:2908:4: note: Value stored to 'errexit' is never read
                           errexit = true;
                           ^         ~~~~
   Suppressed 33 warnings (33 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.
   31 warnings generated.
   Suppressed 31 warnings (31 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.
   33 warnings generated.
   drivers/tty/serial/rda-uart.c:212:2: warning: Value stored to 'val' is never read [clang-analyzer-deadcode.DeadStores]
           val = rda_uart_read(port, RDA_UART_RXTX_BUFFER);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/tty/serial/rda-uart.c:212:2: note: Value stored to 'val' is never read
           val = rda_uart_read(port, RDA_UART_RXTX_BUFFER);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 32 warnings (32 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.
   32 warnings generated.
   Suppressed 32 warnings (32 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.
   34 warnings generated.
>> include/asm-generic/bitops/generic-non-atomic.h:32:6: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
           *p  |= mask;
               ^
   drivers/tty/serial/serial_mctrl_gpio.c:52:6: note: Assuming 'gpios' is not equal to NULL
           if (gpios == NULL)
               ^~~~~~~~~~~~~
   drivers/tty/serial/serial_mctrl_gpio.c:52:2: note: Taking false branch
           if (gpios == NULL)
           ^
   drivers/tty/serial/serial_mctrl_gpio.c:55:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < UART_GPIO_MAX; i++)
           ^
   drivers/tty/serial/serial_mctrl_gpio.c:56:7: note: Assuming the condition is true
                   if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
                       ^~~~~~~~~~~~~~
   drivers/tty/serial/serial_mctrl_gpio.c:56:7: note: Left side of '&&' is true
   drivers/tty/serial/serial_mctrl_gpio.c:56:25: note: Assuming the condition is true
                   if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/tty/serial/serial_mctrl_gpio.c:56:3: note: Taking true branch
                   if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
                   ^
   drivers/tty/serial/serial_mctrl_gpio.c:58:4: note: Calling '__assign_bit'
                           __assign_bit(count, values,
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitops.h:217:6: note: Assuming 'value' is true
           if (value)
               ^~~~~
   include/linux/bitops.h:217:2: note: Taking true branch
           if (value)
           ^
   include/linux/bitops.h:218:3: note: Calling 'generic___set_bit'
                   __set_bit(nr, addr);
                   ^
   include/asm-generic/bitops/non-atomic.h:8:19: note: expanded from macro '__set_bit'
   #define __set_bit arch___set_bit
                     ^
   include/asm-generic/bitops/non-atomic.h:7:24: note: expanded from macro 'arch___set_bit'
   #define arch___set_bit generic___set_bit
                          ^
   include/asm-generic/bitops/generic-non-atomic.h:32:6: note: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage
           *p  |= mask;
           ~~  ^
   include/asm-generic/bitops/generic-non-atomic.h:41:5: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage [clang-analyzer-core.uninitialized.Assign]
           *p &= ~mask;
              ^
   drivers/tty/serial/serial_mctrl_gpio.c:52:6: note: Assuming 'gpios' is not equal to NULL
           if (gpios == NULL)
               ^~~~~~~~~~~~~
   drivers/tty/serial/serial_mctrl_gpio.c:52:2: note: Taking false branch
           if (gpios == NULL)
           ^
   drivers/tty/serial/serial_mctrl_gpio.c:55:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < UART_GPIO_MAX; i++)
           ^
   drivers/tty/serial/serial_mctrl_gpio.c:56:7: note: Assuming the condition is true
                   if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
                       ^~~~~~~~~~~~~~
   drivers/tty/serial/serial_mctrl_gpio.c:56:7: note: Left side of '&&' is true
   drivers/tty/serial/serial_mctrl_gpio.c:56:25: note: Assuming the condition is true
                   if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/tty/serial/serial_mctrl_gpio.c:56:3: note: Taking true branch
                   if (gpios->gpio[i] && mctrl_gpio_flags_is_dir_out(i)) {
                   ^
   drivers/tty/serial/serial_mctrl_gpio.c:58:4: note: Calling '__assign_bit'
                           __assign_bit(count, values,
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/bitops.h:217:6: note: Assuming 'value' is false
           if (value)
               ^~~~~
   include/linux/bitops.h:217:2: note: Taking false branch
           if (value)
           ^
   include/linux/bitops.h:220:3: note: Calling 'generic___clear_bit'
                   __clear_bit(nr, addr);
                   ^
   include/asm-generic/bitops/non-atomic.h:11:21: note: expanded from macro '__clear_bit'
   #define __clear_bit arch___clear_bit
                       ^
   include/asm-generic/bitops/non-atomic.h:10:26: note: expanded from macro 'arch___clear_bit'
   #define arch___clear_bit generic___clear_bit
                            ^
   include/asm-generic/bitops/generic-non-atomic.h:41:5: note: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage
           *p &= ~mask;
           ~~ ^
   Suppressed 32 warnings (32 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.
   45 warnings generated.
   Suppressed 45 warnings (44 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.
   44 warnings generated.
   Suppressed 44 warnings (44 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.
   44 warnings generated.
   Suppressed 44 warnings (44 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.
   44 warnings generated.
   Suppressed 44 warnings (44 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.
   44 warnings generated.
--
           ^
   drivers/hwmon/pmbus/zl6100.c:106:3: note: The value -1 is assigned to 'exponent'
                   exponent--;
                   ^~~~~~~~~~
   drivers/hwmon/pmbus/zl6100.c:105:9: note: Assuming the condition is false
           while (val < MIN_MANTISSA && exponent > -15) {
                  ^~~~~~~~~~~~~~~~~~
   drivers/hwmon/pmbus/zl6100.c:105:28: note: Left side of '&&' is false
           while (val < MIN_MANTISSA && exponent > -15) {
                                     ^
   drivers/hwmon/pmbus/zl6100.c:111:13: note: Left side of '||' is false
           mantissa = DIV_ROUND_CLOSEST(val, 1000);
                      ^
   include/linux/math.h:90:3: note: expanded from macro 'DIV_ROUND_CLOSEST'
           (((typeof(x))-1) > 0 ||                         \
            ^
   drivers/hwmon/pmbus/zl6100.c:111:13: note: Left side of '||' is false
           mantissa = DIV_ROUND_CLOSEST(val, 1000);
                      ^
   include/linux/math.h:90:3: note: expanded from macro 'DIV_ROUND_CLOSEST'
           (((typeof(x))-1) > 0 ||                         \
            ^
   drivers/hwmon/pmbus/zl6100.c:111:13: note: '__x' is > 0
           mantissa = DIV_ROUND_CLOSEST(val, 1000);
                      ^
   include/linux/math.h:92:5: note: expanded from macro 'DIV_ROUND_CLOSEST'
            (((__x) > 0) == ((__d) > 0))) ?                \
              ^~~~~
   drivers/hwmon/pmbus/zl6100.c:111:13: note: '?' condition is true
           mantissa = DIV_ROUND_CLOSEST(val, 1000);
                      ^
   include/linux/math.h:90:2: note: expanded from macro 'DIV_ROUND_CLOSEST'
           (((typeof(x))-1) > 0 ||                         \
           ^
   drivers/hwmon/pmbus/zl6100.c:114:6: note: Assuming 'mantissa' is <= 1023
           if (mantissa > 0x3ff)
               ^~~~~~~~~~~~~~~~
   drivers/hwmon/pmbus/zl6100.c:114:2: note: Taking false branch
           if (mantissa > 0x3ff)
           ^
   drivers/hwmon/pmbus/zl6100.c:118:6: note: 'negative' is false
           if (negative)
               ^~~~~~~~
   drivers/hwmon/pmbus/zl6100.c:118:2: note: Taking false branch
           if (negative)
           ^
   drivers/hwmon/pmbus/zl6100.c:122:41: note: The result of the left shift is undefined because the left operand is negative
           return (mantissa & 0x7ff) | ((exponent << 11) & 0xf800);
                                         ~~~~~~~~ ^
   Suppressed 44 warnings (44 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.
   45 warnings generated.
   drivers/input/misc/kxtj9.c:299:9: warning: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           return sprintf(buf, "%d\n", tj9->last_poll_interval);
                  ^~~~~~~
   drivers/input/misc/kxtj9.c:299:9: note: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11
           return sprintf(buf, "%d\n", tj9->last_poll_interval);
                  ^~~~~~~
   Suppressed 44 warnings (44 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.
   28 warnings generated.
   Suppressed 28 warnings (28 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.
   32 warnings generated.
   Suppressed 32 warnings (32 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.
   31 warnings generated.
   Suppressed 31 warnings (31 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.
   29 warnings generated.
   drivers/input/misc/uinput.c:956:4: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                           memset(&ff_up.old, 0, sizeof(struct ff_effect));
                           ^~~~~~
   drivers/input/misc/uinput.c:956:4: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
                           memset(&ff_up.old, 0, sizeof(struct ff_effect));
                           ^~~~~~
   Suppressed 28 warnings (28 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.
   28 warnings generated.
   Suppressed 28 warnings (28 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.
   28 warnings generated.
   Suppressed 28 warnings (28 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.
   28 warnings generated.
   Suppressed 28 warnings (28 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.
   35 warnings generated.
   drivers/input/joydev.c:465:2: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memcpy(joydev->abspam, abspam, len);
           ^~~~~~
   drivers/input/joydev.c:465:2: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
           memcpy(joydev->abspam, abspam, len);
           ^~~~~~
   drivers/input/joydev.c:499:2: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memcpy(joydev->keypam, keypam, len);
           ^~~~~~
   drivers/input/joydev.c:499:2: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
           memcpy(joydev->keypam, keypam, len);
           ^~~~~~
>> include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^
   drivers/input/joydev.c:919:6: note: Assuming 'minor' is >= 0
           if (minor < 0) {
               ^~~~~~~~~
   drivers/input/joydev.c:919:2: note: Taking false branch
           if (minor < 0) {
           ^
   drivers/input/joydev.c:925:11: note: Calling 'kzalloc'
           joydev = kzalloc(sizeof(struct joydev), GFP_KERNEL);
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:733:9: note: Calling 'kmalloc'
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:588:2: note: Taking false branch
           if (__builtin_constant_p(size)) {
           ^
   include/linux/slab.h:605:2: note: Returning pointer, which participates in a condition later
           return __kmalloc(size, flags);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:733:9: note: Returning from 'kmalloc'
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:733:2: note: Returning pointer, which participates in a condition later
           return kmalloc(size, flags | __GFP_ZERO);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/input/joydev.c:925:11: note: Returning from 'kzalloc'
           joydev = kzalloc(sizeof(struct joydev), GFP_KERNEL);
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/input/joydev.c:926:6: note: Assuming 'joydev' is non-null
           if (!joydev) {
               ^~~~~~~
   drivers/input/joydev.c:926:2: note: Taking false branch
           if (!joydev) {
           ^
   drivers/input/joydev.c:932:2: note: Loop condition is false.  Exiting loop
           spin_lock_init(&joydev->client_lock);
           ^
   include/linux/spinlock.h:329:35: note: expanded from macro 'spin_lock_init'
   # define spin_lock_init(lock)                                   \
                                                                   ^
   drivers/input/joydev.c:933:2: note: Loop condition is false.  Exiting loop
           mutex_init(&joydev->mutex);
           ^
   include/linux/mutex.h:101:32: note: expanded from macro 'mutex_init'
   #define mutex_init(mutex)                                               \
                                                                           ^
   drivers/input/joydev.c:934:2: note: Loop condition is false.  Exiting loop
           init_waitqueue_head(&joydev->wait);
           ^
   include/linux/wait.h:67:2: note: expanded from macro 'init_waitqueue_head'
           do {                                                                    \
           ^
   drivers/input/joydev.c:939:6: note: Assuming the condition is false
           if (dev_no < JOYDEV_MINOR_BASE + JOYDEV_MINORS)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/input/joydev.c:939:2: note: Taking false branch
           if (dev_no < JOYDEV_MINOR_BASE + JOYDEV_MINORS)
           ^
   drivers/input/joydev.c:948:2: note: Assuming the condition is false
           for_each_set_bit(i, dev->absbit, ABS_CNT) {
           ^
   include/linux/find.h:284:7: note: expanded from macro 'for_each_set_bit'
                (bit) < (size);                                    \
                ^~~~~~~~~~~~~~
   drivers/input/joydev.c:948:2: note: Loop condition is false. Execution continues on line 954
           for_each_set_bit(i, dev->absbit, ABS_CNT) {
           ^
   include/linux/find.h:283:2: note: expanded from macro 'for_each_set_bit'
           for ((bit) = find_next_bit((addr), (size), 0);          \
           ^
   drivers/input/joydev.c:954:2: note: Loop condition is true.  Entering loop body
           for (i = BTN_JOYSTICK - BTN_MISC; i < KEY_MAX - BTN_MISC + 1; i++)
           ^
   drivers/input/joydev.c:955:30: note: Passing null pointer value via 2nd parameter 'addr'
                   if (test_bit(i + BTN_MISC, dev->keybit)) {
                                              ^~~~~~~~~~~
   drivers/input/joydev.c:955:7: note: Calling 'generic_test_bit'
                   if (test_bit(i + BTN_MISC, dev->keybit)) {
                       ^
   include/asm-generic/bitops/non-atomic.h:26:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   include/asm-generic/bitops/non-atomic.h:25:23: note: expanded from macro 'arch_test_bit'
   #define arch_test_bit generic_test_bit
                         ^
   include/asm-generic/bitops/generic-non-atomic.h:127:16: note: Array access (from variable 'addr') results in a null pointer dereference
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^~~~
   Suppressed 32 warnings (32 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.
   48 warnings generated.
   drivers/media/i2c/saa7110.c:93:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   memcpy(decoder->reg + reg, data + 1, len - 1);
                   ^~~~~~
   drivers/media/i2c/saa7110.c:93:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
                   memcpy(decoder->reg + reg, data + 1, len - 1);
                   ^~~~~~
   Suppressed 47 warnings (47 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.
--
                               ^~~~~~~~~~~~~~~~~~~~
   drivers/md/raid1.c:1421:4: note: Taking false branch
                           if (i < conf->raid_disks)
                           ^
   drivers/md/raid1.c:1423:4: note:  Execution continues on line 1403
                           continue;
                           ^
   drivers/md/raid1.c:1403:15: note: Assuming 'i' is >= 'disks'
           for (i = 0;  i < disks; i++) {
                        ^~~~~~~~~
   drivers/md/raid1.c:1403:2: note: Loop condition is false. Execution continues on line 1470
           for (i = 0;  i < disks; i++) {
           ^
   drivers/md/raid1.c:1472:2: note: Taking false branch
           if (unlikely(blocked_rdev)) {
           ^
   drivers/md/raid1.c:1498:6: note: 'write_behind' is false
           if (write_behind && bitmap)
               ^~~~~~~~~~~~
   drivers/md/raid1.c:1498:19: note: Left side of '&&' is false
           if (write_behind && bitmap)
                            ^
   drivers/md/raid1.c:1501:6: note: Assuming the condition is false
           if (max_sectors < bio_sectors(bio)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid1.c:1501:2: note: Taking false branch
           if (max_sectors < bio_sectors(bio)) {
           ^
   drivers/md/raid1.c:1511:6: note: Assuming the condition is false
           if (blk_queue_io_stat(bio->bi_bdev->bd_disk->queue))
               ^
   include/linux/blkdev.h:598:30: note: expanded from macro 'blk_queue_io_stat'
   #define blk_queue_io_stat(q)    test_bit(QUEUE_FLAG_IO_STAT, &(q)->queue_flags)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/asm-generic/bitops/non-atomic.h:26:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   include/asm-generic/bitops/non-atomic.h:25:23: note: expanded from macro 'arch_test_bit'
   #define arch_test_bit generic_test_bit
                         ^
   drivers/md/raid1.c:1511:2: note: Taking false branch
           if (blk_queue_io_stat(bio->bi_bdev->bd_disk->queue))
           ^
   drivers/md/raid1.c:1514:2: note: Calling 'atomic_set'
           atomic_set(&r1_bio->behind_remaining, 0);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/atomic/atomic-instrumented.h:42:2: note: Assigning value, which participates in a condition later
           arch_atomic_set(v, i);
           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/atomic/atomic-instrumented.h:42:2: note: Value assigned to field 'behind_master_bio', which participates in a condition later
           arch_atomic_set(v, i);
           ^~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid1.c:1514:2: note: Returning from 'atomic_set'
           atomic_set(&r1_bio->behind_remaining, 0);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid1.c:1518:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < disks; i++) {
           ^
   drivers/md/raid1.c:1520:3: note: 'rdev' initialized to a null pointer value
                   struct md_rdev *rdev = conf->mirrors[i].rdev;
                   ^~~~~~~~~~~~~~~~~~~~
   drivers/md/raid1.c:1521:7: note: Assuming the condition is false
                   if (!r1_bio->bios[i])
                       ^~~~~~~~~~~~~~~~
   drivers/md/raid1.c:1521:3: note: Taking false branch
                   if (!r1_bio->bios[i])
                   ^
   drivers/md/raid1.c:1524:7: note: 'first_clone' is 1
                   if (first_clone) {
                       ^~~~~~~~~~~
   drivers/md/raid1.c:1524:3: note: Taking true branch
                   if (first_clone) {
                   ^
   drivers/md/raid1.c:1529:8: note: Assuming 'bitmap' is null
                           if (bitmap &&
                               ^~~~~~
   drivers/md/raid1.c:1529:15: note: Left side of '&&' is false
                           if (bitmap &&
                                      ^
   drivers/md/raid1.c:1542:7: note: Assuming field 'behind_master_bio' is null
                   if (r1_bio->behind_master_bio) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid1.c:1542:3: note: Taking false branch
                   if (r1_bio->behind_master_bio) {
                   ^
   drivers/md/raid1.c:1551:27: note: Access to field 'bdev' results in a dereference of a null pointer (loaded from variable 'rdev')
                           mbio = bio_alloc_clone(rdev->bdev, bio, GFP_NOIO,
                                                  ^~~~
   drivers/md/raid1.c:3265:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(&newpool, 0, sizeof(newpool));
           ^~~~~~
   drivers/md/raid1.c:3265:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(&newpool, 0, sizeof(newpool));
           ^~~~~~
   drivers/md/raid1.c:3266:2: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
           memset(&oldpool, 0, sizeof(oldpool));
           ^~~~~~
   drivers/md/raid1.c:3266:2: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11
           memset(&oldpool, 0, sizeof(oldpool));
           ^~~~~~
>> include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^
   drivers/md/raid1.c:1352:32: note: Left side of '&&' is false
           if (mddev_is_clustered(mddev) &&
                                         ^
   drivers/md/raid1.c:1378:6: note: Assuming the condition is false
           if (!wait_barrier(conf, bio->bi_iter.bi_sector,
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid1.c:1378:2: note: Taking false branch
           if (!wait_barrier(conf, bio->bi_iter.bi_sector,
           ^
   drivers/md/raid1.c:1403:15: note: Assuming 'i' is < 'disks'
           for (i = 0;  i < disks; i++) {
                        ^~~~~~~~~
   drivers/md/raid1.c:1403:2: note: Loop condition is true.  Entering loop body
           for (i = 0;  i < disks; i++) {
           ^
   drivers/md/raid1.c:1404:26: note: Left side of '||' is false
                   struct md_rdev *rdev = rcu_dereference(conf->mirrors[i].rdev);
                                          ^
   include/linux/rcupdate.h:604:28: note: expanded from macro 'rcu_dereference'
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^
   include/linux/rcupdate.h:532:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
           ^
   include/linux/rcupdate.h:392:43: note: expanded from macro '__rcu_dereference_check'
           typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
                                                    ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
                              ^
   include/linux/compiler_types.h:319:3: note: expanded from macro '__native_word'
           (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
            ^
   drivers/md/raid1.c:1404:26: note: Left side of '||' is false
                   struct md_rdev *rdev = rcu_dereference(conf->mirrors[i].rdev);
                                          ^
   include/linux/rcupdate.h:604:28: note: expanded from macro 'rcu_dereference'
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^
   include/linux/rcupdate.h:532:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
           ^
   include/linux/rcupdate.h:392:43: note: expanded from macro '__rcu_dereference_check'
           typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
                                                    ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
                              ^
   include/linux/compiler_types.h:319:3: note: expanded from macro '__native_word'
           (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || \
            ^
   drivers/md/raid1.c:1404:26: note: Left side of '||' is true
                   struct md_rdev *rdev = rcu_dereference(conf->mirrors[i].rdev);
                                          ^
   include/linux/rcupdate.h:604:28: note: expanded from macro 'rcu_dereference'
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^
   include/linux/rcupdate.h:532:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
           ^
   include/linux/rcupdate.h:392:43: note: expanded from macro '__rcu_dereference_check'
           typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
                                                    ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:21: note: expanded from macro 'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long),  \
                              ^
   include/linux/compiler_types.h:320:28: note: expanded from macro '__native_word'
            sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long))
                                     ^
   drivers/md/raid1.c:1404:26: note: Taking false branch
                   struct md_rdev *rdev = rcu_dereference(conf->mirrors[i].rdev);
                                          ^
   include/linux/rcupdate.h:604:28: note: expanded from macro 'rcu_dereference'
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^
   include/linux/rcupdate.h:532:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
           ^
   include/linux/rcupdate.h:392:43: note: expanded from macro '__rcu_dereference_check'
           typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
                                                    ^
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
   include/linux/compiler_types.h:352:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:340:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:332:3: note: expanded from macro '__compiletime_assert'
--
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^
   include/linux/rcupdate.h:532:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
           ^
   include/linux/rcupdate.h:392:43: note: expanded from macro '__rcu_dereference_check'
           typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
                                                    ^
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
   include/linux/compiler_types.h:352:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:340:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:324:2: note: expanded from macro '__compiletime_assert'
           do {                                                            \
           ^
   drivers/md/raid10.c:3709:11: note: Left side of '||' is false
                           rdev = rcu_dereference(conf->mirrors[d].replacement);
                                  ^
   include/linux/rcupdate.h:604:28: note: expanded from macro 'rcu_dereference'
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^
   include/linux/rcupdate.h:533:5: note: expanded from macro 'rcu_dereference_check'
                                   (c) || rcu_read_lock_held(), __rcu)
                                   ^
   drivers/md/raid10.c:3709:11: note: Assuming the condition is false
                           rdev = rcu_dereference(conf->mirrors[d].replacement);
                                  ^
   include/linux/rcupdate.h:604:28: note: expanded from macro 'rcu_dereference'
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/rcupdate.h:532:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/rcupdate.h:393:19: note: expanded from macro '__rcu_dereference_check'
           RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_check() usage"); \
           ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/rcupdate.h:320:8: note: expanded from macro 'RCU_LOCKDEP_WARN'
                   if ((c) && debug_lockdep_rcu_enabled() && !__warned) {  \
                        ^
   drivers/md/raid10.c:3709:11: note: Left side of '&&' is false
                           rdev = rcu_dereference(conf->mirrors[d].replacement);
                                  ^
   include/linux/rcupdate.h:604:28: note: expanded from macro 'rcu_dereference'
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^
   include/linux/rcupdate.h:532:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
           ^
   include/linux/rcupdate.h:393:2: note: expanded from macro '__rcu_dereference_check'
           RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_check() usage"); \
           ^
   include/linux/rcupdate.h:320:11: note: expanded from macro 'RCU_LOCKDEP_WARN'
                   if ((c) && debug_lockdep_rcu_enabled() && !__warned) {  \
                           ^
   drivers/md/raid10.c:3709:11: note: Loop condition is false.  Exiting loop
                           rdev = rcu_dereference(conf->mirrors[d].replacement);
                                  ^
   include/linux/rcupdate.h:604:28: note: expanded from macro 'rcu_dereference'
   #define rcu_dereference(p) rcu_dereference_check(p, 0)
                              ^
   include/linux/rcupdate.h:532:2: note: expanded from macro 'rcu_dereference_check'
           __rcu_dereference_check((p), __UNIQUE_ID(rcu), \
           ^
   include/linux/rcupdate.h:393:2: note: expanded from macro '__rcu_dereference_check'
           RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_check() usage"); \
           ^
   include/linux/rcupdate.h:318:2: note: expanded from macro 'RCU_LOCKDEP_WARN'
           do {                                                            \
           ^
   drivers/md/raid10.c:3710:8: note: Assuming 'rdev' is not equal to NULL
                           if (rdev == NULL || test_bit(Faulty, &rdev->flags)) {
                               ^~~~~~~~~~~~
   drivers/md/raid10.c:3710:8: note: Left side of '||' is false
   drivers/md/raid10.c:3710:24: note: Assuming the condition is false
                           if (rdev == NULL || test_bit(Faulty, &rdev->flags)) {
                                               ^
   include/asm-generic/bitops/non-atomic.h:26:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   include/asm-generic/bitops/non-atomic.h:25:23: note: expanded from macro 'arch_test_bit'
   #define arch_test_bit generic_test_bit
                         ^
   drivers/md/raid10.c:3710:4: note: Taking false branch
                           if (rdev == NULL || test_bit(Faulty, &rdev->flags)) {
                           ^
   drivers/md/raid10.c:3717:4: note: Null pointer value stored to 'bio'
                           bio = r10_bio->devs[i].repl_bio;
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3718:19: note: Access to field 'bi_status' results in a dereference of a null pointer (loaded from variable 'bio')
                           bio->bi_status = BLK_STS_IOERR;
                           ~~~            ^
   drivers/md/raid10.c:4545:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
                   memcpy(conf->mirrors_new, conf->mirrors,
                   ^~~~~~
   drivers/md/raid10.c:4545:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11
                   memcpy(conf->mirrors_new, conf->mirrors,
                   ^~~~~~
>> include/asm-generic/bitops/generic-non-atomic.h:127:16: warning: Array access (from variable 'addr') results in a null pointer dereference [clang-analyzer-core.NullDereference]
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^
   drivers/md/raid10.c:3249:2: note: Taking true branch
           if (!mempool_initialized(&conf->r10buf_pool))
           ^
   drivers/md/raid10.c:3250:3: note: Taking false branch
                   if (init_resync(conf))
                   ^
   drivers/md/raid10.c:3257:6: note: Assuming field 'bitmap' is not equal to NULL
           if (mddev->bitmap == NULL &&
               ^~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3257:28: note: Left side of '&&' is false
           if (mddev->bitmap == NULL &&
                                     ^
   drivers/md/raid10.c:3270:6: note: Assuming the condition is true
           if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
               ^
   include/asm-generic/bitops/non-atomic.h:26:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   include/asm-generic/bitops/non-atomic.h:25:23: note: expanded from macro 'arch_test_bit'
   #define arch_test_bit generic_test_bit
                         ^
   drivers/md/raid10.c:3270:51: note: Left side of '||' is true
           if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
                                                            ^
   drivers/md/raid10.c:3273:6: note: Assuming 'sector_nr' is < 'max_sector'
           if (sector_nr >= max_sector) {
               ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3273:2: note: Taking false branch
           if (sector_nr >= max_sector) {
           ^
   drivers/md/raid10.c:3327:6: note: Assuming the condition is false
           if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
               ^
   include/asm-generic/bitops/non-atomic.h:26:18: note: expanded from macro 'test_bit'
   #define test_bit arch_test_bit
                    ^
   include/asm-generic/bitops/non-atomic.h:25:23: note: expanded from macro 'arch_test_bit'
   #define arch_test_bit generic_test_bit
                         ^
   drivers/md/raid10.c:3327:2: note: Taking false branch
           if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
           ^
   drivers/md/raid10.c:3330:6: note: Assuming 'chunks_skipped' is < field 'raid_disks'
           if (chunks_skipped >= conf->geo.raid_disks) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3330:2: note: Taking false branch
           if (chunks_skipped >= conf->geo.raid_disks) {
           ^
   drivers/md/raid10.c:3338:6: note: Assuming 'max_sector' is <= field 'resync_max'
           if (max_sector > mddev->resync_max)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3338:2: note: Taking false branch
           if (max_sector > mddev->resync_max)
           ^
   drivers/md/raid10.c:3344:6: note: Assuming field 'near_copies' is >= field 'raid_disks'
           if (conf->geo.near_copies < conf->geo.raid_disks &&
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3344:51: note: Left side of '&&' is false
           if (conf->geo.near_copies < conf->geo.raid_disks &&
                                                            ^
   drivers/md/raid10.c:3352:6: note: Assuming field 'nr_waiting' is 0
           if (conf->nr_waiting)
               ^~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3352:2: note: Taking false branch
           if (conf->nr_waiting)
           ^
   drivers/md/raid10.c:3371:2: note: Taking false branch
           if (!test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
           ^
   drivers/md/raid10.c:3640:32: note: Left side of '&&' is false
                                           mddev_is_clustered(mddev) &&
                                                                     ^
   drivers/md/raid10.c:3643:7: note: Assuming the condition is false
                   if (!md_bitmap_start_sync(mddev->bitmap, sector_nr,
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3644:39: note: Left side of '&&' is false
                                             &sync_blocks, mddev->degraded) &&
                                                                            ^
   drivers/md/raid10.c:3651:7: note: Assuming 'sync_blocks' is >= 'max_sync'
                   if (sync_blocks < max_sync)
                       ^~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3651:3: note: Taking false branch
                   if (sync_blocks < max_sync)
                   ^
   drivers/md/raid10.c:3667:15: note: Assuming 'i' is < field 'copies'
                   for (i = 0; i < conf->copies; i++) {
                               ^~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3667:3: note: Loop condition is true.  Entering loop body
                   for (i = 0; i < conf->copies; i++) {
                   ^
   drivers/md/raid10.c:3673:8: note: Assuming field 'repl_bio' is null
                           if (r10_bio->devs[i].repl_bio)
                               ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/md/raid10.c:3673:4: note: Taking false branch
                           if (r10_bio->devs[i].repl_bio)
                           ^
   drivers/md/raid10.c:3679:11: note: Left side of '||' is false
                           rdev = rcu_dereference(conf->mirrors[d].rdev);

vim +/addr +127 include/asm-generic/bitops/generic-non-atomic.h

b9944c14c86ab2a Alexander Lobakin 2022-05-07   11  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   12  /*
b9944c14c86ab2a Alexander Lobakin 2022-05-07   13   * Generic definitions for bit operations, should not be used in regular code
b9944c14c86ab2a Alexander Lobakin 2022-05-07   14   * directly.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   15   */
b9944c14c86ab2a Alexander Lobakin 2022-05-07   16  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   17  /**
b9944c14c86ab2a Alexander Lobakin 2022-05-07   18   * generic___set_bit - Set a bit in memory
b9944c14c86ab2a Alexander Lobakin 2022-05-07   19   * @nr: the bit to set
b9944c14c86ab2a Alexander Lobakin 2022-05-07   20   * @addr: the address to start counting from
b9944c14c86ab2a Alexander Lobakin 2022-05-07   21   *
b9944c14c86ab2a Alexander Lobakin 2022-05-07   22   * Unlike set_bit(), this function is non-atomic and may be reordered.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   23   * If it's called on the same region of memory simultaneously, the effect
b9944c14c86ab2a Alexander Lobakin 2022-05-07   24   * may be that only one operation succeeds.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   25   */
b9944c14c86ab2a Alexander Lobakin 2022-05-07   26  static __always_inline void
b9944c14c86ab2a Alexander Lobakin 2022-05-07   27  generic___set_bit(unsigned int nr, volatile unsigned long *addr)
b9944c14c86ab2a Alexander Lobakin 2022-05-07   28  {
b9944c14c86ab2a Alexander Lobakin 2022-05-07   29  	unsigned long mask = BIT_MASK(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   30  	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   31  
b9944c14c86ab2a Alexander Lobakin 2022-05-07  @32  	*p  |= mask;
b9944c14c86ab2a Alexander Lobakin 2022-05-07   33  }
b9944c14c86ab2a Alexander Lobakin 2022-05-07   34  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   35  static __always_inline void
b9944c14c86ab2a Alexander Lobakin 2022-05-07   36  generic___clear_bit(unsigned int nr, volatile unsigned long *addr)
b9944c14c86ab2a Alexander Lobakin 2022-05-07   37  {
b9944c14c86ab2a Alexander Lobakin 2022-05-07   38  	unsigned long mask = BIT_MASK(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   39  	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   40  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   41  	*p &= ~mask;
b9944c14c86ab2a Alexander Lobakin 2022-05-07   42  }
b9944c14c86ab2a Alexander Lobakin 2022-05-07   43  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   44  /**
b9944c14c86ab2a Alexander Lobakin 2022-05-07   45   * generic___change_bit - Toggle a bit in memory
b9944c14c86ab2a Alexander Lobakin 2022-05-07   46   * @nr: the bit to change
b9944c14c86ab2a Alexander Lobakin 2022-05-07   47   * @addr: the address to start counting from
b9944c14c86ab2a Alexander Lobakin 2022-05-07   48   *
b9944c14c86ab2a Alexander Lobakin 2022-05-07   49   * Unlike change_bit(), this function is non-atomic and may be reordered.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   50   * If it's called on the same region of memory simultaneously, the effect
b9944c14c86ab2a Alexander Lobakin 2022-05-07   51   * may be that only one operation succeeds.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   52   */
b9944c14c86ab2a Alexander Lobakin 2022-05-07   53  static __always_inline
b9944c14c86ab2a Alexander Lobakin 2022-05-07   54  void generic___change_bit(unsigned int nr, volatile unsigned long *addr)
b9944c14c86ab2a Alexander Lobakin 2022-05-07   55  {
b9944c14c86ab2a Alexander Lobakin 2022-05-07   56  	unsigned long mask = BIT_MASK(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   57  	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   58  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   59  	*p ^= mask;
b9944c14c86ab2a Alexander Lobakin 2022-05-07   60  }
b9944c14c86ab2a Alexander Lobakin 2022-05-07   61  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   62  /**
b9944c14c86ab2a Alexander Lobakin 2022-05-07   63   * generic___test_and_set_bit - Set a bit and return its old value
b9944c14c86ab2a Alexander Lobakin 2022-05-07   64   * @nr: Bit to set
b9944c14c86ab2a Alexander Lobakin 2022-05-07   65   * @addr: Address to count from
b9944c14c86ab2a Alexander Lobakin 2022-05-07   66   *
b9944c14c86ab2a Alexander Lobakin 2022-05-07   67   * This operation is non-atomic and can be reordered.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   68   * If two examples of this operation race, one can appear to succeed
b9944c14c86ab2a Alexander Lobakin 2022-05-07   69   * but actually fail.  You must protect multiple accesses with a lock.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   70   */
b9944c14c86ab2a Alexander Lobakin 2022-05-07   71  static __always_inline int
b9944c14c86ab2a Alexander Lobakin 2022-05-07   72  generic___test_and_set_bit(unsigned int nr, volatile unsigned long *addr)
b9944c14c86ab2a Alexander Lobakin 2022-05-07   73  {
b9944c14c86ab2a Alexander Lobakin 2022-05-07   74  	unsigned long mask = BIT_MASK(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   75  	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   76  	unsigned long old = *p;
b9944c14c86ab2a Alexander Lobakin 2022-05-07   77  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   78  	*p = old | mask;
b9944c14c86ab2a Alexander Lobakin 2022-05-07   79  	return (old & mask) != 0;
b9944c14c86ab2a Alexander Lobakin 2022-05-07   80  }
b9944c14c86ab2a Alexander Lobakin 2022-05-07   81  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   82  /**
b9944c14c86ab2a Alexander Lobakin 2022-05-07   83   * generic___test_and_clear_bit - Clear a bit and return its old value
b9944c14c86ab2a Alexander Lobakin 2022-05-07   84   * @nr: Bit to clear
b9944c14c86ab2a Alexander Lobakin 2022-05-07   85   * @addr: Address to count from
b9944c14c86ab2a Alexander Lobakin 2022-05-07   86   *
b9944c14c86ab2a Alexander Lobakin 2022-05-07   87   * This operation is non-atomic and can be reordered.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   88   * If two examples of this operation race, one can appear to succeed
b9944c14c86ab2a Alexander Lobakin 2022-05-07   89   * but actually fail.  You must protect multiple accesses with a lock.
b9944c14c86ab2a Alexander Lobakin 2022-05-07   90   */
b9944c14c86ab2a Alexander Lobakin 2022-05-07   91  static __always_inline int
b9944c14c86ab2a Alexander Lobakin 2022-05-07   92  generic___test_and_clear_bit(unsigned int nr, volatile unsigned long *addr)
b9944c14c86ab2a Alexander Lobakin 2022-05-07   93  {
b9944c14c86ab2a Alexander Lobakin 2022-05-07   94  	unsigned long mask = BIT_MASK(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   95  	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07   96  	unsigned long old = *p;
b9944c14c86ab2a Alexander Lobakin 2022-05-07   97  
b9944c14c86ab2a Alexander Lobakin 2022-05-07   98  	*p = old & ~mask;
b9944c14c86ab2a Alexander Lobakin 2022-05-07   99  	return (old & mask) != 0;
b9944c14c86ab2a Alexander Lobakin 2022-05-07  100  }
b9944c14c86ab2a Alexander Lobakin 2022-05-07  101  
b9944c14c86ab2a Alexander Lobakin 2022-05-07  102  /* WARNING: non atomic and it can be reordered! */
b9944c14c86ab2a Alexander Lobakin 2022-05-07  103  static __always_inline int
b9944c14c86ab2a Alexander Lobakin 2022-05-07  104  generic___test_and_change_bit(unsigned int nr, volatile unsigned long *addr)
b9944c14c86ab2a Alexander Lobakin 2022-05-07  105  {
b9944c14c86ab2a Alexander Lobakin 2022-05-07  106  	unsigned long mask = BIT_MASK(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07  107  	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
b9944c14c86ab2a Alexander Lobakin 2022-05-07  108  	unsigned long old = *p;
b9944c14c86ab2a Alexander Lobakin 2022-05-07  109  
b9944c14c86ab2a Alexander Lobakin 2022-05-07  110  	*p = old ^ mask;
b9944c14c86ab2a Alexander Lobakin 2022-05-07  111  	return (old & mask) != 0;
b9944c14c86ab2a Alexander Lobakin 2022-05-07  112  }
b9944c14c86ab2a Alexander Lobakin 2022-05-07  113  
b9944c14c86ab2a Alexander Lobakin 2022-05-07  114  /**
b9944c14c86ab2a Alexander Lobakin 2022-05-07  115   * generic_test_bit - Determine whether a bit is set
b9944c14c86ab2a Alexander Lobakin 2022-05-07  116   * @nr: bit number to test
b9944c14c86ab2a Alexander Lobakin 2022-05-07  117   * @addr: Address to start counting from
b9944c14c86ab2a Alexander Lobakin 2022-05-07  118   */
b9944c14c86ab2a Alexander Lobakin 2022-05-07  119  static __always_inline int
b9944c14c86ab2a Alexander Lobakin 2022-05-07  120  generic_test_bit(unsigned int nr, const volatile unsigned long *addr)
b9944c14c86ab2a Alexander Lobakin 2022-05-07  121  {
b9944c14c86ab2a Alexander Lobakin 2022-05-07  122  	/*
b9944c14c86ab2a Alexander Lobakin 2022-05-07  123  	 * Unlike the bitops with the '__' prefix above, this one *is* atomic,
b9944c14c86ab2a Alexander Lobakin 2022-05-07  124  	 * so `volatile` must always stay here with no cast-aways. See
b9944c14c86ab2a Alexander Lobakin 2022-05-07  125  	 * `Documentation/atomic_bitops.txt` for the details.
b9944c14c86ab2a Alexander Lobakin 2022-05-07  126  	 */
b9944c14c86ab2a Alexander Lobakin 2022-05-07 @127  	return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
b9944c14c86ab2a Alexander Lobakin 2022-05-07  128  }
b9944c14c86ab2a Alexander Lobakin 2022-05-07  129  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

                 reply	other threads:[~2022-06-19 14:24 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202206192259.xQdByQP6-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.