:::::: :::::: Manual check reason: "low confidence bisect report" :::::: Manual check reason: "low confidence static check warning: drivers/crypto/ycc/ycc_aead.c:376:13: warning: use of uninitialized value '' [CWE-457] [-Wanalyzer-use-of-uninitialized-value]" :::::: BCC: lkp@intel.com CC: oe-kbuild-all@lists.linux.dev In-Reply-To: <1666691616-69983-7-git-send-email-guanjun@linux.alibaba.com> References: <1666691616-69983-7-git-send-email-guanjun@linux.alibaba.com> TO: "'Guanjun'" TO: herbert@gondor.apana.org.au TO: elliott@hpe.com CC: zelin.deng@linux.alibaba.com CC: artie.ding@linux.alibaba.com CC: guanjun@linux.alibaba.com CC: linux-crypto@vger.kernel.org CC: linux-kernel@vger.kernel.org CC: xuchun.shang@linux.alibaba.com Hi 'Guanjun', Thank you for the patch! Perhaps something to improve: [auto build test WARNING on herbert-cryptodev-2.6/master] [also build test WARNING on herbert-crypto-2.6/master linus/master v6.1-rc2 next-20221027] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Guanjun/Drivers-for-Alibaba-YCC-Yitian-Cryptography-Complex-cryptographic-accelerator/20221025-180005 base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master patch link: https://lore.kernel.org/r/1666691616-69983-7-git-send-email-guanjun%40linux.alibaba.com patch subject: [PATCH v3 6/9] crypto/ycc: Add aead algorithm support :::::: branch date: 3 days ago :::::: commit date: 3 days ago config: arm-randconfig-c002-20221026 compiler: arm-linux-gnueabi-gcc (GCC) 12.1.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/04c66693149fbf08645a6f86656cf27c07ab1cd0 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Guanjun/Drivers-for-Alibaba-YCC-Yitian-Cryptography-Complex-cryptographic-accelerator/20221025-180005 git checkout 04c66693149fbf08645a6f86656cf27c07ab1cd0 # save the config file COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot gcc_analyzer warnings: (new ones prefixed by >>) drivers/crypto/ycc/ycc_aead.c: In function 'ycc_aead_submit_desc': drivers/crypto/ycc/ycc_aead.c:440:33: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 440 | req->desc.private_ptr = (u64)aflags; | ^ >> drivers/crypto/ycc/ycc_aead.c:376:13: warning: use of uninitialized value '' [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 376 | u16 new_aad_len; | ^~~~~~~~~~~ 'ycc_aead_submit_desc': event 1 | | 376 | u16 new_aad_len; | | ^~~~~~~~~~~ | | | | | (1) use of uninitialized value '' here | drivers/crypto/ycc/ycc_aead.c:377:13: warning: use of uninitialized value '' [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 377 | u32 new_cryptlen; | ^~~~~~~~~~~~ 'ycc_aead_submit_desc': event 1 | | 377 | u32 new_cryptlen; | | ^~~~~~~~~~~~ | | | | | (1) use of uninitialized value '' here | vim +376 drivers/crypto/ycc/ycc_aead.c 04c66693149fbf Guanjun 2022-10-25 368 04c66693149fbf Guanjun 2022-10-25 369 static int ycc_aead_submit_desc(struct aead_request *aead_req, u8 cmd) 04c66693149fbf Guanjun 2022-10-25 370 { 04c66693149fbf Guanjun 2022-10-25 371 struct crypto_aead *tfm = crypto_aead_reqtfm(aead_req); 04c66693149fbf Guanjun 2022-10-25 372 struct ycc_crypto_ctx *ctx = crypto_aead_ctx(tfm); 04c66693149fbf Guanjun 2022-10-25 373 struct ycc_crypto_req *req = aead_request_ctx(aead_req); 04c66693149fbf Guanjun 2022-10-25 374 struct ycc_flags *aflags; 04c66693149fbf Guanjun 2022-10-25 375 int taglen = crypto_aead_authsize(tfm); 04c66693149fbf Guanjun 2022-10-25 @376 u16 new_aad_len; 04c66693149fbf Guanjun 2022-10-25 377 u32 new_cryptlen; 04c66693149fbf Guanjun 2022-10-25 378 struct crypto_aes_ctx aes_ctx; 04c66693149fbf Guanjun 2022-10-25 379 u8 tag[16]; 04c66693149fbf Guanjun 2022-10-25 380 u8 ziv[16] = {0}; 04c66693149fbf Guanjun 2022-10-25 381 __be32 counter = cpu_to_be32(1); 04c66693149fbf Guanjun 2022-10-25 382 int ret = 0; 04c66693149fbf Guanjun 2022-10-25 383 04c66693149fbf Guanjun 2022-10-25 384 /* 04c66693149fbf Guanjun 2022-10-25 385 * YCC hw does not support gcm zero length plaintext. According to spec 04c66693149fbf Guanjun 2022-10-25 386 * if cryptlen is 0, just do aes_encrypt against IV 04c66693149fbf Guanjun 2022-10-25 387 */ 04c66693149fbf Guanjun 2022-10-25 388 if (aead_req->cryptlen == 0 && cmd == YCC_CMD_GCM_ENC) { 04c66693149fbf Guanjun 2022-10-25 389 ret = aes_expandkey(&aes_ctx, ctx->cipher_key, ctx->keysize); 04c66693149fbf Guanjun 2022-10-25 390 if (ret) 04c66693149fbf Guanjun 2022-10-25 391 return ret; 04c66693149fbf Guanjun 2022-10-25 392 memcpy(ziv, aead_req->iv, 12); 04c66693149fbf Guanjun 2022-10-25 393 memcpy(ziv + 12, &counter, 4); 04c66693149fbf Guanjun 2022-10-25 394 aes_encrypt(&aes_ctx, tag, ziv); 04c66693149fbf Guanjun 2022-10-25 395 sg_copy_from_buffer(aead_req->dst, 04c66693149fbf Guanjun 2022-10-25 396 sg_nents_for_len(aead_req->dst, taglen), 04c66693149fbf Guanjun 2022-10-25 397 tag, taglen); 04c66693149fbf Guanjun 2022-10-25 398 return 0; 04c66693149fbf Guanjun 2022-10-25 399 } 04c66693149fbf Guanjun 2022-10-25 400 04c66693149fbf Guanjun 2022-10-25 401 if (aead_req->cryptlen == taglen && cmd == YCC_CMD_GCM_DEC) { 04c66693149fbf Guanjun 2022-10-25 402 ret = aes_expandkey(&aes_ctx, ctx->cipher_key, ctx->keysize); 04c66693149fbf Guanjun 2022-10-25 403 if (ret) 04c66693149fbf Guanjun 2022-10-25 404 return ret; 04c66693149fbf Guanjun 2022-10-25 405 /* Skip aad */ 04c66693149fbf Guanjun 2022-10-25 406 sg_copy_buffer(aead_req->src, 04c66693149fbf Guanjun 2022-10-25 407 sg_nents_for_len(aead_req->src, taglen), 04c66693149fbf Guanjun 2022-10-25 408 tag, taglen, aead_req->assoclen, 1); 04c66693149fbf Guanjun 2022-10-25 409 aes_decrypt(&aes_ctx, ziv, tag); 04c66693149fbf Guanjun 2022-10-25 410 sg_copy_from_buffer(aead_req->dst, 04c66693149fbf Guanjun 2022-10-25 411 sg_nents_for_len(aead_req->dst, taglen), 04c66693149fbf Guanjun 2022-10-25 412 ziv, taglen); 04c66693149fbf Guanjun 2022-10-25 413 return 0; 04c66693149fbf Guanjun 2022-10-25 414 } 04c66693149fbf Guanjun 2022-10-25 415 04c66693149fbf Guanjun 2022-10-25 416 memset(req, 0, sizeof(*req)); 04c66693149fbf Guanjun 2022-10-25 417 req->ctx = ctx; 04c66693149fbf Guanjun 2022-10-25 418 req->aead_req = aead_req; 04c66693149fbf Guanjun 2022-10-25 419 04c66693149fbf Guanjun 2022-10-25 420 ret = ycc_aead_fill_key(req); 04c66693149fbf Guanjun 2022-10-25 421 if (ret) 04c66693149fbf Guanjun 2022-10-25 422 return ret; 04c66693149fbf Guanjun 2022-10-25 423 04c66693149fbf Guanjun 2022-10-25 424 req->src_vaddr = ycc_aead_format_data(req, &new_aad_len, &new_cryptlen, cmd); 04c66693149fbf Guanjun 2022-10-25 425 if (!req->src_vaddr) 04c66693149fbf Guanjun 2022-10-25 426 goto free_key; 04c66693149fbf Guanjun 2022-10-25 427 04c66693149fbf Guanjun 2022-10-25 428 ret = ycc_aead_sg_map(req); 04c66693149fbf Guanjun 2022-10-25 429 if (ret) 04c66693149fbf Guanjun 2022-10-25 430 goto unformat; 04c66693149fbf Guanjun 2022-10-25 431 04c66693149fbf Guanjun 2022-10-25 432 ret = -ENOMEM; 04c66693149fbf Guanjun 2022-10-25 433 aflags = kzalloc(sizeof(struct ycc_flags), GFP_ATOMIC); 04c66693149fbf Guanjun 2022-10-25 434 if (!aflags) 04c66693149fbf Guanjun 2022-10-25 435 goto sg_unmap; 04c66693149fbf Guanjun 2022-10-25 436 04c66693149fbf Guanjun 2022-10-25 437 memset(&req->desc.cmd, 0, sizeof(union ycc_real_cmd)); 04c66693149fbf Guanjun 2022-10-25 438 aflags->ptr = (void *)req; 04c66693149fbf Guanjun 2022-10-25 439 aflags->ycc_done_callback = ycc_aead_callback; 04c66693149fbf Guanjun 2022-10-25 @440 req->desc.private_ptr = (u64)aflags; 04c66693149fbf Guanjun 2022-10-25 441 req->desc.cmd.aead_cmd.cmd_id = cmd; 04c66693149fbf Guanjun 2022-10-25 442 req->desc.cmd.aead_cmd.mode = ctx->mode; 04c66693149fbf Guanjun 2022-10-25 443 req->desc.cmd.aead_cmd.sptr = req->src_paddr; 04c66693149fbf Guanjun 2022-10-25 444 req->desc.cmd.aead_cmd.dptr = req->dst_paddr; 04c66693149fbf Guanjun 2022-10-25 445 if (cmd == YCC_CMD_GCM_DEC || cmd == YCC_CMD_CCM_DEC) 04c66693149fbf Guanjun 2022-10-25 446 new_cryptlen = aead_req->cryptlen - taglen; 04c66693149fbf Guanjun 2022-10-25 447 req->desc.cmd.aead_cmd.dlen = new_cryptlen; 04c66693149fbf Guanjun 2022-10-25 448 req->desc.cmd.aead_cmd.keyptr = req->key_paddr; 04c66693149fbf Guanjun 2022-10-25 449 req->desc.cmd.aead_cmd.aadlen = new_aad_len; 04c66693149fbf Guanjun 2022-10-25 450 req->desc.cmd.aead_cmd.taglen = taglen; 04c66693149fbf Guanjun 2022-10-25 451 04c66693149fbf Guanjun 2022-10-25 452 /* 4. submit desc to cmd queue */ 04c66693149fbf Guanjun 2022-10-25 453 ret = ycc_enqueue(ctx->ring, &req->desc); 04c66693149fbf Guanjun 2022-10-25 454 if (!ret) 04c66693149fbf Guanjun 2022-10-25 455 return -EINPROGRESS; 04c66693149fbf Guanjun 2022-10-25 456 04c66693149fbf Guanjun 2022-10-25 457 pr_err("Failed to submit desc to ring\n"); 04c66693149fbf Guanjun 2022-10-25 458 kfree(aflags); 04c66693149fbf Guanjun 2022-10-25 459 04c66693149fbf Guanjun 2022-10-25 460 sg_unmap: 04c66693149fbf Guanjun 2022-10-25 461 ycc_aead_sg_unmap(req); 04c66693149fbf Guanjun 2022-10-25 462 unformat: 04c66693149fbf Guanjun 2022-10-25 463 ycc_aead_unformat_data(req); 04c66693149fbf Guanjun 2022-10-25 464 free_key: 04c66693149fbf Guanjun 2022-10-25 465 memset(req->key_vaddr, 0, 64); 04c66693149fbf Guanjun 2022-10-25 466 dma_free_coherent(YCC_DEV(ctx), 64, req->key_vaddr, req->key_paddr); 04c66693149fbf Guanjun 2022-10-25 467 req->key_vaddr = NULL; 04c66693149fbf Guanjun 2022-10-25 468 return ret; 04c66693149fbf Guanjun 2022-10-25 469 } 04c66693149fbf Guanjun 2022-10-25 470 -- 0-DAY CI Kernel Test Service https://01.org/lkp