BCC: [email protected] CC: [email protected] CC: [email protected] TO: Jens Wiklander <[email protected]> CC: Sumit Garg <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: dc164f4fb00a0abebdfff132f8bc7291a28f5401 commit: c51a564a5b48355f30309b84cdffe3f96d1ae0d3 optee: isolate smc abi date: 11 months ago :::::: branch date: 5 hours ago :::::: commit date: 11 months ago config: arm-randconfig-m041-20220921 (https://download.01.org/0day-ci/archive/20220922/[email protected]/config) compiler: arm-linux-gnueabi-gcc (GCC) 12.1.0 If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <[email protected]> | Reported-by: Dan Carpenter <[email protected]> smatch warnings: drivers/tee/optee/smc_abi.c:1222 optee_probe() warn: passing a valid pointer to 'PTR_ERR' vim +/PTR_ERR +1222 drivers/tee/optee/smc_abi.c c51a564a5b4835 Jens Wiklander 2021-07-21 1209 c51a564a5b4835 Jens Wiklander 2021-07-21 1210 static int optee_probe(struct platform_device *pdev) c51a564a5b4835 Jens Wiklander 2021-07-21 1211 { c51a564a5b4835 Jens Wiklander 2021-07-21 1212 optee_invoke_fn *invoke_fn; c51a564a5b4835 Jens Wiklander 2021-07-21 1213 struct tee_shm_pool *pool = ERR_PTR(-EINVAL); c51a564a5b4835 Jens Wiklander 2021-07-21 1214 struct optee *optee = NULL; c51a564a5b4835 Jens Wiklander 2021-07-21 1215 void *memremaped_shm = NULL; c51a564a5b4835 Jens Wiklander 2021-07-21 1216 struct tee_device *teedev; c51a564a5b4835 Jens Wiklander 2021-07-21 1217 u32 sec_caps; c51a564a5b4835 Jens Wiklander 2021-07-21 1218 int rc; c51a564a5b4835 Jens Wiklander 2021-07-21 1219 c51a564a5b4835 Jens Wiklander 2021-07-21 1220 invoke_fn = get_invoke_func(&pdev->dev); c51a564a5b4835 Jens Wiklander 2021-07-21 1221 if (IS_ERR(invoke_fn)) c51a564a5b4835 Jens Wiklander 2021-07-21 @1222 return PTR_ERR(invoke_fn); c51a564a5b4835 Jens Wiklander 2021-07-21 1223 c51a564a5b4835 Jens Wiklander 2021-07-21 1224 if (!optee_msg_api_uid_is_optee_api(invoke_fn)) { c51a564a5b4835 Jens Wiklander 2021-07-21 1225 pr_warn("api uid mismatch\n"); c51a564a5b4835 Jens Wiklander 2021-07-21 1226 return -EINVAL; c51a564a5b4835 Jens Wiklander 2021-07-21 1227 } c51a564a5b4835 Jens Wiklander 2021-07-21 1228 c51a564a5b4835 Jens Wiklander 2021-07-21 1229 optee_msg_get_os_revision(invoke_fn); c51a564a5b4835 Jens Wiklander 2021-07-21 1230 c51a564a5b4835 Jens Wiklander 2021-07-21 1231 if (!optee_msg_api_revision_is_compatible(invoke_fn)) { c51a564a5b4835 Jens Wiklander 2021-07-21 1232 pr_warn("api revision mismatch\n"); c51a564a5b4835 Jens Wiklander 2021-07-21 1233 return -EINVAL; c51a564a5b4835 Jens Wiklander 2021-07-21 1234 } c51a564a5b4835 Jens Wiklander 2021-07-21 1235 c51a564a5b4835 Jens Wiklander 2021-07-21 1236 if (!optee_msg_exchange_capabilities(invoke_fn, &sec_caps)) { c51a564a5b4835 Jens Wiklander 2021-07-21 1237 pr_warn("capabilities mismatch\n"); c51a564a5b4835 Jens Wiklander 2021-07-21 1238 return -EINVAL; c51a564a5b4835 Jens Wiklander 2021-07-21 1239 } c51a564a5b4835 Jens Wiklander 2021-07-21 1240 c51a564a5b4835 Jens Wiklander 2021-07-21 1241 /* c51a564a5b4835 Jens Wiklander 2021-07-21 1242 * Try to use dynamic shared memory if possible c51a564a5b4835 Jens Wiklander 2021-07-21 1243 */ c51a564a5b4835 Jens Wiklander 2021-07-21 1244 if (sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) c51a564a5b4835 Jens Wiklander 2021-07-21 1245 pool = optee_config_dyn_shm(); c51a564a5b4835 Jens Wiklander 2021-07-21 1246 c51a564a5b4835 Jens Wiklander 2021-07-21 1247 /* c51a564a5b4835 Jens Wiklander 2021-07-21 1248 * If dynamic shared memory is not available or failed - try static one c51a564a5b4835 Jens Wiklander 2021-07-21 1249 */ c51a564a5b4835 Jens Wiklander 2021-07-21 1250 if (IS_ERR(pool) && (sec_caps & OPTEE_SMC_SEC_CAP_HAVE_RESERVED_SHM)) c51a564a5b4835 Jens Wiklander 2021-07-21 1251 pool = optee_config_shm_memremap(invoke_fn, &memremaped_shm); c51a564a5b4835 Jens Wiklander 2021-07-21 1252 c51a564a5b4835 Jens Wiklander 2021-07-21 1253 if (IS_ERR(pool)) c51a564a5b4835 Jens Wiklander 2021-07-21 1254 return PTR_ERR(pool); c51a564a5b4835 Jens Wiklander 2021-07-21 1255 c51a564a5b4835 Jens Wiklander 2021-07-21 1256 optee = kzalloc(sizeof(*optee), GFP_KERNEL); c51a564a5b4835 Jens Wiklander 2021-07-21 1257 if (!optee) { c51a564a5b4835 Jens Wiklander 2021-07-21 1258 rc = -ENOMEM; c51a564a5b4835 Jens Wiklander 2021-07-21 1259 goto err; c51a564a5b4835 Jens Wiklander 2021-07-21 1260 } c51a564a5b4835 Jens Wiklander 2021-07-21 1261 c51a564a5b4835 Jens Wiklander 2021-07-21 1262 optee->ops = &optee_ops; c51a564a5b4835 Jens Wiklander 2021-07-21 1263 optee->smc.invoke_fn = invoke_fn; c51a564a5b4835 Jens Wiklander 2021-07-21 1264 optee->smc.sec_caps = sec_caps; c51a564a5b4835 Jens Wiklander 2021-07-21 1265 c51a564a5b4835 Jens Wiklander 2021-07-21 1266 teedev = tee_device_alloc(&optee_clnt_desc, NULL, pool, optee); c51a564a5b4835 Jens Wiklander 2021-07-21 1267 if (IS_ERR(teedev)) { c51a564a5b4835 Jens Wiklander 2021-07-21 1268 rc = PTR_ERR(teedev); c51a564a5b4835 Jens Wiklander 2021-07-21 1269 goto err; c51a564a5b4835 Jens Wiklander 2021-07-21 1270 } c51a564a5b4835 Jens Wiklander 2021-07-21 1271 optee->teedev = teedev; c51a564a5b4835 Jens Wiklander 2021-07-21 1272 c51a564a5b4835 Jens Wiklander 2021-07-21 1273 teedev = tee_device_alloc(&optee_supp_desc, NULL, pool, optee); c51a564a5b4835 Jens Wiklander 2021-07-21 1274 if (IS_ERR(teedev)) { c51a564a5b4835 Jens Wiklander 2021-07-21 1275 rc = PTR_ERR(teedev); c51a564a5b4835 Jens Wiklander 2021-07-21 1276 goto err; c51a564a5b4835 Jens Wiklander 2021-07-21 1277 } c51a564a5b4835 Jens Wiklander 2021-07-21 1278 optee->supp_teedev = teedev; c51a564a5b4835 Jens Wiklander 2021-07-21 1279 c51a564a5b4835 Jens Wiklander 2021-07-21 1280 rc = tee_device_register(optee->teedev); c51a564a5b4835 Jens Wiklander 2021-07-21 1281 if (rc) c51a564a5b4835 Jens Wiklander 2021-07-21 1282 goto err; c51a564a5b4835 Jens Wiklander 2021-07-21 1283 c51a564a5b4835 Jens Wiklander 2021-07-21 1284 rc = tee_device_register(optee->supp_teedev); c51a564a5b4835 Jens Wiklander 2021-07-21 1285 if (rc) c51a564a5b4835 Jens Wiklander 2021-07-21 1286 goto err; c51a564a5b4835 Jens Wiklander 2021-07-21 1287 c51a564a5b4835 Jens Wiklander 2021-07-21 1288 mutex_init(&optee->call_queue.mutex); c51a564a5b4835 Jens Wiklander 2021-07-21 1289 INIT_LIST_HEAD(&optee->call_queue.waiters); c51a564a5b4835 Jens Wiklander 2021-07-21 1290 optee_wait_queue_init(&optee->wait_queue); c51a564a5b4835 Jens Wiklander 2021-07-21 1291 optee_supp_init(&optee->supp); c51a564a5b4835 Jens Wiklander 2021-07-21 1292 optee->smc.memremaped_shm = memremaped_shm; c51a564a5b4835 Jens Wiklander 2021-07-21 1293 optee->pool = pool; c51a564a5b4835 Jens Wiklander 2021-07-21 1294 c51a564a5b4835 Jens Wiklander 2021-07-21 1295 /* c51a564a5b4835 Jens Wiklander 2021-07-21 1296 * Ensure that there are no pre-existing shm objects before enabling c51a564a5b4835 Jens Wiklander 2021-07-21 1297 * the shm cache so that there's no chance of receiving an invalid c51a564a5b4835 Jens Wiklander 2021-07-21 1298 * address during shutdown. This could occur, for example, if we're c51a564a5b4835 Jens Wiklander 2021-07-21 1299 * kexec booting from an older kernel that did not properly cleanup the c51a564a5b4835 Jens Wiklander 2021-07-21 1300 * shm cache. c51a564a5b4835 Jens Wiklander 2021-07-21 1301 */ c51a564a5b4835 Jens Wiklander 2021-07-21 1302 optee_disable_unmapped_shm_cache(optee); c51a564a5b4835 Jens Wiklander 2021-07-21 1303 c51a564a5b4835 Jens Wiklander 2021-07-21 1304 optee_enable_shm_cache(optee); c51a564a5b4835 Jens Wiklander 2021-07-21 1305 c51a564a5b4835 Jens Wiklander 2021-07-21 1306 if (optee->smc.sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) c51a564a5b4835 Jens Wiklander 2021-07-21 1307 pr_info("dynamic shared memory is enabled\n"); c51a564a5b4835 Jens Wiklander 2021-07-21 1308 c51a564a5b4835 Jens Wiklander 2021-07-21 1309 platform_set_drvdata(pdev, optee); c51a564a5b4835 Jens Wiklander 2021-07-21 1310 c51a564a5b4835 Jens Wiklander 2021-07-21 1311 rc = optee_enumerate_devices(PTA_CMD_GET_DEVICES); c51a564a5b4835 Jens Wiklander 2021-07-21 1312 if (rc) { c51a564a5b4835 Jens Wiklander 2021-07-21 1313 optee_smc_remove(pdev); c51a564a5b4835 Jens Wiklander 2021-07-21 1314 return rc; c51a564a5b4835 Jens Wiklander 2021-07-21 1315 } c51a564a5b4835 Jens Wiklander 2021-07-21 1316 c51a564a5b4835 Jens Wiklander 2021-07-21 1317 pr_info("initialized driver\n"); c51a564a5b4835 Jens Wiklander 2021-07-21 1318 return 0; c51a564a5b4835 Jens Wiklander 2021-07-21 1319 err: c51a564a5b4835 Jens Wiklander 2021-07-21 1320 if (optee) { c51a564a5b4835 Jens Wiklander 2021-07-21 1321 /* c51a564a5b4835 Jens Wiklander 2021-07-21 1322 * tee_device_unregister() is safe to call even if the c51a564a5b4835 Jens Wiklander 2021-07-21 1323 * devices hasn't been registered with c51a564a5b4835 Jens Wiklander 2021-07-21 1324 * tee_device_register() yet. c51a564a5b4835 Jens Wiklander 2021-07-21 1325 */ c51a564a5b4835 Jens Wiklander 2021-07-21 1326 tee_device_unregister(optee->supp_teedev); c51a564a5b4835 Jens Wiklander 2021-07-21 1327 tee_device_unregister(optee->teedev); c51a564a5b4835 Jens Wiklander 2021-07-21 1328 kfree(optee); c51a564a5b4835 Jens Wiklander 2021-07-21 1329 } c51a564a5b4835 Jens Wiklander 2021-07-21 1330 if (pool) c51a564a5b4835 Jens Wiklander 2021-07-21 1331 tee_shm_pool_free(pool); c51a564a5b4835 Jens Wiklander 2021-07-21 1332 if (memremaped_shm) c51a564a5b4835 Jens Wiklander 2021-07-21 1333 memunmap(memremaped_shm); c51a564a5b4835 Jens Wiklander 2021-07-21 1334 return rc; c51a564a5b4835 Jens Wiklander 2021-07-21 1335 } c51a564a5b4835 Jens Wiklander 2021-07-21 1336 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
