Lines Matching refs:req

34 static u16 nvmet_auth_negotiate(struct nvmet_req *req, void *d)
36 struct nvmet_ctrl *ctrl = req->sq->ctrl;
41 __func__, ctrl->cntlid, req->sq->qid,
45 req->sq->dhchap_tid = le16_to_cpu(data->t_id);
70 __func__, ctrl->cntlid, req->sq->qid);
74 __func__, ctrl->cntlid, req->sq->qid,
98 __func__, ctrl->cntlid, req->sq->qid);
102 __func__, ctrl->cntlid, req->sq->qid,
107 __func__, ctrl->cntlid, req->sq->qid,
112 static u16 nvmet_auth_reply(struct nvmet_req *req, void *d)
114 struct nvmet_ctrl *ctrl = req->sq->ctrl;
120 __func__, ctrl->cntlid, req->sq->qid,
126 if (nvmet_auth_ctrl_sesskey(req, data->rval + 2 * data->hl,
137 ctrl->cntlid, req->sq->qid);
141 if (nvmet_auth_host_hash(req, response, data->hl) < 0) {
143 ctrl->cntlid, req->sq->qid);
150 ctrl->cntlid, req->sq->qid);
156 __func__, ctrl->cntlid, req->sq->qid);
158 req->sq->dhchap_c2 = kmemdup(data->rval + data->hl, data->hl,
160 if (!req->sq->dhchap_c2)
164 __func__, ctrl->cntlid, req->sq->qid, data->hl,
165 req->sq->dhchap_c2);
166 req->sq->dhchap_s2 = le32_to_cpu(data->seqnum);
168 req->sq->authenticated = true;
169 req->sq->dhchap_c2 = NULL;
182 void nvmet_execute_auth_send(struct nvmet_req *req)
184 struct nvmet_ctrl *ctrl = req->sq->ctrl;
190 if (req->cmd->auth_send.secp != NVME_AUTH_DHCHAP_PROTOCOL_IDENTIFIER) {
192 req->error_loc =
196 if (req->cmd->auth_send.spsp0 != 0x01) {
198 req->error_loc =
202 if (req->cmd->auth_send.spsp1 != 0x01) {
204 req->error_loc =
208 tl = le32_to_cpu(req->cmd->auth_send.tl);
211 req->error_loc =
215 if (!nvmet_check_transfer_len(req, tl)) {
226 status = nvmet_copy_from_sgl(req, 0, d, tl);
232 ctrl->cntlid, req->sq->qid, data->auth_type, data->auth_id,
233 req->sq->dhchap_step);
241 ctrl->cntlid, req->sq->qid);
242 if (!req->sq->qid) {
251 req->sq->dhchap_step = NVME_AUTH_DHCHAP_MESSAGE_NEGOTIATE;
252 } else if (data->auth_id != req->sq->dhchap_step)
255 status = nvmet_auth_negotiate(req, d);
257 req->sq->dhchap_step =
260 req->sq->dhchap_step =
262 req->sq->dhchap_status = status;
267 if (data->auth_id != req->sq->dhchap_step) {
269 __func__, ctrl->cntlid, req->sq->qid,
270 data->auth_id, req->sq->dhchap_step);
273 if (le16_to_cpu(data->t_id) != req->sq->dhchap_tid) {
275 __func__, ctrl->cntlid, req->sq->qid,
277 req->sq->dhchap_tid);
278 req->sq->dhchap_step =
280 req->sq->dhchap_status =
287 status = nvmet_auth_reply(req, d);
289 req->sq->dhchap_step =
292 req->sq->dhchap_step =
294 req->sq->dhchap_status = status;
299 req->sq->authenticated = true;
301 __func__, ctrl->cntlid, req->sq->qid);
307 ctrl->cntlid, req->sq->qid, status);
308 req->sq->dhchap_status = status;
309 req->sq->authenticated = false;
314 req->sq->dhchap_status =
316 req->sq->dhchap_step =
318 req->sq->authenticated = false;
322 req->sq->dhchap_status = NVME_AUTH_DHCHAP_FAILURE_INCORRECT_MESSAGE;
323 req->sq->dhchap_step = NVME_AUTH_DHCHAP_MESSAGE_FAILURE2;
329 ctrl->cntlid, req->sq->qid,
330 req->sq->dhchap_status, req->sq->dhchap_step);
333 __func__, ctrl->cntlid, req->sq->qid,
334 status, req->error_loc);
335 req->cqe->result.u64 = 0;
336 if (req->sq->dhchap_step != NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2 &&
337 req->sq->dhchap_step != NVME_AUTH_DHCHAP_MESSAGE_FAILURE2) {
340 mod_delayed_work(system_wq, &req->sq->auth_expired_work,
345 nvmet_auth_sq_free(req->sq);
346 if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_FAILURE2)
350 nvmet_req_complete(req, status);
353 static int nvmet_auth_challenge(struct nvmet_req *req, void *d, int al)
356 struct nvmet_ctrl *ctrl = req->sq->ctrl;
369 req->sq->dhchap_s1 = nvme_auth_get_seqnum();
372 data->t_id = cpu_to_le16(req->sq->dhchap_tid);
375 data->seqnum = cpu_to_le32(req->sq->dhchap_s1);
376 req->sq->dhchap_c1 = kmalloc(data->hl, GFP_KERNEL);
377 if (!req->sq->dhchap_c1)
379 get_random_bytes(req->sq->dhchap_c1, data->hl);
380 memcpy(data->cval, req->sq->dhchap_c1, data->hl);
384 ret = nvmet_auth_ctrl_exponential(req, data->cval + data->hl,
388 __func__, ctrl->cntlid, req->sq->qid, req->sq->dhchap_s1,
389 req->sq->dhchap_tid, data->hl, ctrl->dh_keysize);
393 static int nvmet_auth_success1(struct nvmet_req *req, void *d, int al)
396 struct nvmet_ctrl *ctrl = req->sq->ctrl;
403 data->t_id = cpu_to_le16(req->sq->dhchap_tid);
405 if (req->sq->dhchap_c2) {
408 ctrl->cntlid, req->sq->qid);
411 if (nvmet_auth_ctrl_hash(req, data->rval, data->hl))
415 ctrl->cntlid, req->sq->qid, data->hl, data->rval);
420 static void nvmet_auth_failure1(struct nvmet_req *req, void *d, int al)
427 data->t_id = cpu_to_le16(req->sq->dhchap_tid);
429 data->rescode_exp = req->sq->dhchap_status;
432 void nvmet_execute_auth_receive(struct nvmet_req *req)
434 struct nvmet_ctrl *ctrl = req->sq->ctrl;
439 if (req->cmd->auth_receive.secp != NVME_AUTH_DHCHAP_PROTOCOL_IDENTIFIER) {
441 req->error_loc =
445 if (req->cmd->auth_receive.spsp0 != 0x01) {
447 req->error_loc =
451 if (req->cmd->auth_receive.spsp1 != 0x01) {
453 req->error_loc =
457 al = le32_to_cpu(req->cmd->auth_receive.al);
460 req->error_loc =
464 if (!nvmet_check_transfer_len(req, al)) {
475 ctrl->cntlid, req->sq->qid, req->sq->dhchap_step);
476 switch (req->sq->dhchap_step) {
478 if (nvmet_auth_challenge(req, d, al) < 0) {
480 ctrl->cntlid, req->sq->qid, status);
484 req->sq->dhchap_step = NVME_AUTH_DHCHAP_MESSAGE_REPLY;
487 status = nvmet_auth_success1(req, d, al);
489 req->sq->dhchap_status = status;
490 req->sq->authenticated = false;
491 nvmet_auth_failure1(req, d, al);
493 ctrl->cntlid, req->sq->qid,
494 req->sq->dhchap_status);
497 req->sq->dhchap_step = NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2;
500 req->sq->authenticated = false;
501 nvmet_auth_failure1(req, d, al);
503 ctrl->cntlid, req->sq->qid, req->sq->dhchap_status);
507 ctrl->cntlid, req->sq->qid, req->sq->dhchap_step);
508 req->sq->dhchap_step = NVME_AUTH_DHCHAP_MESSAGE_FAILURE1;
509 req->sq->dhchap_status = NVME_AUTH_DHCHAP_FAILURE_FAILED;
510 nvmet_auth_failure1(req, d, al);
515 status = nvmet_copy_to_sgl(req, 0, d, al);
518 req->cqe->result.u64 = 0;
520 if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2)
521 nvmet_auth_sq_free(req->sq);
522 else if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_FAILURE1) {
523 nvmet_auth_sq_free(req->sq);
526 nvmet_req_complete(req, status);