lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 3 Mar 2021 08:49:18 +0300
From:   Dan Carpenter <dan.carpenter@...cle.com>
To:     kbuild@...ts.01.org,
        Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>
Cc:     lkp@...el.com, kbuild-all@...ts.01.org,
        linux-kernel@...r.kernel.org,
        Miquel Raynal <miquel.raynal@...tlin.com>
Subject: drivers/mtd/parsers/qcomsmempart.c:109 parse_qcomsmem_part() warn:
 passing zero to 'PTR_ERR'

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@...el.com>
Reported-by: Dan Carpenter <dan.carpenter@...cle.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

Download attachment ".config.gz" of type "application/gzip" (28262 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ