[cris:scmi_telemetry_ng_V8 22/30] drivers/firmware/arm_scmi/driver.c:2342 scmi_alloc_init_protocol_instance() error: we previously assumed 'pi' could be null (see line 2292)

Dan Carpenter <[email protected]>
Newsgroups dev.linux.lists.oe-kbuild
Message-ID <20260810085710.SY6oz2Dy9yD-fc7dlIhb0cYQ8VYN8oQI3aVJ4IQzG8I@z>
tree:   https://git.kernel.org/pub/scm/linux/kernel/git/cris/linux.git scmi_telemetry_ng_V8
head:   bc3b27dd68cfc244c1e7717b72f88b2dfcb28d2e
commit: 794ab60bbda9339aa782a6ce4a77e4e496538fb9 [22/30] firmware: arm_scmi: Add common per-protocol debugfs support
config: arm-randconfig-r071-20260809 (https://download.01.org/0day-ci/archive/20260810/[email protected]/config)
compiler: arm-linux-gnueabi-gcc (GCC) 8.5.0
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Reported-by: Dan Carpenter <[email protected]>
| Closes: https://lore.kernel.org/r/[email protected]/

smatch warnings:
drivers/firmware/arm_scmi/driver.c:2342 scmi_alloc_init_protocol_instance() error: we previously assumed 'pi' could be null (see line 2292)

vim +/pi +2342 drivers/firmware/arm_scmi/driver.c

48dc16e2e52ca38 Cristian Marussi 2021-03-16  2275  static struct scmi_protocol_instance *
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2276  scmi_alloc_init_protocol_instance(struct scmi_info *info,
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2277  				  const struct scmi_protocol *proto)
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2278  {
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2279  	int ret = -ENOMEM;
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2280  	void *gid;
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2281  	struct scmi_protocol_instance *pi;
f0e73cee26dd3ed Cristian Marussi 2021-03-16  2282  	const struct scmi_handle *handle = &info->handle;
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2283  
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2284  	/* Protocol specific devres group */
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2285  	gid = devres_open_group(handle->dev, NULL, GFP_KERNEL);
f5800e0bf6f9b7f Cristian Marussi 2021-03-16  2286  	if (!gid) {
fc110108b98305e Cristian Marussi 2024-04-18  2287  		scmi_protocol_put(proto);
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2288  		goto out;
f5800e0bf6f9b7f Cristian Marussi 2021-03-16  2289  	}
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2290  
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2291  	pi = devm_kzalloc(handle->dev, sizeof(*pi), GFP_KERNEL);
48dc16e2e52ca38 Cristian Marussi 2021-03-16 @2292  	if (!pi)
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2293  		goto clean;

pi is NULL

48dc16e2e52ca38 Cristian Marussi 2021-03-16  2294  
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2295  	pi->gid = gid;
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2296  	pi->proto = proto;
d7b6cc563a60076 Cristian Marussi 2021-03-16  2297  	pi->handle = handle;
d7b6cc563a60076 Cristian Marussi 2021-03-16  2298  	pi->ph.dev = handle->dev;
a4a20b0975dc7b1 Cristian Marussi 2021-03-16  2299  	pi->ph.xops = &xfer_ops;
5c873d120d8676b Cristian Marussi 2022-03-30  2300  	pi->ph.hops = &helpers_ops;
d7b6cc563a60076 Cristian Marussi 2021-03-16  2301  	pi->ph.set_priv = scmi_set_protocol_priv;
d7b6cc563a60076 Cristian Marussi 2021-03-16  2302  	pi->ph.get_priv = scmi_get_protocol_priv;
07e4ec9fe678323 Cristian Marussi 2025-02-28  2303  	pi->ph.instance_notifier_register = scmi_register_instance_notifier;
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2304  	refcount_set(&pi->users, 1);
0fac05fdd9afff6 Cristian Marussi 2025-12-27  2305  
0fac05fdd9afff6 Cristian Marussi 2025-12-27  2306  	/*
0fac05fdd9afff6 Cristian Marussi 2025-12-27  2307  	 * Initialize effectively used protocol version performing any
0fac05fdd9afff6 Cristian Marussi 2025-12-27  2308  	 * possibly needed negotiations.
0fac05fdd9afff6 Cristian Marussi 2025-12-27  2309  	 */
0fac05fdd9afff6 Cristian Marussi 2025-12-27  2310  	scmi_protocol_version_initialize(handle->dev, pi);
0fac05fdd9afff6 Cristian Marussi 2025-12-27  2311  
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2312  	/* proto->init is assured NON NULL by scmi_protocol_register */
a4a20b0975dc7b1 Cristian Marussi 2021-03-16  2313  	ret = pi->proto->instance_init(&pi->ph);
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2314  	if (ret)
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2315  		goto clean;
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2316  
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2317  	ret = idr_alloc(&info->protocols, pi, proto->id, proto->id + 1,
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2318  			GFP_KERNEL);
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2319  	if (ret != proto->id)
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2320  		goto clean;
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2321  
533c7095b1ff927 Cristian Marussi 2021-03-16  2322  	/*
533c7095b1ff927 Cristian Marussi 2021-03-16  2323  	 * Warn but ignore events registration errors since we do not want
533c7095b1ff927 Cristian Marussi 2021-03-16  2324  	 * to skip whole protocols if their notifications are messed up.
533c7095b1ff927 Cristian Marussi 2021-03-16  2325  	 */
533c7095b1ff927 Cristian Marussi 2021-03-16  2326  	if (pi->proto->events) {
533c7095b1ff927 Cristian Marussi 2021-03-16  2327  		ret = scmi_register_protocol_events(handle, pi->proto->id,
b9f7fd907c38a38 Cristian Marussi 2021-03-16  2328  						    &pi->ph,
533c7095b1ff927 Cristian Marussi 2021-03-16  2329  						    pi->proto->events);
533c7095b1ff927 Cristian Marussi 2021-03-16  2330  		if (ret)
533c7095b1ff927 Cristian Marussi 2021-03-16  2331  			dev_warn(handle->dev,
533c7095b1ff927 Cristian Marussi 2021-03-16  2332  				 "Protocol:%X - Events Registration Failed - err:%d\n",
533c7095b1ff927 Cristian Marussi 2021-03-16  2333  				 pi->proto->id, ret);
533c7095b1ff927 Cristian Marussi 2021-03-16  2334  	}
533c7095b1ff927 Cristian Marussi 2021-03-16  2335  
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2336  	devres_close_group(handle->dev, pi->gid);
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2337  	dev_dbg(handle->dev, "Initialized protocol: 0x%X\n", pi->proto->id);
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2338  
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2339  	return pi;
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2340  
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2341  clean:
794ab60bbda9339 Cristian Marussi 2023-03-15 @2342  	debugfs_remove_recursive(pi->dbg);
                                                                                 ^^^^^^^
Dereferenced.

f5800e0bf6f9b7f Cristian Marussi 2021-03-16  2343  	/* Take care to put the protocol module's owner before releasing all */
fc110108b98305e Cristian Marussi 2024-04-18  2344  	scmi_protocol_put(proto);
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2345  	devres_release_group(handle->dev, gid);
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2346  out:
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2347  	return ERR_PTR(ret);
48dc16e2e52ca38 Cristian Marussi 2021-03-16  2348  }

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.