From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org
Subject: drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
Date: Wed, 03 Mar 2021 08:49:18 +0300 [thread overview]
Message-ID: <20210303054918.GX2087@kadam> (raw)
[-- Attachment #1: Type: text/plain, Size: 9545 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 7a7fd0de4a9804299793e564a555a49c1fc924cb
commit: 803eb124e1a64e42888542c3444bfe6dac412c7f mtd: parsers: Add Qcom SMEM parser
config: nds32-randconfig-m031-20210302 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
vim +/PTR_ERR +109 drivers/mtd/parsers/qcomsmempart.c
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 57 static int parse_qcomsmem_part(struct mtd_info *mtd,
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 58 const struct mtd_partition **pparts,
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 59 struct mtd_part_parser_data *data)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 60 {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 61 struct smem_flash_pentry *pentry;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 62 struct smem_flash_ptable *ptable;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 63 size_t len = SMEM_FLASH_PTABLE_HDR_LEN;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 64 struct mtd_partition *parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 65 int ret, i, numparts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 66 char *name, *c;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 67
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 68 pr_debug("Parsing partition table info from SMEM\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 69 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 70 if (IS_ERR(ptable)) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 71 pr_err("Error reading partition table header\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 72 return PTR_ERR(ptable);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 73 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 74
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 75 /* Verify ptable magic */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 76 if (le32_to_cpu(ptable->magic1) != SMEM_FLASH_PART_MAGIC1 ||
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 77 le32_to_cpu(ptable->magic2) != SMEM_FLASH_PART_MAGIC2) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 78 pr_err("Partition table magic verification failed\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 79 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 80 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 81
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 82 /* Ensure that # of partitions is less than the max we have allocated */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 83 numparts = le32_to_cpu(ptable->numparts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 84 if (numparts > SMEM_FLASH_PTABLE_MAX_PARTS_V4) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 85 pr_err("Partition numbers exceed the max limit\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 86 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 87 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 88
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 89 /* Find out length of partition data based on table version */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 90 if (le32_to_cpu(ptable->version) <= SMEM_FLASH_PTABLE_V3) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 91 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V3 *
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 92 sizeof(struct smem_flash_pentry);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 93 } else if (le32_to_cpu(ptable->version) == SMEM_FLASH_PTABLE_V4) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 94 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V4 *
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 95 sizeof(struct smem_flash_pentry);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 96 } else {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 97 pr_err("Unknown ptable version (%d)", le32_to_cpu(ptable->version));
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 98 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 99 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 100
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 101 /*
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 102 * Now that the partition table header has been parsed, verified
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 103 * and the length of the partition table calculated, read the
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 104 * complete partition table
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 105 */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 106 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 107 if (IS_ERR_OR_NULL(ptable)) {
^^^^^^^^^^^^^^^^^^^^^^
This should be IS_ERR(). The qcom_smem_get() function doesn't return
NULL.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 108 pr_err("Error reading partition table\n");
When a function returns both error pointers and NULL, the NULL return
is a special case of success where the feature isn't able because it
has be deliberately disabled. The NULL return should not generate an
error message.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 @109 return PTR_ERR(ptable);
PTR_ERR(NULL) is success. But let's just fix the IS_ERR_OR_NULL() check
to IS_ERR() so we don't have to wonder if returning success is
intentional.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 110 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 111
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 112 parts = kcalloc(numparts, sizeof(*parts), GFP_KERNEL);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 113 if (!parts)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 114 return -ENOMEM;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 115
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 116 for (i = 0; i < numparts; i++) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 117 pentry = &ptable->pentry[i];
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 118 if (pentry->name[0] == '\0')
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 119 continue;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 120
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 121 name = kstrdup(pentry->name, GFP_KERNEL);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 122 if (!name) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 123 ret = -ENOMEM;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 124 goto out_free_parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 125 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 126
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 127 /* Convert name to lower case */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 128 for (c = name; *c != '\0'; c++)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 129 *c = tolower(*c);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 130
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 131 parts[i].name = name;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 132 parts[i].offset = le32_to_cpu(pentry->offset) * mtd->erasesize;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 133 parts[i].mask_flags = pentry->attr;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 134 parts[i].size = le32_to_cpu(pentry->length) * mtd->erasesize;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 135 pr_debug("%d: %s offs=0x%08x size=0x%08x attr:0x%08x\n",
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 136 i, pentry->name, le32_to_cpu(pentry->offset),
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 137 le32_to_cpu(pentry->length), pentry->attr);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 138 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 139
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 140 pr_debug("SMEM partition table found: ver: %d len: %d\n",
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 141 le32_to_cpu(ptable->version), numparts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 142 *pparts = parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 143
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 144 return numparts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 145
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 146 out_free_parts:
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 147 while (--i >= 0)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 148 kfree(parts[i].name);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 149 kfree(parts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 150 *pparts = NULL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 151
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 152 return ret;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 153 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 28262 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
Date: Wed, 03 Mar 2021 08:49:18 +0300 [thread overview]
Message-ID: <20210303054918.GX2087@kadam> (raw)
[-- Attachment #1: Type: text/plain, Size: 9545 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 7a7fd0de4a9804299793e564a555a49c1fc924cb
commit: 803eb124e1a64e42888542c3444bfe6dac412c7f mtd: parsers: Add Qcom SMEM parser
config: nds32-randconfig-m031-20210302 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
vim +/PTR_ERR +109 drivers/mtd/parsers/qcomsmempart.c
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 57 static int parse_qcomsmem_part(struct mtd_info *mtd,
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 58 const struct mtd_partition **pparts,
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 59 struct mtd_part_parser_data *data)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 60 {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 61 struct smem_flash_pentry *pentry;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 62 struct smem_flash_ptable *ptable;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 63 size_t len = SMEM_FLASH_PTABLE_HDR_LEN;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 64 struct mtd_partition *parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 65 int ret, i, numparts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 66 char *name, *c;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 67
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 68 pr_debug("Parsing partition table info from SMEM\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 69 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 70 if (IS_ERR(ptable)) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 71 pr_err("Error reading partition table header\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 72 return PTR_ERR(ptable);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 73 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 74
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 75 /* Verify ptable magic */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 76 if (le32_to_cpu(ptable->magic1) != SMEM_FLASH_PART_MAGIC1 ||
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 77 le32_to_cpu(ptable->magic2) != SMEM_FLASH_PART_MAGIC2) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 78 pr_err("Partition table magic verification failed\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 79 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 80 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 81
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 82 /* Ensure that # of partitions is less than the max we have allocated */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 83 numparts = le32_to_cpu(ptable->numparts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 84 if (numparts > SMEM_FLASH_PTABLE_MAX_PARTS_V4) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 85 pr_err("Partition numbers exceed the max limit\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 86 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 87 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 88
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 89 /* Find out length of partition data based on table version */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 90 if (le32_to_cpu(ptable->version) <= SMEM_FLASH_PTABLE_V3) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 91 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V3 *
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 92 sizeof(struct smem_flash_pentry);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 93 } else if (le32_to_cpu(ptable->version) == SMEM_FLASH_PTABLE_V4) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 94 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V4 *
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 95 sizeof(struct smem_flash_pentry);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 96 } else {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 97 pr_err("Unknown ptable version (%d)", le32_to_cpu(ptable->version));
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 98 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 99 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 100
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 101 /*
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 102 * Now that the partition table header has been parsed, verified
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 103 * and the length of the partition table calculated, read the
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 104 * complete partition table
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 105 */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 106 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 107 if (IS_ERR_OR_NULL(ptable)) {
^^^^^^^^^^^^^^^^^^^^^^
This should be IS_ERR(). The qcom_smem_get() function doesn't return
NULL.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 108 pr_err("Error reading partition table\n");
When a function returns both error pointers and NULL, the NULL return
is a special case of success where the feature isn't able because it
has be deliberately disabled. The NULL return should not generate an
error message.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 @109 return PTR_ERR(ptable);
PTR_ERR(NULL) is success. But let's just fix the IS_ERR_OR_NULL() check
to IS_ERR() so we don't have to wonder if returning success is
intentional.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 110 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 111
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 112 parts = kcalloc(numparts, sizeof(*parts), GFP_KERNEL);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 113 if (!parts)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 114 return -ENOMEM;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 115
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 116 for (i = 0; i < numparts; i++) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 117 pentry = &ptable->pentry[i];
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 118 if (pentry->name[0] == '\0')
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 119 continue;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 120
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 121 name = kstrdup(pentry->name, GFP_KERNEL);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 122 if (!name) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 123 ret = -ENOMEM;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 124 goto out_free_parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 125 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 126
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 127 /* Convert name to lower case */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 128 for (c = name; *c != '\0'; c++)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 129 *c = tolower(*c);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 130
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 131 parts[i].name = name;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 132 parts[i].offset = le32_to_cpu(pentry->offset) * mtd->erasesize;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 133 parts[i].mask_flags = pentry->attr;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 134 parts[i].size = le32_to_cpu(pentry->length) * mtd->erasesize;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 135 pr_debug("%d: %s offs=0x%08x size=0x%08x attr:0x%08x\n",
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 136 i, pentry->name, le32_to_cpu(pentry->offset),
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 137 le32_to_cpu(pentry->length), pentry->attr);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 138 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 139
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 140 pr_debug("SMEM partition table found: ver: %d len: %d\n",
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 141 le32_to_cpu(ptable->version), numparts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 142 *pparts = parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 143
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 144 return numparts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 145
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 146 out_free_parts:
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 147 while (--i >= 0)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 148 kfree(parts[i].name);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 149 kfree(parts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 150 *pparts = NULL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 151
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 152 return ret;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 153 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 28262 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org,
Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Cc: lkp@intel.com, kbuild-all@lists.01.org,
linux-kernel@vger.kernel.org,
Miquel Raynal <miquel.raynal@bootlin.com>
Subject: drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
Date: Wed, 3 Mar 2021 08:49:18 +0300 [thread overview]
Message-ID: <20210303054918.GX2087@kadam> (raw)
[-- Attachment #1: Type: text/plain, Size: 9412 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 7a7fd0de4a9804299793e564a555a49c1fc924cb
commit: 803eb124e1a64e42888542c3444bfe6dac412c7f mtd: parsers: Add Qcom SMEM parser
config: nds32-randconfig-m031-20210302 (attached as .config)
compiler: nds32le-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR'
vim +/PTR_ERR +109 drivers/mtd/parsers/qcomsmempart.c
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 57 static int parse_qcomsmem_part(struct mtd_info *mtd,
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 58 const struct mtd_partition **pparts,
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 59 struct mtd_part_parser_data *data)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 60 {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 61 struct smem_flash_pentry *pentry;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 62 struct smem_flash_ptable *ptable;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 63 size_t len = SMEM_FLASH_PTABLE_HDR_LEN;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 64 struct mtd_partition *parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 65 int ret, i, numparts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 66 char *name, *c;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 67
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 68 pr_debug("Parsing partition table info from SMEM\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 69 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 70 if (IS_ERR(ptable)) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 71 pr_err("Error reading partition table header\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 72 return PTR_ERR(ptable);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 73 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 74
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 75 /* Verify ptable magic */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 76 if (le32_to_cpu(ptable->magic1) != SMEM_FLASH_PART_MAGIC1 ||
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 77 le32_to_cpu(ptable->magic2) != SMEM_FLASH_PART_MAGIC2) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 78 pr_err("Partition table magic verification failed\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 79 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 80 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 81
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 82 /* Ensure that # of partitions is less than the max we have allocated */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 83 numparts = le32_to_cpu(ptable->numparts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 84 if (numparts > SMEM_FLASH_PTABLE_MAX_PARTS_V4) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 85 pr_err("Partition numbers exceed the max limit\n");
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 86 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 87 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 88
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 89 /* Find out length of partition data based on table version */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 90 if (le32_to_cpu(ptable->version) <= SMEM_FLASH_PTABLE_V3) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 91 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V3 *
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 92 sizeof(struct smem_flash_pentry);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 93 } else if (le32_to_cpu(ptable->version) == SMEM_FLASH_PTABLE_V4) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 94 len = SMEM_FLASH_PTABLE_HDR_LEN + SMEM_FLASH_PTABLE_MAX_PARTS_V4 *
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 95 sizeof(struct smem_flash_pentry);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 96 } else {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 97 pr_err("Unknown ptable version (%d)", le32_to_cpu(ptable->version));
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 98 return -EINVAL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 99 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 100
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 101 /*
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 102 * Now that the partition table header has been parsed, verified
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 103 * and the length of the partition table calculated, read the
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 104 * complete partition table
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 105 */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 106 ptable = qcom_smem_get(SMEM_APPS, SMEM_AARM_PARTITION_TABLE, &len);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 107 if (IS_ERR_OR_NULL(ptable)) {
^^^^^^^^^^^^^^^^^^^^^^
This should be IS_ERR(). The qcom_smem_get() function doesn't return
NULL.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 108 pr_err("Error reading partition table\n");
When a function returns both error pointers and NULL, the NULL return
is a special case of success where the feature isn't able because it
has be deliberately disabled. The NULL return should not generate an
error message.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 @109 return PTR_ERR(ptable);
PTR_ERR(NULL) is success. But let's just fix the IS_ERR_OR_NULL() check
to IS_ERR() so we don't have to wonder if returning success is
intentional.
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 110 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 111
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 112 parts = kcalloc(numparts, sizeof(*parts), GFP_KERNEL);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 113 if (!parts)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 114 return -ENOMEM;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 115
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 116 for (i = 0; i < numparts; i++) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 117 pentry = &ptable->pentry[i];
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 118 if (pentry->name[0] == '\0')
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 119 continue;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 120
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 121 name = kstrdup(pentry->name, GFP_KERNEL);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 122 if (!name) {
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 123 ret = -ENOMEM;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 124 goto out_free_parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 125 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 126
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 127 /* Convert name to lower case */
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 128 for (c = name; *c != '\0'; c++)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 129 *c = tolower(*c);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 130
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 131 parts[i].name = name;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 132 parts[i].offset = le32_to_cpu(pentry->offset) * mtd->erasesize;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 133 parts[i].mask_flags = pentry->attr;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 134 parts[i].size = le32_to_cpu(pentry->length) * mtd->erasesize;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 135 pr_debug("%d: %s offs=0x%08x size=0x%08x attr:0x%08x\n",
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 136 i, pentry->name, le32_to_cpu(pentry->offset),
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 137 le32_to_cpu(pentry->length), pentry->attr);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 138 }
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 139
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 140 pr_debug("SMEM partition table found: ver: %d len: %d\n",
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 141 le32_to_cpu(ptable->version), numparts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 142 *pparts = parts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 143
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 144 return numparts;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 145
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 146 out_free_parts:
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 147 while (--i >= 0)
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 148 kfree(parts[i].name);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 149 kfree(parts);
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 150 *pparts = NULL;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 151
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 152 return ret;
803eb124e1a64e Manivannan Sadhasivam 2021-01-04 153 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28262 bytes --]
next reply other threads:[~2021-03-03 5:49 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-03 5:49 Dan Carpenter [this message]
2021-03-03 5:49 ` drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn: passing zero to 'PTR_ERR' Dan Carpenter
2021-03-03 5:49 ` Dan Carpenter
2021-03-03 8:48 ` Miquel Raynal
2021-03-03 11:08 ` Dan Carpenter
2021-03-03 11:08 ` Dan Carpenter
2021-03-03 11:08 ` Dan Carpenter
2021-03-03 16:27 ` Manivannan Sadhasivam
2021-03-03 16:27 ` Manivannan Sadhasivam
-- strict thread matches above, loose matches on Subject: below --
2021-03-02 18:27 kernel test robot
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=20210303054918.GX2087@kadam \
--to=dan.carpenter@oracle.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.