CC: [email protected]
CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Daniel Thompson <[email protected]>

tree:   https://git.linaro.org/people/daniel.thompson/linux.git 
clang-analyzer/initial_review
head:   ad6525bf355a301ca52b1dc3639fa340409c79b9
commit: ad6525bf355a301ca52b1dc3639fa340409c79b9 [7/7] [RFC] linux/err.h: 
Refactor IS_ERR_VALUE(x) to improve clang reasoning
:::::: branch date: 29 hours ago
:::::: commit date: 29 hours ago
config: arm-randconfig-c002-20220505 
(https://download.01.org/0day-ci/archive/20220506/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
5e004fb787698440a387750db7f8028e7cb14cfc)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        git remote add daniel-thompson 
https://git.linaro.org/people/daniel.thompson/linux.git
        git fetch --no-tags daniel-thompson clang-analyzer/initial_review
        git checkout ad6525bf355a301ca52b1dc3639fa340409c79b9
        # save the config file
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
                              ^
   mm/page-writeback.c:1652:11: note: Calling 'dirty_poll_interval'
                           intv = dirty_poll_interval(dirty, thresh);
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/page-writeback.c:1412:6: note: Assuming 'thresh' is > 'dirty'
           if (thresh > dirty)
               ^~~~~~~~~~~~~~
   mm/page-writeback.c:1412:2: note: Taking true branch
           if (thresh > dirty)
           ^
   mm/page-writeback.c:1413:18: note: '?' condition is false
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                                  ^
   include/linux/log2.h:158:2: note: expanded from macro 'ilog2'
           __builtin_constant_p(n) ?       \
           ^
   mm/page-writeback.c:1413:18: note: '?' condition is true
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                                  ^
   include/linux/log2.h:161:2: note: expanded from macro 'ilog2'
           (sizeof(n) <= 4) ?              \
           ^
   mm/page-writeback.c:1413:14: note: The result of the left shift is undefined 
because the right operand is negative
                   return 1UL << (ilog2(thresh - dirty) >> 1);
                              ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/page-writeback.c:2902:2: warning: Value stored to 'access_ret' is never 
read [clang-analyzer-deadcode.DeadStores]
           access_ret = arch_make_folio_accessible(folio);
           ^            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   mm/page-writeback.c:2902:2: note: Value stored to 'access_ret' is never read
           access_ret = arch_make_folio_accessible(folio);
           ^            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 warning generated.
   block/partitions/amiga.c:118:19: warning: The left operand of '<' is a 
garbage value [clang-analyzer-core.UndefinedBinaryOperatorResult]
                           if (dostype[3] < ' ')
                               ~~~~~~~~~~ ^
   block/partitions/amiga.c:38:2: note: Loop condition is true.  Entering loop 
body
           for (blk = 0; ; blk++, put_dev_sector(sect)) {
           ^
   block/partitions/amiga.c:39:7: note: 'blk' is not equal to 
RDB_ALLOCATION_LIMIT
                   if (blk == RDB_ALLOCATION_LIMIT)
                       ^~~
   block/partitions/amiga.c:39:3: note: Taking false branch
                   if (blk == RDB_ALLOCATION_LIMIT)
                   ^
   block/partitions/amiga.c:42:7: note: Assuming 'data' is non-null
                   if (!data) {
                       ^~~~~
   block/partitions/amiga.c:42:3: note: Taking false branch
                   if (!data) {
                   ^
   block/partitions/amiga.c:48:7: note: Assuming the condition is false
                   if (*(__be32 *)data != cpu_to_be32(IDNAME_RIGIDDISK))
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   block/partitions/amiga.c:48:3: note: Taking false branch
                   if (*(__be32 *)data != cpu_to_be32(IDNAME_RIGIDDISK))
                   ^
   block/partitions/amiga.c:52:7: note: Assuming the condition is true
                   if (checksum_block((__be32 *)data, 
be32_to_cpu(rdb->rdb_SummedLongs) & 0x7F) == 0)
                       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   block/partitions/amiga.c:52:3: note: Taking true branch
                   if (checksum_block((__be32 *)data, 
be32_to_cpu(rdb->rdb_SummedLongs) & 0x7F) == 0)
                   ^
   block/partitions/amiga.c:53:4: note:  Execution continues on line 70
                           break;
                           ^
   block/partitions/amiga.c:81:17: note: Assuming 'blk' is > 0
           for (part = 1; blk>0 && part<=16; part++, put_dev_sector(sect)) {
                          ^~~~~
   block/partitions/amiga.c:81:17: note: Left side of '&&' is true
   block/partitions/amiga.c:81:2: note: Loop condition is true.  Entering loop 
body
           for (part = 1; blk>0 && part<=16; part++, put_dev_sector(sect)) {
           ^
   block/partitions/amiga.c:84:7: note: Assuming 'data' is non-null
                   if (!data) {
                       ^~~~~
   block/partitions/amiga.c:84:3: note: Taking false branch
                   if (!data) {
                   ^
   block/partitions/amiga.c:92:7: note: Assuming the condition is false
                   if (pb->pb_ID != cpu_to_be32(IDNAME_PARTITION))
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   block/partitions/amiga.c:92:3: note: Taking false branch
                   if (pb->pb_ID != cpu_to_be32(IDNAME_PARTITION))
                   ^
   block/partitions/amiga.c:94:7: note: Assuming the condition is false
                   if (checksum_block((__be32 *)pb, 
be32_to_cpu(pb->pb_SummedLongs) & 0x7F) != 0 )
                       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   block/partitions/amiga.c:94:3: note: Taking false branch
                   if (checksum_block((__be32 *)pb, 
be32_to_cpu(pb->pb_SummedLongs) & 0x7F) != 0 )
                   ^
   block/partitions/amiga.c:104:7: note: Assuming 'nr_sects' is not equal to 0
                   if (!nr_sects)
                       ^~~~~~~~~
   block/partitions/amiga.c:104:3: note: Taking false branch
                   if (!nr_sects)
                   ^
   block/partitions/amiga.c:118:19: note: The left operand of '<' is a garbage 
value
                           if (dostype[3] < ' ')
                               ~~~~~~~~~~ ^
   2 warnings generated.
>> lib/asn1_encoder.c:299:12: warning: Dereference of null pointer 
>> [clang-analyzer-core.NullDereference]
           *(data++) = _tagn(CONT, CONS, tag);
           ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
   lib/asn1_encoder.c:276:11: note: Assuming 'tag' is <= 30
           if (WARN(tag > 30, "ASN.1 tag can't be > 30"))
                    ^
   include/asm-generic/bug.h:130:25: note: expanded from macro 'WARN'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   lib/asn1_encoder.c:276:6: note: Taking false branch
           if (WARN(tag > 30, "ASN.1 tag can't be > 30"))
               ^
   include/asm-generic/bug.h:131:2: note: expanded from macro 'WARN'
           if (unlikely(__ret_warn_on))                                    \
           ^
   lib/asn1_encoder.c:276:2: note: Taking false branch
           if (WARN(tag > 30, "ASN.1 tag can't be > 30"))
           ^
   lib/asn1_encoder.c:279:6: note: Assuming 'string' is null
           if (!string && WARN(len > 127,
               ^~~~~~~
   lib/asn1_encoder.c:279:6: note: Left side of '&&' is true
   lib/asn1_encoder.c:279:22: note: Assuming 'len' is <= 127
           if (!string && WARN(len > 127,
                               ^
   include/asm-generic/bug.h:130:25: note: expanded from macro 'WARN'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   lib/asn1_encoder.c:279:17: note: Taking false branch
           if (!string && WARN(len > 127,
                          ^
   include/asm-generic/bug.h:131:2: note: expanded from macro 'WARN'
           if (unlikely(__ret_warn_on))                                    \
           ^
   lib/asn1_encoder.c:279:2: note: Taking false branch
           if (!string && WARN(len > 127,
           ^
   lib/asn1_encoder.c:283:2: note: Taking false branch
           if (IS_ERR(data))
           ^
   lib/asn1_encoder.c:286:7: note: 'string' is null
           if (!string && len > 0) {
                ^~~~~~
   lib/asn1_encoder.c:286:6: note: Left side of '&&' is true
           if (!string && len > 0) {
               ^
   lib/asn1_encoder.c:286:17: note: Assuming 'len' is > 0
           if (!string && len > 0) {
                          ^~~~~~~
   lib/asn1_encoder.c:286:2: note: Taking true branch
           if (!string && len > 0) {
           ^
   lib/asn1_encoder.c:296:6: note: 'data_len' is >= 2
           if (data_len < 2)
               ^~~~~~~~
   lib/asn1_encoder.c:296:2: note: Taking false branch
           if (data_len < 2)
           ^
   lib/asn1_encoder.c:299:4: note: Null pointer value stored to 'data'
           *(data++) = _tagn(CONT, CONS, tag);
             ^~~~~~
   lib/asn1_encoder.c:299:12: note: Dereference of null pointer
           *(data++) = _tagn(CONT, CONS, tag);
           ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
   lib/asn1_encoder.c:399:12: warning: Dereference of null pointer 
[clang-analyzer-core.NullDereference]
           *(data++) = _tag(UNIV, CONS, SEQ);
           ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
   lib/asn1_encoder.c:379:6: note: Assuming 'seq' is null
           if (!seq && WARN(len > 127,
               ^~~~
   lib/asn1_encoder.c:379:6: note: Left side of '&&' is true
   lib/asn1_encoder.c:379:19: note: Assuming 'len' is <= 127
           if (!seq && WARN(len > 127,
                            ^
   include/asm-generic/bug.h:130:25: note: expanded from macro 'WARN'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   lib/asn1_encoder.c:379:14: note: Taking false branch
           if (!seq && WARN(len > 127,
                       ^
   include/asm-generic/bug.h:131:2: note: expanded from macro 'WARN'
           if (unlikely(__ret_warn_on))                                    \
           ^
   lib/asn1_encoder.c:379:2: note: Taking false branch
           if (!seq && WARN(len > 127,
           ^
   lib/asn1_encoder.c:383:2: note: Taking false branch
           if (IS_ERR(data))
           ^
   lib/asn1_encoder.c:386:7: note: 'seq' is null
           if (!seq && len >= 0) {
                ^~~
   lib/asn1_encoder.c:386:6: note: Left side of '&&' is true
           if (!seq && len >= 0) {
               ^
   lib/asn1_encoder.c:386:14: note: Assuming 'len' is >= 0
           if (!seq && len >= 0) {
                       ^~~~~~~~
   lib/asn1_encoder.c:386:2: note: Taking true branch
           if (!seq && len >= 0) {
           ^
--
   1 warning generated.
   fs/sysfs/file.c:57:2: warning: Null pointer passed as 1st argument to memory 
set function [clang-analyzer-unix.cstring.NullArg]
           memset(buf, 0, PAGE_SIZE);
           ^      ~~~
   fs/sysfs/file.c:48:19: note: Assuming field 'show' is non-null
           if (WARN_ON_ONCE(!ops->show))
                            ^
   include/asm-generic/bug.h:146:18: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
                           ^~~~~~~~~
   include/linux/once_lite.h:15:27: note: expanded from macro 'DO_ONCE_LITE_IF'
                   bool __ret_do_once = !!(condition);                     \
                                           ^~~~~~~~~
   fs/sysfs/file.c:48:6: note: '__ret_do_once' is false
           if (WARN_ON_ONCE(!ops->show))
               ^
   include/asm-generic/bug.h:146:2: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/once_lite.h:17:16: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                                ^~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   fs/sysfs/file.c:48:6: note: Left side of '&&' is false
           if (WARN_ON_ONCE(!ops->show))
               ^
   include/asm-generic/bug.h:146:2: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
           ^
   include/linux/once_lite.h:17:30: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                                              ^
   fs/sysfs/file.c:48:6: note: Taking false branch
           if (WARN_ON_ONCE(!ops->show))
               ^
   include/asm-generic/bug.h:146:2: note: expanded from macro 'WARN_ON_ONCE'
           DO_ONCE_LITE_IF(condition, WARN_ON, 1)
           ^
   include/linux/once_lite.h:17:3: note: expanded from macro 'DO_ONCE_LITE_IF'
                   if (unlikely(__ret_do_once && !__already_done)) {       \
                   ^
   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:65: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:65: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:65: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);
           ^      ~~~
   2 warnings generated.
   Suppressed 2 warnings (2 with check filters).
   3 warnings generated.
   Suppressed 3 warnings (1 in non-user code, 2 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (1 in non-user code, 2 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   1 warning generated.
>> drivers/spi/spi.c:3318:15: warning: Dereference of null pointer 
>> [clang-analyzer-core.NullDereference]
           xfers[0].len = min_t(size_t, maxsize, xfer[0].len);
                        ^
   drivers/spi/spi.c:3791:8: note: Calling '__spi_validate'
           ret = __spi_validate(spi, message);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi.c:3580:6: note: Assuming the condition is false
           if (list_empty(&message->transfers))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi.c:3580:2: note: Taking false branch
           if (list_empty(&message->transfers))
           ^
   drivers/spi/spi.c:3590:7: note: Assuming the condition is true
           if ((spi->mode & SPI_CS_WORD) && (!(ctlr->mode_bits & SPI_CS_WORD) ||
                ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi.c:3590:6: note: Left side of '&&' is true
           if ((spi->mode & SPI_CS_WORD) && (!(ctlr->mode_bits & SPI_CS_WORD) ||
               ^
   drivers/spi/spi.c:3590:36: note: Assuming the condition is true
           if ((spi->mode & SPI_CS_WORD) && (!(ctlr->mode_bits & SPI_CS_WORD) ||
                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi.c:3590:69: note: Left side of '||' is true
           if ((spi->mode & SPI_CS_WORD) && (!(ctlr->mode_bits & SPI_CS_WORD) ||
                                                                              ^
   drivers/spi/spi.c:3601:9: note: Calling 'spi_split_transfers_maxsize'
                   ret = spi_split_transfers_maxsize(ctlr, message, maxsize,
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi.c:3377:2: note: Loop condition is true.  Entering loop body
           list_for_each_entry(xfer, &msg->transfers, transfer_list) {
           ^
   include/linux/list.h:638:2: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
           ^
   drivers/spi/spi.c:3378:7: note: Assuming 'maxsize' is < field 'len'
                   if (xfer->len > maxsize) {
                       ^~~~~~~~~~~~~~~~~~~
   drivers/spi/spi.c:3378:3: note: Taking true branch
                   if (xfer->len > maxsize) {
                   ^
   drivers/spi/spi.c:3379:10: note: Calling '__spi_split_transfer_maxsize'
                           ret = __spi_split_transfer_maxsize(ctlr, msg, &xfer,
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi.c:3299:2: note: Taking false branch
           if (IS_ERR(srt))
           ^
   drivers/spi/spi.c:3301:2: note: Null pointer value stored to 'xfers'
           xfers = srt->inserted_transfers;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi.c:3318:17: note: Assuming '__UNIQUE_ID___x282' is >= 
'__UNIQUE_ID___y283'
           xfers[0].len = min_t(size_t, maxsize, xfer[0].len);
                          ^
   include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
   #define min_t(type, x, y)       __careful_cmp((type)(x), (type)(y), <)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^~~~~~~~~~
   drivers/spi/spi.c:3318:17: note: '?' condition is false
           xfers[0].len = min_t(size_t, maxsize, xfer[0].len);
                          ^
   include/linux/minmax.h:104:27: note: expanded from macro 'min_t'
   #define min_t(type, x, y)       __careful_cmp((type)(x), (type)(y), <)
                                   ^
   include/linux/minmax.h:38:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^
   include/linux/minmax.h:33:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^
   include/linux/minmax.h:28:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^
   drivers/spi/spi.c:3318:15: note: Dereference of null pointer
           xfers[0].len = min_t(size_t, maxsize, xfer[0].len);
           ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 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) {
                   ^
--
           dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
           ^
   include/linux/dynamic_debug.h:166:2: note: expanded from macro 
'dynamic_dev_dbg'
           _dynamic_func_call(fmt,__dynamic_dev_dbg,               \
           ^
   include/linux/dynamic_debug.h:152:2: note: expanded from macro 
'_dynamic_func_call'
           __dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__)
           ^
   include/linux/dynamic_debug.h:131:49: note: expanded from macro 
'__dynamic_func_call'
   #define __dynamic_func_call(id, fmt, func, ...) do {    \
                                                   ^
   drivers/video/backlight/pwm_bl.c:534:6: note: Assuming field 'period' is not 
equal to 0
           if (!state.period && (data->pwm_period_ns > 0))
               ^~~~~~~~~~~~~
   drivers/video/backlight/pwm_bl.c:534:20: note: Left side of '&&' is false
           if (!state.period && (data->pwm_period_ns > 0))
                             ^
   drivers/video/backlight/pwm_bl.c:538:6: note: Assuming 'ret' is 0
           if (ret) {
               ^~~
   drivers/video/backlight/pwm_bl.c:538:2: note: Taking false branch
           if (ret) {
           ^
   drivers/video/backlight/pwm_bl.c:546:6: note: Assuming field 'levels' is null
           if (data->levels) {
               ^~~~~~~~~~~~
   drivers/video/backlight/pwm_bl.c:546:2: note: Taking false branch
           if (data->levels) {
           ^
   drivers/video/backlight/pwm_bl.c:562:13: note: Assuming field 
'max_brightness' is 0
           } else if (!data->max_brightness) {
                      ^~~~~~~~~~~~~~~~~~~~~
   drivers/video/backlight/pwm_bl.c:562:9: note: Taking true branch
           } else if (!data->max_brightness) {
                  ^
   drivers/video/backlight/pwm_bl.c:574:9: note: Calling 
'pwm_backlight_brightness_default'
                   ret = pwm_backlight_brightness_default(&pdev->dev, data,
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/video/backlight/pwm_bl.c:206:33: note: Calling 'fls'
                   min((int)DIV_ROUND_UP(period, fls(period)), 4096);
                                                 ^
   include/linux/math.h:36:22: note: expanded from macro 'DIV_ROUND_UP'
   #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP
                        ^
   include/uapi/linux/const.h:34:57: note: expanded from macro 
'__KERNEL_DIV_ROUND_UP'
   #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
                                                           ^
   include/linux/minmax.h:45:33: note: expanded from macro 'min'
   #define min(x, y)       __careful_cmp(x, y, <)
                                         ^
   include/linux/minmax.h:38:14: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                              ^
   include/linux/minmax.h:31:25: note: expanded from macro '__cmp_once'
                   typeof(x) unique_x = (x);               \
                                         ^
   include/asm-generic/bitops/builtin-fls.h:14:9: note: 'x' is 0
           return x ? sizeof(x) * 8 - __builtin_clz(x) : 0;
                  ^
   include/asm-generic/bitops/builtin-fls.h:14:9: note: '?' condition is false
   include/asm-generic/bitops/builtin-fls.h:14:2: note: Returning zero
           return x ? sizeof(x) * 8 - __builtin_clz(x) : 0;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/video/backlight/pwm_bl.c:206:33: note: Returning from 'fls'
                   min((int)DIV_ROUND_UP(period, fls(period)), 4096);
                                                 ^
   include/linux/math.h:36:22: note: expanded from macro 'DIV_ROUND_UP'
   #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP
                        ^
   include/uapi/linux/const.h:34:57: note: expanded from macro 
'__KERNEL_DIV_ROUND_UP'
   #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
                                                           ^
   include/linux/minmax.h:45:33: note: expanded from macro 'min'
   #define min(x, y)       __careful_cmp(x, y, <)
                                         ^
   include/linux/minmax.h:38:14: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                              ^
   include/linux/minmax.h:31:25: note: expanded from macro '__cmp_once'
                   typeof(x) unique_x = (x);               \
                                         ^
   drivers/video/backlight/pwm_bl.c:206:12: note: Division by zero
                   min((int)DIV_ROUND_UP(period, fls(period)), 4096);
                            ^
   include/linux/math.h:36:22: note: expanded from macro 'DIV_ROUND_UP'
   #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP
                        ^
   include/uapi/linux/const.h:34:54: note: expanded from macro 
'__KERNEL_DIV_ROUND_UP'
   #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
                                                        ^
   include/linux/minmax.h:45:33: note: expanded from macro 'min'
   #define min(x, y)       __careful_cmp(x, y, <)
                           ~~~~~~~~~~~~~~^~~~~~~~
   include/linux/minmax.h:38:14: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:31:25: note: expanded from macro '__cmp_once'
                   typeof(x) unique_x = (x);               \
                                         ^
   2 warnings generated.
>> fs/btrfs/uuid-tree.c:276:7: warning: Null pointer passed as 2nd argument to 
>> memory comparison function [clang-analyzer-unix.cstring.NullArg]
                   if (memcmp(uuid, subvol_root->root_item.uuid, 
BTRFS_UUID_SIZE))
                       ^
   fs/btrfs/uuid-tree.c:302:6: note: Assuming 'path' is non-null
           if (!path) {
               ^~~~~
   fs/btrfs/uuid-tree.c:302:2: note: Taking false branch
           if (!path) {
           ^
   fs/btrfs/uuid-tree.c:313:6: note: Assuming 'ret' is 0
           if (ret) {
               ^~~
   fs/btrfs/uuid-tree.c:313:2: note: Taking false branch
           if (ret) {
           ^
   fs/btrfs/uuid-tree.c:319:2: note: Loop condition is true.  Entering loop body
           while (1) {
           ^
   fs/btrfs/uuid-tree.c:320:3: note: Taking false branch
                   if (btrfs_fs_closing(fs_info)) {
                   ^
   fs/btrfs/uuid-tree.c:327:3: note: Calling 'btrfs_item_key_to_cpu'
                   btrfs_item_key_to_cpu(leaf, &key, slot);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/ctree.h:2126:2: note: Calling 'btrfs_item_key'
           btrfs_item_key(eb, disk_key, nr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/ctree.h:2021:2: note: Value assigned to 'key.type', which 
participates in a condition later
           read_eb_member(eb, item, struct btrfs_item, key, disk_key);
           ^
   fs/btrfs/ctree.h:1581:2: note: expanded from macro 'read_eb_member'
           read_extent_buffer(eb, (char *)(result),                        \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/ctree.h:2126:2: note: Returning from 'btrfs_item_key'
           btrfs_item_key(eb, disk_key, nr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/uuid-tree.c:327:3: note: Returning from 'btrfs_item_key_to_cpu'
                   btrfs_item_key_to_cpu(leaf, &key, slot);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/uuid-tree.c:329:7: note: Assuming field 'type' is equal to 
BTRFS_UUID_KEY_SUBVOL
                   if (key.type != BTRFS_UUID_KEY_SUBVOL &&
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/uuid-tree.c:329:41: note: Left side of '&&' is false
                   if (key.type != BTRFS_UUID_KEY_SUBVOL &&
                                                         ^
   fs/btrfs/uuid-tree.c:334:15: note: Calling 'btrfs_item_size'
                   item_size = btrfs_item_size(leaf, slot);
                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/btrfs/ctree.h:2010:1: note: Calling 'btrfs_raw_item_size'
   BTRFS_ITEM_SETGET_FUNCS(size);
   ^
   fs/btrfs/ctree.h:1989:9: note: expanded from macro 'BTRFS_ITEM_SETGET_FUNCS'
           return btrfs_raw_item_##member(eb, btrfs_item_nr(slot));             
   \
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   note: expanded from here
   fs/btrfs/ctree.h:1970:1: note: Taking false branch
   BTRFS_SETGET_FUNCS(raw_item_size, struct btrfs_item, size, 32);
   ^
   fs/btrfs/ctree.h:1612:2: note: expanded from macro 'BTRFS_SETGET_FUNCS'
           BUILD_BUG_ON(sizeof(u##bits) != sizeof(((type *)0))->member);   \
           ^
   include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON'
           BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:346:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:334:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:326:3: note: expanded from macro 
'__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   fs/btrfs/ctree.h:1970:1: note: Loop condition is false.  Exiting loop
   BTRFS_SETGET_FUNCS(raw_item_size, struct btrfs_item, size, 32);
   ^
   fs/btrfs/ctree.h:1612:2: note: expanded from macro 'BTRFS_SETGET_FUNCS'
           BUILD_BUG_ON(sizeof(u##bits) != sizeof(((type *)0))->member);   \
           ^
   include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON'
           BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:346:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:334:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:318:2: note: expanded from macro 
'__compiletime_assert'
           do {                                                            \
           ^
   fs/btrfs/ctree.h:1970:1: note: Returning value, which participates in a 
condition later
   BTRFS_SETGET_FUNCS(raw_item_size, struct btrfs_item, size, 32);
   ^
   fs/btrfs/ctree.h:1613:2: note: expanded from macro 'BTRFS_SETGET_FUNCS'

vim +299 lib/asn1_encoder.c

b07067627cd5f1 James Bottomley 2021-01-27  242  
b07067627cd5f1 James Bottomley 2021-01-27  243  /**
b07067627cd5f1 James Bottomley 2021-01-27  244   * asn1_encode_tag() - add a 
tag for optional or explicit value
b07067627cd5f1 James Bottomley 2021-01-27  245   * @data:       pointer to 
place tag at
b07067627cd5f1 James Bottomley 2021-01-27  246   * @end_data:   end of data 
pointer, points one beyond last usable byte in @data
b07067627cd5f1 James Bottomley 2021-01-27  247   * @tag:        tag to be placed
b07067627cd5f1 James Bottomley 2021-01-27  248   * @string:     the data to be 
tagged
b07067627cd5f1 James Bottomley 2021-01-27  249   * @len:        the length of 
the data to be tagged
b07067627cd5f1 James Bottomley 2021-01-27  250   *
b07067627cd5f1 James Bottomley 2021-01-27  251   * Note this currently only 
handles short form tags < 31.
b07067627cd5f1 James Bottomley 2021-01-27  252   *
b07067627cd5f1 James Bottomley 2021-01-27  253   * Standard usage is to pass in 
a @tag, @string and @length and the
b07067627cd5f1 James Bottomley 2021-01-27  254   * @string will be ASN.1 
encoded with @tag and placed into @data.  If
b07067627cd5f1 James Bottomley 2021-01-27  255   * the encoding would put data 
past @end_data then an error is
b07067627cd5f1 James Bottomley 2021-01-27  256   * returned, otherwise a 
pointer to a position one beyond the encoding
b07067627cd5f1 James Bottomley 2021-01-27  257   * is returned.
b07067627cd5f1 James Bottomley 2021-01-27  258   *
b07067627cd5f1 James Bottomley 2021-01-27  259   * To encode in place pass a 
NULL @string and -1 for @len and the
b07067627cd5f1 James Bottomley 2021-01-27  260   * maximum allowable beginning 
and end of the data; all this will do
b07067627cd5f1 James Bottomley 2021-01-27  261   * is add the current maximum 
length and update the data pointer to
b07067627cd5f1 James Bottomley 2021-01-27  262   * the place where the tag 
contents should be placed is returned.  The
b07067627cd5f1 James Bottomley 2021-01-27  263   * data should be copied in by 
the calling routine which should then
b07067627cd5f1 James Bottomley 2021-01-27  264   * repeat the prior statement 
but now with the known length.  In order
b07067627cd5f1 James Bottomley 2021-01-27  265   * to avoid having to keep both 
before and after pointers, the repeat
b07067627cd5f1 James Bottomley 2021-01-27  266   * expects to be called with 
@data pointing to where the first encode
b07067627cd5f1 James Bottomley 2021-01-27  267   * returned it and still NULL 
for @string but the real length in @len.
b07067627cd5f1 James Bottomley 2021-01-27  268   */
b07067627cd5f1 James Bottomley 2021-01-27  269  unsigned char *
b07067627cd5f1 James Bottomley 2021-01-27  270  asn1_encode_tag(unsigned char 
*data, const unsigned char *end_data,
b07067627cd5f1 James Bottomley 2021-01-27  271                  u32 tag, const 
unsigned char *string, int len)
b07067627cd5f1 James Bottomley 2021-01-27  272  {
b07067627cd5f1 James Bottomley 2021-01-27  273          int data_len = end_data 
- data;
b07067627cd5f1 James Bottomley 2021-01-27  274          int ret;
b07067627cd5f1 James Bottomley 2021-01-27  275  
b07067627cd5f1 James Bottomley 2021-01-27  276          if (WARN(tag > 30, 
"ASN.1 tag can't be > 30"))
b07067627cd5f1 James Bottomley 2021-01-27  277                  return 
ERR_PTR(-EINVAL);
b07067627cd5f1 James Bottomley 2021-01-27  278  
b07067627cd5f1 James Bottomley 2021-01-27  279          if (!string && WARN(len 
> 127,
b07067627cd5f1 James Bottomley 2021-01-27  280                              
"BUG: recode tag is too big (>127)"))
b07067627cd5f1 James Bottomley 2021-01-27  281                  return 
ERR_PTR(-EINVAL);
b07067627cd5f1 James Bottomley 2021-01-27  282  
b07067627cd5f1 James Bottomley 2021-01-27  283          if (IS_ERR(data))
b07067627cd5f1 James Bottomley 2021-01-27  284                  return data;
b07067627cd5f1 James Bottomley 2021-01-27  285  
b07067627cd5f1 James Bottomley 2021-01-27  286          if (!string && len > 0) 
{
b07067627cd5f1 James Bottomley 2021-01-27  287                  /*
b07067627cd5f1 James Bottomley 2021-01-27  288                   * we're 
recoding, so move back to the start of the
b07067627cd5f1 James Bottomley 2021-01-27  289                   * tag and 
install a dummy length because the real
b07067627cd5f1 James Bottomley 2021-01-27  290                   * data_len 
should be NULL
b07067627cd5f1 James Bottomley 2021-01-27  291                   */
b07067627cd5f1 James Bottomley 2021-01-27  292                  data -= 2;
b07067627cd5f1 James Bottomley 2021-01-27  293                  data_len = 2;
b07067627cd5f1 James Bottomley 2021-01-27  294          }
b07067627cd5f1 James Bottomley 2021-01-27  295  
b07067627cd5f1 James Bottomley 2021-01-27  296          if (data_len < 2)
b07067627cd5f1 James Bottomley 2021-01-27  297                  return 
ERR_PTR(-EINVAL);
b07067627cd5f1 James Bottomley 2021-01-27  298  
b07067627cd5f1 James Bottomley 2021-01-27 @299          *(data++) = _tagn(CONT, 
CONS, tag);
b07067627cd5f1 James Bottomley 2021-01-27  300          data_len--;
b07067627cd5f1 James Bottomley 2021-01-27  301          ret = 
asn1_encode_length(&data, &data_len, len);
b07067627cd5f1 James Bottomley 2021-01-27  302          if (ret < 0)
b07067627cd5f1 James Bottomley 2021-01-27  303                  return 
ERR_PTR(ret);
b07067627cd5f1 James Bottomley 2021-01-27  304  
b07067627cd5f1 James Bottomley 2021-01-27  305          if (!string)
b07067627cd5f1 James Bottomley 2021-01-27  306                  return data;
b07067627cd5f1 James Bottomley 2021-01-27  307  
b07067627cd5f1 James Bottomley 2021-01-27  308          if (data_len < len)
b07067627cd5f1 James Bottomley 2021-01-27  309                  return 
ERR_PTR(-EINVAL);
b07067627cd5f1 James Bottomley 2021-01-27  310  
b07067627cd5f1 James Bottomley 2021-01-27  311          memcpy(data, string, 
len);
b07067627cd5f1 James Bottomley 2021-01-27  312          data += len;
b07067627cd5f1 James Bottomley 2021-01-27  313  
b07067627cd5f1 James Bottomley 2021-01-27  314          return data;
b07067627cd5f1 James Bottomley 2021-01-27  315  }
b07067627cd5f1 James Bottomley 2021-01-27  316  
EXPORT_SYMBOL_GPL(asn1_encode_tag);
b07067627cd5f1 James Bottomley 2021-01-27  317  

:::::: The code at line 299 was first introduced by commit
:::::: b07067627cd5f1f6dc60c224b47c728f7f4b7b45 lib: Add ASN.1 encoder

:::::: TO: James Bottomley <[email protected]>
:::::: CC: Jarkko Sakkinen <[email protected]>

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to