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 <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@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-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to