All of lore.kernel.org
 help / color / mirror / Atom feed
* net/sched/sch_ets.c:680:23: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
@ 2022-07-11  2:52 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-07-11  2:52 UTC (permalink / raw)
  To: kbuild

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

:::::: 
:::::: Manual check reason: "low confidence static check warning: net/sched/sch_ets.c:680:23: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]"
:::::: 

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: Davide Caratti <dcaratti@redhat.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   32346491ddf24599decca06190ebca03ff9de7f8
commit: cd9b50adc6bb9ad3f7d244590a389522215865c4 net/sched: ets: fix crash when flipping from 'strict' to 'quantum'
date:   11 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 11 months ago
config: arm-randconfig-c002-20220702 (https://download.01.org/0day-ci/archive/20220711/202207111005.dzzNPyUa-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f7a80c3d08d4821e621fc88d6a2e435291f82dff)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cd9b50adc6bb9ad3f7d244590a389522215865c4
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout cd9b50adc6bb9ad3f7d244590a389522215865c4
        # 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 where applicable
Reported-by: kernel test robot <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
   include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   net/bluetooth/hci_request.c:3109:25: note: Taking false branch
           struct hci_dev *hdev = container_of(work, struct hci_dev,
                                  ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   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:328:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   net/bluetooth/hci_request.c:3109:25: note: Loop condition is false.  Exiting loop
           struct hci_dev *hdev = container_of(work, struct hci_dev,
                                  ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   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:328:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert'
           do {                                                            \
           ^
   net/bluetooth/hci_request.c:3112:2: note: 'status' declared without an initial value
           u8 status;
           ^~~~~~~~~
   net/bluetooth/hci_request.c:3116:2: note: Calling 'hci_req_sync'
           hci_req_sync(hdev, le_scan_restart, 0, HCI_CMD_TIMEOUT, &status);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/bluetooth/hci_request.c:281:6: note: Assuming the condition is false
           if (test_bit(HCI_UP, &hdev->flags))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/bluetooth/hci_request.c:281:2: note: Taking false branch
           if (test_bit(HCI_UP, &hdev->flags))
           ^
   net/bluetooth/hci_request.c:287:2: note: Returning without writing to '*hci_status'
           return ret;
           ^
   net/bluetooth/hci_request.c:3116:2: note: Returning from 'hci_req_sync'
           hci_req_sync(hdev, le_scan_restart, 0, HCI_CMD_TIMEOUT, &status);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/bluetooth/hci_request.c:3117:6: note: Branch condition evaluates to a garbage value
           if (status) {
               ^~~~~~
   Suppressed 17 warnings (17 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.
   16 warnings generated.
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   17 warnings generated.
   net/sched/sch_teql.c:249:4: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores]
                           err = -EINVAL;
                           ^     ~~~~~~~
   net/sched/sch_teql.c:249:4: note: Value stored to 'err' is never read
                           err = -EINVAL;
                           ^     ~~~~~~~
   Suppressed 16 warnings (16 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.
   16 warnings generated.
   Suppressed 16 warnings (16 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.
   19 warnings generated.
   net/sched/sch_atm.c:89:25: warning: Value stored to 'p' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct atm_qdisc_data *p = qdisc_priv(sch);
                                  ^   ~~~~~~~~~~~~~~~
   net/sched/sch_atm.c:89:25: note: Value stored to 'p' during its initialization is never read
           struct atm_qdisc_data *p = qdisc_priv(sch);
                                  ^   ~~~~~~~~~~~~~~~
   net/sched/sch_atm.c:388:2: warning: Value stored to 'result' is never read [clang-analyzer-deadcode.DeadStores]
           result = TC_ACT_OK;     /* be nice to gcc */
           ^
   net/sched/sch_atm.c:388:2: note: Value stored to 'result' is never read
   net/sched/sch_atm.c:604:25: warning: Value stored to 'p' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct atm_qdisc_data *p = qdisc_priv(sch);
                                  ^   ~~~~~~~~~~~~~~~
   net/sched/sch_atm.c:604:25: note: Value stored to 'p' during its initialization is never read
           struct atm_qdisc_data *p = qdisc_priv(sch);
                                  ^   ~~~~~~~~~~~~~~~
   Suppressed 16 warnings (16 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.
   16 warnings generated.
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   17 warnings generated.
>> net/sched/sch_ets.c:680:23: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
                   q->classes[i].qdisc = queues[i];
                                       ^
   net/sched/sch_ets.c:701:6: note: Assuming 'opt' is non-null
           if (!opt)
               ^~~~
   net/sched/sch_ets.c:701:2: note: Taking false branch
           if (!opt)
           ^
   net/sched/sch_ets.c:704:8: note: Value assigned to field 'nbands'
           err = tcf_block_get(&q->block, &q->filter_list, sch, extack);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:705:6: note: Assuming 'err' is 0
           if (err)
               ^~~
   net/sched/sch_ets.c:705:2: note: Taking false branch
           if (err)
           ^
   net/sched/sch_ets.c:709:9: note: Calling 'ets_qdisc_change'
           return ets_qdisc_change(sch, opt, extack);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:591:2: note: 'oldbands' initialized here
           unsigned int oldbands = q->nbands;
           ^~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:598:7: note: 'opt' is non-null
           if (!opt) {
                ^~~
   net/sched/sch_ets.c:598:2: note: Taking false branch
           if (!opt) {
           ^
   net/sched/sch_ets.c:603:8: note: Calling 'nla_parse_nested'
           err = nla_parse_nested(tb, TCA_ETS_MAX, opt, ets_policy, extack);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/net/netlink.h:1207:6: note: Assuming the condition is false
           if (!(nla->nla_type & NLA_F_NESTED)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/net/netlink.h:1207:2: note: Taking false branch
           if (!(nla->nla_type & NLA_F_NESTED)) {
           ^
   include/net/netlink.h:1212:9: note: Assigning value, which participates in a condition later
           return __nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy,
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:603:8: note: Returning from 'nla_parse_nested'
           err = nla_parse_nested(tb, TCA_ETS_MAX, opt, ets_policy, extack);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:604:6: note: Assuming 'err' is >= 0
           if (err < 0)
               ^~~~~~~
   net/sched/sch_ets.c:604:2: note: Taking false branch
           if (err < 0)
           ^
   net/sched/sch_ets.c:607:6: note: Assuming the condition is false
           if (!tb[TCA_ETS_NBANDS]) {
               ^~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:607:2: note: Taking false branch
           if (!tb[TCA_ETS_NBANDS]) {
           ^
   net/sched/sch_ets.c:612:6: note: Assuming 'nbands' is >= 1
           if (nbands < 1 || nbands > TCQ_ETS_MAX_BANDS) {
               ^~~~~~~~~~
   net/sched/sch_ets.c:612:6: note: Left side of '||' is false
   net/sched/sch_ets.c:612:20: note: Assuming 'nbands' is <= TCQ_ETS_MAX_BANDS
           if (nbands < 1 || nbands > TCQ_ETS_MAX_BANDS) {
                             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:612:2: note: Taking false branch
           if (nbands < 1 || nbands > TCQ_ETS_MAX_BANDS) {
           ^
   net/sched/sch_ets.c:619:6: note: Assuming the condition is false
           if (tb[TCA_ETS_NSTRICT]) {
               ^~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:619:2: note: Taking false branch
           if (tb[TCA_ETS_NSTRICT]) {
           ^
   net/sched/sch_ets.c:627:6: note: Assuming the condition is false
           if (tb[TCA_ETS_PRIOMAP]) {
               ^~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:627:2: note: Taking false branch
           if (tb[TCA_ETS_PRIOMAP]) {
           ^
   net/sched/sch_ets.c:634:6: note: Assuming the condition is false
           if (tb[TCA_ETS_QUANTA]) {
               ^~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:634:2: note: Taking false branch
           if (tb[TCA_ETS_QUANTA]) {
           ^
   net/sched/sch_ets.c:643:20: note: 'i' is < 'nbands'
           for (i = nstrict; i < nbands; i++) {
                             ^
   net/sched/sch_ets.c:643:2: note: Loop condition is true.  Entering loop body
           for (i = nstrict; i < nbands; i++) {
           ^
   net/sched/sch_ets.c:644:3: note: Taking true branch
                   if (!quanta[i])
                   ^
   net/sched/sch_ets.c:643:20: note: Assuming 'i' is >= 'nbands'
           for (i = nstrict; i < nbands; i++) {
                             ^~~~~~~~~~
   net/sched/sch_ets.c:643:2: note: Loop condition is false. Execution continues on line 649
           for (i = nstrict; i < nbands; i++) {
           ^
   net/sched/sch_ets.c:649:21: note: Assuming 'i' is >= 'nbands'
--
   include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   net/bluetooth/hci_request.c:3109:25: note: Taking false branch
           struct hci_dev *hdev = container_of(work, struct hci_dev,
                                  ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   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:328:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   net/bluetooth/hci_request.c:3109:25: note: Loop condition is false.  Exiting loop
           struct hci_dev *hdev = container_of(work, struct hci_dev,
                                  ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   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:328:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert'
           do {                                                            \
           ^
   net/bluetooth/hci_request.c:3112:2: note: 'status' declared without an initial value
           u8 status;
           ^~~~~~~~~
   net/bluetooth/hci_request.c:3116:2: note: Calling 'hci_req_sync'
           hci_req_sync(hdev, le_scan_restart, 0, HCI_CMD_TIMEOUT, &status);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/bluetooth/hci_request.c:281:6: note: Assuming the condition is false
           if (test_bit(HCI_UP, &hdev->flags))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/bluetooth/hci_request.c:281:2: note: Taking false branch
           if (test_bit(HCI_UP, &hdev->flags))
           ^
   net/bluetooth/hci_request.c:287:2: note: Returning without writing to '*hci_status'
           return ret;
           ^
   net/bluetooth/hci_request.c:3116:2: note: Returning from 'hci_req_sync'
           hci_req_sync(hdev, le_scan_restart, 0, HCI_CMD_TIMEOUT, &status);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/bluetooth/hci_request.c:3117:6: note: Branch condition evaluates to a garbage value
           if (status) {
               ^~~~~~
   Suppressed 17 warnings (17 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.
   16 warnings generated.
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   17 warnings generated.
   net/sched/sch_teql.c:249:4: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores]
                           err = -EINVAL;
                           ^     ~~~~~~~
   net/sched/sch_teql.c:249:4: note: Value stored to 'err' is never read
                           err = -EINVAL;
                           ^     ~~~~~~~
   Suppressed 16 warnings (16 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.
   16 warnings generated.
   Suppressed 16 warnings (16 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.
   19 warnings generated.
   net/sched/sch_atm.c:89:25: warning: Value stored to 'p' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct atm_qdisc_data *p = qdisc_priv(sch);
                                  ^   ~~~~~~~~~~~~~~~
   net/sched/sch_atm.c:89:25: note: Value stored to 'p' during its initialization is never read
           struct atm_qdisc_data *p = qdisc_priv(sch);
                                  ^   ~~~~~~~~~~~~~~~
   net/sched/sch_atm.c:388:2: warning: Value stored to 'result' is never read [clang-analyzer-deadcode.DeadStores]
           result = TC_ACT_OK;     /* be nice to gcc */
           ^
   net/sched/sch_atm.c:388:2: note: Value stored to 'result' is never read
   net/sched/sch_atm.c:604:25: warning: Value stored to 'p' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct atm_qdisc_data *p = qdisc_priv(sch);
                                  ^   ~~~~~~~~~~~~~~~
   net/sched/sch_atm.c:604:25: note: Value stored to 'p' during its initialization is never read
           struct atm_qdisc_data *p = qdisc_priv(sch);
                                  ^   ~~~~~~~~~~~~~~~
   Suppressed 16 warnings (16 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.
   16 warnings generated.
   Suppressed 16 warnings (16 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   17 warnings generated.
>> net/sched/sch_ets.c:680:23: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
                   q->classes[i].qdisc = queues[i];
                                       ^
   net/sched/sch_ets.c:701:6: note: Assuming 'opt' is non-null
           if (!opt)
               ^~~~
   net/sched/sch_ets.c:701:2: note: Taking false branch
           if (!opt)
           ^
   net/sched/sch_ets.c:704:8: note: Value assigned to field 'nbands'
           err = tcf_block_get(&q->block, &q->filter_list, sch, extack);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:705:6: note: Assuming 'err' is 0
           if (err)
               ^~~
   net/sched/sch_ets.c:705:2: note: Taking false branch
           if (err)
           ^
   net/sched/sch_ets.c:709:9: note: Calling 'ets_qdisc_change'
           return ets_qdisc_change(sch, opt, extack);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:591:2: note: 'oldbands' initialized here
           unsigned int oldbands = q->nbands;
           ^~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:598:7: note: 'opt' is non-null
           if (!opt) {
                ^~~
   net/sched/sch_ets.c:598:2: note: Taking false branch
           if (!opt) {
           ^
   net/sched/sch_ets.c:603:8: note: Calling 'nla_parse_nested'
           err = nla_parse_nested(tb, TCA_ETS_MAX, opt, ets_policy, extack);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/net/netlink.h:1207:6: note: Assuming the condition is false
           if (!(nla->nla_type & NLA_F_NESTED)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/net/netlink.h:1207:2: note: Taking false branch
           if (!(nla->nla_type & NLA_F_NESTED)) {
           ^
   include/net/netlink.h:1212:9: note: Assigning value, which participates in a condition later
           return __nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy,
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:603:8: note: Returning from 'nla_parse_nested'
           err = nla_parse_nested(tb, TCA_ETS_MAX, opt, ets_policy, extack);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:604:6: note: Assuming 'err' is >= 0
           if (err < 0)
               ^~~~~~~
   net/sched/sch_ets.c:604:2: note: Taking false branch
           if (err < 0)
           ^
   net/sched/sch_ets.c:607:6: note: Assuming the condition is false
           if (!tb[TCA_ETS_NBANDS]) {
               ^~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:607:2: note: Taking false branch
           if (!tb[TCA_ETS_NBANDS]) {
           ^
   net/sched/sch_ets.c:612:6: note: Assuming 'nbands' is >= 1
           if (nbands < 1 || nbands > TCQ_ETS_MAX_BANDS) {
               ^~~~~~~~~~
   net/sched/sch_ets.c:612:6: note: Left side of '||' is false
   net/sched/sch_ets.c:612:20: note: Assuming 'nbands' is <= TCQ_ETS_MAX_BANDS
           if (nbands < 1 || nbands > TCQ_ETS_MAX_BANDS) {
                             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:612:2: note: Taking false branch
           if (nbands < 1 || nbands > TCQ_ETS_MAX_BANDS) {
           ^
   net/sched/sch_ets.c:619:6: note: Assuming the condition is false
           if (tb[TCA_ETS_NSTRICT]) {
               ^~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:619:2: note: Taking false branch
           if (tb[TCA_ETS_NSTRICT]) {
           ^
   net/sched/sch_ets.c:627:6: note: Assuming the condition is false
           if (tb[TCA_ETS_PRIOMAP]) {
               ^~~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:627:2: note: Taking false branch
           if (tb[TCA_ETS_PRIOMAP]) {
           ^
   net/sched/sch_ets.c:634:6: note: Assuming the condition is false
           if (tb[TCA_ETS_QUANTA]) {
               ^~~~~~~~~~~~~~~~~~
   net/sched/sch_ets.c:634:2: note: Taking false branch
           if (tb[TCA_ETS_QUANTA]) {
           ^
   net/sched/sch_ets.c:643:20: note: 'i' is < 'nbands'
           for (i = nstrict; i < nbands; i++) {
                             ^
   net/sched/sch_ets.c:643:2: note: Loop condition is true.  Entering loop body
           for (i = nstrict; i < nbands; i++) {
           ^
   net/sched/sch_ets.c:644:3: note: Taking true branch
                   if (!quanta[i])
                   ^
   net/sched/sch_ets.c:643:20: note: Assuming 'i' is >= 'nbands'
           for (i = nstrict; i < nbands; i++) {
                             ^~~~~~~~~~
   net/sched/sch_ets.c:643:2: note: Loop condition is false. Execution continues on line 649
           for (i = nstrict; i < nbands; i++) {
           ^
   net/sched/sch_ets.c:649:21: note: Assuming 'i' is >= 'nbands'

vim +680 net/sched/sch_ets.c

dcc68b4d8084e1 Petr Machata   2019-12-18  583  
dcc68b4d8084e1 Petr Machata   2019-12-18  584  static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt,
dcc68b4d8084e1 Petr Machata   2019-12-18  585  			    struct netlink_ext_ack *extack)
dcc68b4d8084e1 Petr Machata   2019-12-18  586  {
dcc68b4d8084e1 Petr Machata   2019-12-18  587  	unsigned int quanta[TCQ_ETS_MAX_BANDS] = {0};
dcc68b4d8084e1 Petr Machata   2019-12-18  588  	struct Qdisc *queues[TCQ_ETS_MAX_BANDS];
dcc68b4d8084e1 Petr Machata   2019-12-18  589  	struct ets_sched *q = qdisc_priv(sch);
dcc68b4d8084e1 Petr Machata   2019-12-18  590  	struct nlattr *tb[TCA_ETS_MAX + 1];
dcc68b4d8084e1 Petr Machata   2019-12-18  591  	unsigned int oldbands = q->nbands;
dcc68b4d8084e1 Petr Machata   2019-12-18  592  	u8 priomap[TC_PRIO_MAX + 1];
dcc68b4d8084e1 Petr Machata   2019-12-18  593  	unsigned int nstrict = 0;
dcc68b4d8084e1 Petr Machata   2019-12-18  594  	unsigned int nbands;
dcc68b4d8084e1 Petr Machata   2019-12-18  595  	unsigned int i;
dcc68b4d8084e1 Petr Machata   2019-12-18  596  	int err;
dcc68b4d8084e1 Petr Machata   2019-12-18  597  
dcc68b4d8084e1 Petr Machata   2019-12-18  598  	if (!opt) {
dcc68b4d8084e1 Petr Machata   2019-12-18  599  		NL_SET_ERR_MSG(extack, "ETS options are required for this operation");
dcc68b4d8084e1 Petr Machata   2019-12-18  600  		return -EINVAL;
dcc68b4d8084e1 Petr Machata   2019-12-18  601  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  602  
dcc68b4d8084e1 Petr Machata   2019-12-18  603  	err = nla_parse_nested(tb, TCA_ETS_MAX, opt, ets_policy, extack);
dcc68b4d8084e1 Petr Machata   2019-12-18  604  	if (err < 0)
dcc68b4d8084e1 Petr Machata   2019-12-18  605  		return err;
dcc68b4d8084e1 Petr Machata   2019-12-18  606  
dcc68b4d8084e1 Petr Machata   2019-12-18  607  	if (!tb[TCA_ETS_NBANDS]) {
dcc68b4d8084e1 Petr Machata   2019-12-18  608  		NL_SET_ERR_MSG_MOD(extack, "Number of bands is a required argument");
dcc68b4d8084e1 Petr Machata   2019-12-18  609  		return -EINVAL;
dcc68b4d8084e1 Petr Machata   2019-12-18  610  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  611  	nbands = nla_get_u8(tb[TCA_ETS_NBANDS]);
dcc68b4d8084e1 Petr Machata   2019-12-18  612  	if (nbands < 1 || nbands > TCQ_ETS_MAX_BANDS) {
dcc68b4d8084e1 Petr Machata   2019-12-18  613  		NL_SET_ERR_MSG_MOD(extack, "Invalid number of bands");
dcc68b4d8084e1 Petr Machata   2019-12-18  614  		return -EINVAL;
dcc68b4d8084e1 Petr Machata   2019-12-18  615  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  616  	/* Unless overridden, traffic goes to the last band. */
dcc68b4d8084e1 Petr Machata   2019-12-18  617  	memset(priomap, nbands - 1, sizeof(priomap));
dcc68b4d8084e1 Petr Machata   2019-12-18  618  
dcc68b4d8084e1 Petr Machata   2019-12-18  619  	if (tb[TCA_ETS_NSTRICT]) {
dcc68b4d8084e1 Petr Machata   2019-12-18  620  		nstrict = nla_get_u8(tb[TCA_ETS_NSTRICT]);
dcc68b4d8084e1 Petr Machata   2019-12-18  621  		if (nstrict > nbands) {
dcc68b4d8084e1 Petr Machata   2019-12-18  622  			NL_SET_ERR_MSG_MOD(extack, "Invalid number of strict bands");
dcc68b4d8084e1 Petr Machata   2019-12-18  623  			return -EINVAL;
dcc68b4d8084e1 Petr Machata   2019-12-18  624  		}
dcc68b4d8084e1 Petr Machata   2019-12-18  625  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  626  
dcc68b4d8084e1 Petr Machata   2019-12-18  627  	if (tb[TCA_ETS_PRIOMAP]) {
dcc68b4d8084e1 Petr Machata   2019-12-18  628  		err = ets_qdisc_priomap_parse(tb[TCA_ETS_PRIOMAP],
dcc68b4d8084e1 Petr Machata   2019-12-18  629  					      nbands, priomap, extack);
dcc68b4d8084e1 Petr Machata   2019-12-18  630  		if (err)
dcc68b4d8084e1 Petr Machata   2019-12-18  631  			return err;
dcc68b4d8084e1 Petr Machata   2019-12-18  632  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  633  
dcc68b4d8084e1 Petr Machata   2019-12-18  634  	if (tb[TCA_ETS_QUANTA]) {
dcc68b4d8084e1 Petr Machata   2019-12-18  635  		err = ets_qdisc_quanta_parse(sch, tb[TCA_ETS_QUANTA],
dcc68b4d8084e1 Petr Machata   2019-12-18  636  					     nbands, nstrict, quanta, extack);
dcc68b4d8084e1 Petr Machata   2019-12-18  637  		if (err)
dcc68b4d8084e1 Petr Machata   2019-12-18  638  			return err;
dcc68b4d8084e1 Petr Machata   2019-12-18  639  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  640  	/* If there are more bands than strict + quanta provided, the remaining
dcc68b4d8084e1 Petr Machata   2019-12-18  641  	 * ones are ETS with quantum of MTU. Initialize the missing values here.
dcc68b4d8084e1 Petr Machata   2019-12-18  642  	 */
dcc68b4d8084e1 Petr Machata   2019-12-18  643  	for (i = nstrict; i < nbands; i++) {
dcc68b4d8084e1 Petr Machata   2019-12-18  644  		if (!quanta[i])
dcc68b4d8084e1 Petr Machata   2019-12-18  645  			quanta[i] = psched_mtu(qdisc_dev(sch));
dcc68b4d8084e1 Petr Machata   2019-12-18  646  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  647  
dcc68b4d8084e1 Petr Machata   2019-12-18  648  	/* Before commit, make sure we can allocate all new qdiscs */
dcc68b4d8084e1 Petr Machata   2019-12-18  649  	for (i = oldbands; i < nbands; i++) {
dcc68b4d8084e1 Petr Machata   2019-12-18  650  		queues[i] = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops,
dcc68b4d8084e1 Petr Machata   2019-12-18  651  					      ets_class_id(sch, &q->classes[i]),
dcc68b4d8084e1 Petr Machata   2019-12-18  652  					      extack);
dcc68b4d8084e1 Petr Machata   2019-12-18  653  		if (!queues[i]) {
dcc68b4d8084e1 Petr Machata   2019-12-18  654  			while (i > oldbands)
dcc68b4d8084e1 Petr Machata   2019-12-18  655  				qdisc_put(queues[--i]);
dcc68b4d8084e1 Petr Machata   2019-12-18  656  			return -ENOMEM;
dcc68b4d8084e1 Petr Machata   2019-12-18  657  		}
dcc68b4d8084e1 Petr Machata   2019-12-18  658  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  659  
dcc68b4d8084e1 Petr Machata   2019-12-18  660  	sch_tree_lock(sch);
dcc68b4d8084e1 Petr Machata   2019-12-18  661  
dcc68b4d8084e1 Petr Machata   2019-12-18  662  	q->nbands = nbands;
cd9b50adc6bb9a Davide Caratti 2021-08-25  663  	for (i = nstrict; i < q->nstrict; i++) {
cd9b50adc6bb9a Davide Caratti 2021-08-25  664  		INIT_LIST_HEAD(&q->classes[i].alist);
cd9b50adc6bb9a Davide Caratti 2021-08-25  665  		if (q->classes[i].qdisc->q.qlen) {
cd9b50adc6bb9a Davide Caratti 2021-08-25  666  			list_add_tail(&q->classes[i].alist, &q->active);
cd9b50adc6bb9a Davide Caratti 2021-08-25  667  			q->classes[i].deficit = quanta[i];
cd9b50adc6bb9a Davide Caratti 2021-08-25  668  		}
cd9b50adc6bb9a Davide Caratti 2021-08-25  669  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  670  	q->nstrict = nstrict;
dcc68b4d8084e1 Petr Machata   2019-12-18  671  	memcpy(q->prio2band, priomap, sizeof(priomap));
dcc68b4d8084e1 Petr Machata   2019-12-18  672  
dcc68b4d8084e1 Petr Machata   2019-12-18  673  	for (i = q->nbands; i < oldbands; i++)
dcc68b4d8084e1 Petr Machata   2019-12-18  674  		qdisc_tree_flush_backlog(q->classes[i].qdisc);
dcc68b4d8084e1 Petr Machata   2019-12-18  675  
dcc68b4d8084e1 Petr Machata   2019-12-18  676  	for (i = 0; i < q->nbands; i++)
dcc68b4d8084e1 Petr Machata   2019-12-18  677  		q->classes[i].quantum = quanta[i];
dcc68b4d8084e1 Petr Machata   2019-12-18  678  
dcc68b4d8084e1 Petr Machata   2019-12-18  679  	for (i = oldbands; i < q->nbands; i++) {
dcc68b4d8084e1 Petr Machata   2019-12-18 @680  		q->classes[i].qdisc = queues[i];
dcc68b4d8084e1 Petr Machata   2019-12-18  681  		if (q->classes[i].qdisc != &noop_qdisc)
dcc68b4d8084e1 Petr Machata   2019-12-18  682  			qdisc_hash_add(q->classes[i].qdisc, true);
dcc68b4d8084e1 Petr Machata   2019-12-18  683  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  684  
dcc68b4d8084e1 Petr Machata   2019-12-18  685  	sch_tree_unlock(sch);
dcc68b4d8084e1 Petr Machata   2019-12-18  686  
d35eb52bd2ac75 Petr Machata   2019-12-18  687  	ets_offload_change(sch);
dcc68b4d8084e1 Petr Machata   2019-12-18  688  	for (i = q->nbands; i < oldbands; i++) {
dcc68b4d8084e1 Petr Machata   2019-12-18  689  		qdisc_put(q->classes[i].qdisc);
dcc68b4d8084e1 Petr Machata   2019-12-18  690  		memset(&q->classes[i], 0, sizeof(q->classes[i]));
dcc68b4d8084e1 Petr Machata   2019-12-18  691  	}
dcc68b4d8084e1 Petr Machata   2019-12-18  692  	return 0;
dcc68b4d8084e1 Petr Machata   2019-12-18  693  }
dcc68b4d8084e1 Petr Machata   2019-12-18  694  

:::::: The code at line 680 was first introduced by commit
:::::: dcc68b4d8084e1ac9af0d4022d6b1aff6a139a33 net: sch_ets: Add a new Qdisc

:::::: TO: Petr Machata <petrm@mellanox.com>
:::::: CC: David S. Miller <davem@davemloft.net>

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

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

only message in thread, other threads:[~2022-07-11  2:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-11  2:52 net/sched/sch_ets.c:680:23: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] kernel test robot

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