mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org, SrujanaChalla <schalla@marvell.com>
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>,
	kbuild-all@lists.01.org, linux-kernel@vger.kernel.org,
	Herbert Xu <herbert@gondor.apana.org.au>
Subject: [kbuild] drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c:1300 create_engine_group() error: we previously assumed 'mirrored_eng_grp' could be null (see line 1256)
Date: Mon, 9 Nov 2020 15:29:19 +0300	[thread overview]
Message-ID: <20201109122919.GN18329@kadam> (raw)

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

Hi SrujanaChalla,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git  master
head:   f8394f232b1eab649ce2df5c5f15b0e528c92091
commit: 6482023b9d3350bf1b756ef36e1ea1a1c871879c crypto: marvell - enable OcteonTX cpt options for build
config: x86_64-randconfig-m001-20201109 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 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>

New smatch warnings:
drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c:1300 create_engine_group() error: we previously assumed 'mirrored_eng_grp' could be null (see line 1256)

vim +/mirrored_eng_grp +1300 drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c

d9110b0b01ff1cd SrujanaChalla 2020-03-13  1206  static int create_engine_group(struct device *dev,
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1207  			       struct otx_cpt_eng_grps *eng_grps,
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1208  			       struct otx_cpt_engines *engs, int engs_cnt,
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1209  			       void *ucode_data[], int ucodes_cnt,
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1210  			       bool use_uc_from_tar_arch)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1211  {
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1212  	struct otx_cpt_eng_grp_info *mirrored_eng_grp;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1213  	struct tar_ucode_info_t *tar_info;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1214  	struct otx_cpt_eng_grp_info *eng_grp;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1215  	int i, ret = 0;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1216  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1217  	if (ucodes_cnt > OTX_CPT_MAX_ETYPES_PER_GRP)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1218  		return -EINVAL;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1219  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1220  	/* Validate if requested engine types are supported by this device */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1221  	for (i = 0; i < engs_cnt; i++)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1222  		if (!dev_supports_eng_type(eng_grps, engs[i].type)) {
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1223  			dev_err(dev, "Device does not support %s engines",
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1224  				get_eng_type_str(engs[i].type));
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1225  			return -EPERM;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1226  		}
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1227  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1228  	/* Find engine group which is not used */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1229  	eng_grp = find_unused_eng_grp(eng_grps);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1230  	if (!eng_grp) {
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1231  		dev_err(dev, "Error all engine groups are being used");
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1232  		return -ENOSPC;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1233  	}
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1234  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1235  	/* Load ucode */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1236  	for (i = 0; i < ucodes_cnt; i++) {
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1237  		if (use_uc_from_tar_arch) {
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1238  			tar_info = (struct tar_ucode_info_t *) ucode_data[i];
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1239  			eng_grp->ucode[i] = tar_info->ucode;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1240  			ret = copy_ucode_to_dma_mem(dev, &eng_grp->ucode[i],
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1241  						    tar_info->ucode_ptr);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1242  		} else
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1243  			ret = ucode_load(dev, &eng_grp->ucode[i],
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1244  					 (char *) ucode_data[i]);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1245  		if (ret)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1246  			goto err_ucode_unload;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1247  	}
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1248  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1249  	/* Validate scenario where 1 ucode is used */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1250  	ret = validate_1_ucode_scenario(dev, eng_grp, engs, engs_cnt);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1251  	if (ret)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1252  		goto err_ucode_unload;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1253  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1254  	/* Check if this group mirrors another existing engine group */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1255  	mirrored_eng_grp = find_mirrored_eng_grp(eng_grp);
d9110b0b01ff1cd SrujanaChalla 2020-03-13 @1256  	if (mirrored_eng_grp) {
                                                            ^^^^^^^^^^^^^^^^

d9110b0b01ff1cd SrujanaChalla 2020-03-13  1257  		/* Setup mirroring */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1258  		setup_eng_grp_mirroring(eng_grp, mirrored_eng_grp);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1259  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1260  		/*
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1261  		 * Update count of requested engines because some
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1262  		 * of them might be shared with mirrored group
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1263  		 */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1264  		update_requested_engs(mirrored_eng_grp, engs, engs_cnt);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1265  	}
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1266  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1267  	/* Reserve engines */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1268  	ret = reserve_engines(dev, eng_grp, engs, engs_cnt);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1269  	if (ret)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1270  		goto err_ucode_unload;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1271  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1272  	/* Update ucode pointers used by engines */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1273  	update_ucode_ptrs(eng_grp);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1274  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1275  	/* Update engine masks used by this group */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1276  	ret = eng_grp_update_masks(dev, eng_grp);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1277  	if (ret)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1278  		goto err_release_engs;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1279  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1280  	/* Create sysfs entry for engine group info */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1281  	ret = create_sysfs_eng_grps_info(dev, eng_grp);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1282  	if (ret)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1283  		goto err_release_engs;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1284  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1285  	/* Enable engine group */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1286  	ret = enable_eng_grp(eng_grp, eng_grps->obj);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1287  	if (ret)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1288  		goto err_release_engs;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1289  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1290  	/*
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1291  	 * If this engine group mirrors another engine group
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1292  	 * then we need to unload ucode as we will use ucode
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1293  	 * from mirrored engine group
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1294  	 */
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1295  	if (eng_grp->mirror.is_ena)
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1296  		ucode_unload(dev, &eng_grp->ucode[0]);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1297  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1298  	eng_grp->is_enabled = true;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1299  	if (eng_grp->mirror.is_ena)
d9110b0b01ff1cd SrujanaChalla 2020-03-13 @1300  		dev_info(dev,
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1301  			 "Engine_group%d: reuse microcode %s from group %d",
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1302  			 eng_grp->idx, mirrored_eng_grp->ucode[0].ver_str,
                                                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1303  			 mirrored_eng_grp->idx);
                                                                         ^^^^^^^^^^^^^^^^^^^^^
Unchecked dereferences.

Possibly the "eng_grp->mirror.is_ena" means this is a false positive.
Too hard to tell without more context.

d9110b0b01ff1cd SrujanaChalla 2020-03-13  1304  	else
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1305  		dev_info(dev, "Engine_group%d: microcode loaded %s",
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1306  			 eng_grp->idx, eng_grp->ucode[0].ver_str);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1307  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1308  	return 0;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1309  
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1310  err_release_engs:
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1311  	release_engines(dev, eng_grp);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1312  err_ucode_unload:
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1313  	ucode_unload(dev, &eng_grp->ucode[0]);
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1314  	return ret;
d9110b0b01ff1cd SrujanaChalla 2020-03-13  1315  }


[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 44877 bytes --]

[-- Attachment #3: Type: text/plain, Size: 149 bytes --]

_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-leave@lists.01.org

             reply	other threads:[~2020-11-09 12:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-09 12:29 Dan Carpenter [this message]
2020-11-10  7:01 ` Herbert Xu

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=20201109122919.GN18329@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=error27@gmail.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=kbuild-all@lists.01.org \
    --cc=kbuild@lists.01.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=schalla@marvell.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®