From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: drivers/pinctrl/qcom/pinctrl-sc8180x.c:1664:16: warning: Access to field 'start' results in a dereference of an undefined pointer value (loaded from variable 'mres') [clang-analyzer-core.NullDereference]
Date: Fri, 21 Jan 2022 13:25:02 +0800 [thread overview]
Message-ID: <202201211317.RYE7ffKa-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 19683 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Shawn Guo <shawn.guo@linaro.org>
CC: Linus Walleij <linus.walleij@linaro.org>
CC: Bjorn Andersson <bjorn.andersson@linaro.org>
CC: Andy Shevchenko <andriy.shevchenko@intel.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 2c271fe77d52a0555161926c232cd5bc07178b39
commit: 6d8d67988b1a2db04d9d6083a729e8abfeb725d7 pinctrl: qcom: sc8180x: add ACPI probe support
date: 10 months ago
:::::: branch date: 14 hours ago
:::::: commit date: 10 months ago
config: arm-randconfig-c002-20220117 (https://download.01.org/0day-ci/archive/20220121/202201211317.RYE7ffKa-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project c10cbb243cafc0cf42c3e922cb29183279444432)
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=6d8d67988b1a2db04d9d6083a729e8abfeb725d7
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 6d8d67988b1a2db04d9d6083a729e8abfeb725d7
# save the config file to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
include/linux/compiler_types.h:320:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:308:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:300:3: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^
drivers/pci/setup-bus.c:459:2: note: Loop condition is false. Exiting loop
list_for_each_entry(dev_res, head, list)
^
include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
for (pos = list_first_entry(head, typeof(*pos), member); \
^
include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
list_entry((ptr)->next, type, member)
^
include/linux/list.h:511:2: note: expanded from macro 'list_entry'
container_of(ptr, type, member)
^
note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:320:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:308:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:298:2: note: expanded from macro '__compiletime_assert'
do { \
^
drivers/pci/setup-bus.c:459:2: note: Loop condition is true. Entering loop body
list_for_each_entry(dev_res, head, list)
^
include/linux/list.h:628:2: note: expanded from macro 'list_for_each_entry'
for (pos = list_first_entry(head, typeof(*pos), member); \
^
drivers/pci/setup-bus.c:460:7: note: Use of memory after it is freed
if (dev_res->res->parent)
^~~~~~~~~~~~
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
6 warnings generated.
Suppressed 6 warnings (6 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (4 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
7 warnings generated.
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c:1562:26: warning: Value stored to 'npcm' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
struct npcm7xx_pinctrl *npcm = pinctrl_dev_get_drvdata(pctldev);
^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c:1562:26: note: Value stored to 'npcm' during its initialization is never read
struct npcm7xx_pinctrl *npcm = pinctrl_dev_get_drvdata(pctldev);
^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c:1590:26: warning: Value stored to 'npcm' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
struct npcm7xx_pinctrl *npcm = pinctrl_dev_get_drvdata(pctldev);
^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c:1590:26: note: Value stored to 'npcm' during its initialization is never read
struct npcm7xx_pinctrl *npcm = pinctrl_dev_get_drvdata(pctldev);
^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (3 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
6 warnings generated.
Suppressed 6 warnings (6 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
6 warnings generated.
Suppressed 6 warnings (6 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
6 warnings generated.
>> drivers/pinctrl/qcom/pinctrl-sc8180x.c:1664:16: warning: Access to field 'start' results in a dereference of an undefined pointer value (loaded from variable 'mres') [clang-analyzer-core.NullDereference]
res->start = mres->start + info->offset;
^
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1692:6: note: Assuming 'soc_data' is non-null
if (!soc_data)
^~~~~~~~~
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1692:2: note: Taking false branch
if (!soc_data)
^
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1695:8: note: Calling 'sc8180x_pinctrl_add_tile_resources'
ret = sc8180x_pinctrl_add_tile_resources(pdev);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1633:19: note: 'mres' declared without an initial value
struct resource *mres, *nres, *res;
^~~~
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1640:6: note: Assuming field 'of_node' is null
if (pdev->dev.of_node)
^~~~~~~~~~~~~~~~~
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1640:2: note: Taking false branch
if (pdev->dev.of_node)
^
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1645:6: note: Assuming 'nres' is non-null
if (!nres)
^~~~~
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1645:2: note: Taking false branch
if (!nres)
^
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1650:14: note: Assuming 'i' is >= field 'num_resources'
for (i = 0; i < pdev->num_resources; i++) {
^~~~~~~~~~~~~~~~~~~~~~~
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1650:2: note: Loop condition is false. Execution continues on line 1661
for (i = 0; i < pdev->num_resources; i++) {
^
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1661:2: note: Loop condition is true. Entering loop body
for (i = 0; i < ARRAY_SIZE(sc8180x_tiles); i++, res++) {
^
drivers/pinctrl/qcom/pinctrl-sc8180x.c:1664:16: note: Access to field 'start' results in a dereference of an undefined pointer value (loaded from variable 'mres')
res->start = mres->start + info->offset;
^~~~
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
6 warnings generated.
Suppressed 6 warnings (5 in non-user code, 1 with check filters).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
5 warnings generated.
Suppressed 5 warnings (5 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
10 warnings generated.
drivers/md/bcache/btree.c:1921:2: warning: Value stored to 'cur_idx' is never read [clang-analyzer-deadcode.DeadStores]
cur_idx = prev_idx = 0;
^ ~~~~~~~~~~~~
drivers/md/bcache/btree.c:1921:2: note: Value stored to 'cur_idx' is never read
cur_idx = prev_idx = 0;
^ ~~~~~~~~~~~~
drivers/md/bcache/btree.c:2278:28: warning: The result of the left shift is undefined because the left operand is negative [clang-analyzer-core.UndefinedBinaryOperatorResult]
bkey_copy_key(&n3->key, &MAX_KEY);
^
include/uapi/linux/bcache.h:81:24: note: expanded from macro 'MAX_KEY'
#define MAX_KEY KEY(MAX_KEY_INODE, MAX_KEY_OFFSET, 0)
^~~~~~~~~~~~~
include/uapi/linux/bcache.h:79:31: note: expanded from macro 'MAX_KEY_INODE'
#define MAX_KEY_INODE (~(~0 << 20))
~~ ^
include/uapi/linux/bcache.h:73:51: note: expanded from macro 'KEY'
.high = (1ULL << 63) | ((__u64) (size) << 20) | (inode), \
^~~~~
drivers/md/bcache/btree.c:2204:6: note: Calling 'btree_check_reserve'
if (btree_check_reserve(b, op)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/md/bcache/btree.c:1178:6: note: Assuming the condition is false
if (fifo_used(&ca->free[RESERVE_BTREE]) < reserve) {
^
drivers/md/bcache/util.h:162:26: note: expanded from macro 'fifo_used'
#define fifo_used(fifo) (((fifo)->back - (fifo)->front) & (fifo)->mask)
^
drivers/md/bcache/btree.c:1178:2: note: Taking false branch
if (fifo_used(&ca->free[RESERVE_BTREE]) < reserve) {
^
drivers/md/bcache/btree.c:1188:9: note: Calling 'mca_cannibalize_lock'
return mca_cannibalize_lock(b->c, op);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/md/bcache/btree.c:846:13: note: Assuming field 'btree_cache_alloc_lock' is not equal to null
if (likely(c->btree_cache_alloc_lock == NULL)) {
^
include/linux/compiler.h:77:40: note: expanded from macro 'likely'
# define likely(x) __builtin_expect(!!(x), 1)
^
drivers/md/bcache/btree.c:846:2: note: Taking false branch
if (likely(c->btree_cache_alloc_lock == NULL)) {
^
drivers/md/bcache/btree.c:848:13: note: Assuming field 'btree_cache_alloc_lock' is equal to field 'task'
} else if (c->btree_cache_alloc_lock != current) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/md/bcache/btree.c:848:9: note: Taking false branch
} else if (c->btree_cache_alloc_lock != current) {
vim +1664 drivers/pinctrl/qcom/pinctrl-sc8180x.c
6d8d67988b1a2db Shawn Guo 2021-03-11 1623
6d8d67988b1a2db Shawn Guo 2021-03-11 1624 /*
6d8d67988b1a2db Shawn Guo 2021-03-11 1625 * ACPI DSDT has one single memory resource for TLMM, which voilates the
6d8d67988b1a2db Shawn Guo 2021-03-11 1626 * hardware layout of 3 sepearte tiles. Let's split the memory resource into
6d8d67988b1a2db Shawn Guo 2021-03-11 1627 * 3 named ones, so that msm_pinctrl_probe() can map memory for ACPI in the
6d8d67988b1a2db Shawn Guo 2021-03-11 1628 * same way as for DT probe.
6d8d67988b1a2db Shawn Guo 2021-03-11 1629 */
6d8d67988b1a2db Shawn Guo 2021-03-11 1630 static int sc8180x_pinctrl_add_tile_resources(struct platform_device *pdev)
6d8d67988b1a2db Shawn Guo 2021-03-11 1631 {
6d8d67988b1a2db Shawn Guo 2021-03-11 1632 int nres_num = pdev->num_resources + ARRAY_SIZE(sc8180x_tiles) - 1;
6d8d67988b1a2db Shawn Guo 2021-03-11 1633 struct resource *mres, *nres, *res;
6d8d67988b1a2db Shawn Guo 2021-03-11 1634 int i, ret;
6d8d67988b1a2db Shawn Guo 2021-03-11 1635
6d8d67988b1a2db Shawn Guo 2021-03-11 1636 /*
6d8d67988b1a2db Shawn Guo 2021-03-11 1637 * DT already has tiles defined properly, so nothing needs to be done
6d8d67988b1a2db Shawn Guo 2021-03-11 1638 * for DT probe.
6d8d67988b1a2db Shawn Guo 2021-03-11 1639 */
6d8d67988b1a2db Shawn Guo 2021-03-11 1640 if (pdev->dev.of_node)
6d8d67988b1a2db Shawn Guo 2021-03-11 1641 return 0;
6d8d67988b1a2db Shawn Guo 2021-03-11 1642
6d8d67988b1a2db Shawn Guo 2021-03-11 1643 /* Allocate for new resources */
6d8d67988b1a2db Shawn Guo 2021-03-11 1644 nres = devm_kzalloc(&pdev->dev, sizeof(*nres) * nres_num, GFP_KERNEL);
6d8d67988b1a2db Shawn Guo 2021-03-11 1645 if (!nres)
6d8d67988b1a2db Shawn Guo 2021-03-11 1646 return -ENOMEM;
6d8d67988b1a2db Shawn Guo 2021-03-11 1647
6d8d67988b1a2db Shawn Guo 2021-03-11 1648 res = nres;
6d8d67988b1a2db Shawn Guo 2021-03-11 1649
6d8d67988b1a2db Shawn Guo 2021-03-11 1650 for (i = 0; i < pdev->num_resources; i++) {
6d8d67988b1a2db Shawn Guo 2021-03-11 1651 struct resource *r = &pdev->resource[i];
6d8d67988b1a2db Shawn Guo 2021-03-11 1652
6d8d67988b1a2db Shawn Guo 2021-03-11 1653 /* Save memory resource and copy others */
6d8d67988b1a2db Shawn Guo 2021-03-11 1654 if (resource_type(r) == IORESOURCE_MEM)
6d8d67988b1a2db Shawn Guo 2021-03-11 1655 mres = r;
6d8d67988b1a2db Shawn Guo 2021-03-11 1656 else
6d8d67988b1a2db Shawn Guo 2021-03-11 1657 *res++ = *r;
6d8d67988b1a2db Shawn Guo 2021-03-11 1658 }
6d8d67988b1a2db Shawn Guo 2021-03-11 1659
6d8d67988b1a2db Shawn Guo 2021-03-11 1660 /* Append tile memory resources */
6d8d67988b1a2db Shawn Guo 2021-03-11 1661 for (i = 0; i < ARRAY_SIZE(sc8180x_tiles); i++, res++) {
6d8d67988b1a2db Shawn Guo 2021-03-11 1662 const struct tile_info *info = &sc8180x_tile_info[i];
6d8d67988b1a2db Shawn Guo 2021-03-11 1663
6d8d67988b1a2db Shawn Guo 2021-03-11 @1664 res->start = mres->start + info->offset;
6d8d67988b1a2db Shawn Guo 2021-03-11 1665 res->end = mres->start + info->offset + info->size - 1;
6d8d67988b1a2db Shawn Guo 2021-03-11 1666 res->flags = mres->flags;
6d8d67988b1a2db Shawn Guo 2021-03-11 1667 res->name = sc8180x_tiles[i];
6d8d67988b1a2db Shawn Guo 2021-03-11 1668
6d8d67988b1a2db Shawn Guo 2021-03-11 1669 /* Add new MEM to resource tree */
6d8d67988b1a2db Shawn Guo 2021-03-11 1670 insert_resource(mres->parent, res);
6d8d67988b1a2db Shawn Guo 2021-03-11 1671 }
6d8d67988b1a2db Shawn Guo 2021-03-11 1672
6d8d67988b1a2db Shawn Guo 2021-03-11 1673 /* Remove old MEM from resource tree */
6d8d67988b1a2db Shawn Guo 2021-03-11 1674 remove_resource(mres);
6d8d67988b1a2db Shawn Guo 2021-03-11 1675
6d8d67988b1a2db Shawn Guo 2021-03-11 1676 /* Free old resources and install new ones */
6d8d67988b1a2db Shawn Guo 2021-03-11 1677 ret = platform_device_add_resources(pdev, nres, nres_num);
6d8d67988b1a2db Shawn Guo 2021-03-11 1678 if (ret) {
6d8d67988b1a2db Shawn Guo 2021-03-11 1679 dev_err(&pdev->dev, "failed to add new resources: %d\n", ret);
6d8d67988b1a2db Shawn Guo 2021-03-11 1680 return ret;
6d8d67988b1a2db Shawn Guo 2021-03-11 1681 }
6d8d67988b1a2db Shawn Guo 2021-03-11 1682
6d8d67988b1a2db Shawn Guo 2021-03-11 1683 return 0;
6d8d67988b1a2db Shawn Guo 2021-03-11 1684 }
6d8d67988b1a2db Shawn Guo 2021-03-11 1685
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
reply other threads:[~2022-01-21 5:25 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=202201211317.RYE7ffKa-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.