Hi Hannes, I love your patch! Perhaps something to improve: [auto build test WARNING on linus/master] [also build test WARNING on v5.14 next-20210910] [cannot apply to cryptodev/master crypto/master linux-nvme/for-next] [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] url: https://github.com/0day-ci/linux/commits/Hannes-Reinecke/nvme-In-band-authentication-support/20210910-144627 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git bf9f243f23e6623f310ba03fbb14e10ec3a61290 config: powerpc-randconfig-s032-20210911 (attached as .config) compiler: powerpc64-linux-gcc (GCC) 11.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-dirty # https://github.com/0day-ci/linux/commit/3439accdd50a505d2d15d42f298b5e2d727a5607 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Hannes-Reinecke/nvme-In-band-authentication-support/20210910-144627 git checkout 3439accdd50a505d2d15d42f298b5e2d727a5607 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=powerpc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) drivers/nvme/target/fabrics-cmd-auth.c:20:30: sparse: sparse: invalid assignment: |= drivers/nvme/target/fabrics-cmd-auth.c:20:30: sparse: left side has type restricted __le32 drivers/nvme/target/fabrics-cmd-auth.c:20:30: sparse: right side has type int >> drivers/nvme/target/fabrics-cmd-auth.c:108:49: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected int buf_size @@ got restricted __le16 [usertype] dhvlen @@ drivers/nvme/target/fabrics-cmd-auth.c:108:49: sparse: expected int buf_size drivers/nvme/target/fabrics-cmd-auth.c:108:49: sparse: got restricted __le16 [usertype] dhvlen >> drivers/nvme/target/fabrics-cmd-auth.c:344:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] dhvlen @@ got unsigned int [usertype] dh_keysize @@ drivers/nvme/target/fabrics-cmd-auth.c:344:30: sparse: expected restricted __le16 [usertype] dhvlen drivers/nvme/target/fabrics-cmd-auth.c:344:30: sparse: got unsigned int [usertype] dh_keysize drivers/nvme/target/fabrics-cmd-auth.c:346:55: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected int buf_size @@ got restricted __le16 [usertype] dhvlen @@ drivers/nvme/target/fabrics-cmd-auth.c:346:55: sparse: expected int buf_size drivers/nvme/target/fabrics-cmd-auth.c:346:55: sparse: got restricted __le16 [usertype] dhvlen drivers/nvme/target/fabrics-cmd-auth.c:383:20: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le16 [usertype] t_id @@ got restricted __le32 [usertype] @@ drivers/nvme/target/fabrics-cmd-auth.c:383:20: sparse: expected restricted __le16 [usertype] t_id drivers/nvme/target/fabrics-cmd-auth.c:383:20: sparse: got restricted __le32 [usertype] vim +108 drivers/nvme/target/fabrics-cmd-auth.c 14 15 void nvmet_init_auth(struct nvmet_ctrl *ctrl, struct nvmet_req *req) 16 { 17 /* Initialize in-band authentication */ 18 req->sq->authenticated = false; 19 req->sq->dhchap_step = NVME_AUTH_DHCHAP_MESSAGE_NEGOTIATE; > 20 req->cqe->result.u32 |= 0x2 << 16; 21 } 22 23 static u16 nvmet_auth_negotiate(struct nvmet_req *req, void *d) 24 { 25 struct nvmet_ctrl *ctrl = req->sq->ctrl; 26 struct nvmf_auth_dhchap_negotiate_data *data = d; 27 int i, hash_id, null_dh = -1; 28 29 pr_debug("%s: ctrl %d qid %d: data sc_d %d napd %d authid %d halen %d dhlen %d\n", 30 __func__, ctrl->cntlid, req->sq->qid, 31 data->sc_c, data->napd, data->auth_protocol[0].dhchap.authid, 32 data->auth_protocol[0].dhchap.halen, 33 data->auth_protocol[0].dhchap.dhlen); 34 req->sq->dhchap_tid = le16_to_cpu(data->t_id); 35 if (data->sc_c) 36 return NVME_AUTH_DHCHAP_FAILURE_CONCAT_MISMATCH; 37 38 if (data->napd != 1) 39 return NVME_AUTH_DHCHAP_FAILURE_HASH_UNUSABLE; 40 41 if (data->auth_protocol[0].dhchap.authid != 42 NVME_AUTH_DHCHAP_AUTH_ID) 43 return NVME_AUTH_DHCHAP_FAILURE_INCORRECT_PAYLOAD; 44 45 hash_id = 0; 46 for (i = 0; i < data->auth_protocol[0].dhchap.halen; i++) { 47 if (ctrl->shash_id != data->auth_protocol[0].dhchap.idlist[i]) 48 continue; 49 hash_id = ctrl->shash_id; 50 break; 51 } 52 if (hash_id == 0) { 53 pr_debug("%s: ctrl %d qid %d: no usable hash found\n", 54 __func__, ctrl->cntlid, req->sq->qid); 55 return NVME_AUTH_DHCHAP_FAILURE_HASH_UNUSABLE; 56 } 57 58 for (i = data->auth_protocol[0].dhchap.halen; 59 i < data->auth_protocol[0].dhchap.halen + 60 data->auth_protocol[0].dhchap.dhlen; i++) { 61 int dhgid = data->auth_protocol[0].dhchap.idlist[i]; 62 63 if (dhgid == NVME_AUTH_DHCHAP_DHGROUP_NULL) { 64 null_dh = dhgid; 65 continue; 66 } 67 if (ctrl->dh_tfm && ctrl->dh_gid == dhgid) { 68 pr_debug("%s: ctrl %d qid %d: reusing existing DH group %d\n", 69 __func__, ctrl->cntlid, req->sq->qid, dhgid); 70 break; 71 } 72 if (nvmet_setup_dhgroup(ctrl, dhgid) < 0) 73 continue; 74 if (nvme_auth_gen_privkey(ctrl->dh_tfm, dhgid) == 0) 75 break; 76 crypto_free_kpp(ctrl->dh_tfm); 77 ctrl->dh_tfm = NULL; 78 ctrl->dh_gid = 0; 79 } 80 if (!ctrl->dh_tfm && null_dh < 0) { 81 pr_debug("%s: ctrl %d qid %d: no DH group selected\n", 82 __func__, ctrl->cntlid, req->sq->qid); 83 return NVME_AUTH_DHCHAP_FAILURE_DHGROUP_UNUSABLE; 84 } 85 pr_debug("%s: ctrl %d qid %d: DH group %s (%d)\n", 86 __func__, ctrl->cntlid, req->sq->qid, 87 nvme_auth_dhgroup_name(ctrl->dh_gid), ctrl->dh_gid); 88 return 0; 89 } 90 91 static u16 nvmet_auth_reply(struct nvmet_req *req, void *d) 92 { 93 struct nvmet_ctrl *ctrl = req->sq->ctrl; 94 struct nvmf_auth_dhchap_reply_data *data = d; 95 int hash_len = crypto_shash_digestsize(ctrl->shash_tfm); 96 u8 *response; 97 98 pr_debug("%s: ctrl %d qid %d: data hl %d cvalid %d dhvlen %d\n", 99 __func__, ctrl->cntlid, req->sq->qid, 100 data->hl, data->cvalid, data->dhvlen); 101 if (data->hl != hash_len) 102 return NVME_AUTH_DHCHAP_FAILURE_INCORRECT_PAYLOAD; 103 104 if (data->dhvlen) { 105 if (!ctrl->dh_tfm) 106 return NVME_AUTH_DHCHAP_FAILURE_INCORRECT_PAYLOAD; 107 if (nvmet_auth_ctrl_sesskey(req, data->rval + 2 * data->hl, > 108 data->dhvlen) < 0) 109 return NVME_AUTH_DHCHAP_FAILURE_DHGROUP_UNUSABLE; 110 } 111 112 response = kmalloc(data->hl, GFP_KERNEL); 113 if (!response) 114 return NVME_AUTH_DHCHAP_FAILURE_FAILED; 115 116 if (nvmet_auth_host_hash(req, response, data->hl) < 0) { 117 pr_debug("ctrl %d qid %d DH-HMAC-CHAP hash failed\n", 118 ctrl->cntlid, req->sq->qid); 119 kfree(response); 120 return NVME_AUTH_DHCHAP_FAILURE_FAILED; 121 } 122 123 if (memcmp(data->rval, response, data->hl)) { 124 pr_info("ctrl %d qid %d DH-HMAC-CHAP response mismatch\n", 125 ctrl->cntlid, req->sq->qid); 126 kfree(response); 127 return NVME_AUTH_DHCHAP_FAILURE_FAILED; 128 } 129 kfree(response); 130 pr_info("ctrl %d qid %d DH-HMAC-CHAP host authenticated\n", 131 ctrl->cntlid, req->sq->qid); 132 if (data->cvalid) { 133 req->sq->dhchap_c2 = kmalloc(data->hl, GFP_KERNEL); 134 if (!req->sq->dhchap_c2) 135 return NVME_AUTH_DHCHAP_FAILURE_FAILED; 136 memcpy(req->sq->dhchap_c2, data->rval + data->hl, data->hl); 137 138 pr_debug("ctrl %d qid %d challenge %*ph\n", 139 ctrl->cntlid, req->sq->qid, data->hl, 140 req->sq->dhchap_c2); 141 req->sq->dhchap_s2 = le32_to_cpu(data->seqnum); 142 } else 143 req->sq->dhchap_c2 = NULL; 144 145 return 0; 146 } 147 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org