lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:   Tue, 13 Jul 2021 04:00:59 +0800
From:   kernel test robot <lkp@...el.com>
To:     Hannes Reinecke <hare@...e.de>
Cc:     kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org
Subject: [hare-scsi-devel:auth.v2 6/12] drivers/nvme/host/auth.c:40:5:
 warning: no previous prototype for 'nvme_auth_send'

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git auth.v2
head:   9107ea4a3526c6801b38b7a2345b7372278a35ba
commit: 723befd959651e629874f9ce9f4a322c4dbe008b [6/12] nvme: Implement In-Band authentication
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
        # https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git/commit/?id=723befd959651e629874f9ce9f4a322c4dbe008b
        git remote add hare-scsi-devel https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git
        git fetch --no-tags hare-scsi-devel auth.v2
        git checkout 723befd959651e629874f9ce9f4a322c4dbe008b
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>

All warnings (new ones prefixed by >>):

>> drivers/nvme/host/auth.c:40:5: warning: no previous prototype for 'nvme_auth_send' [-Wmissing-prototypes]
      40 | int nvme_auth_send(struct nvme_ctrl *ctrl, int qid, void *data, size_t tl)
         |     ^~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:64:5: warning: no previous prototype for 'nvme_auth_receive' [-Wmissing-prototypes]
      64 | int nvme_auth_receive(struct nvme_ctrl *ctrl, int qid, void *buf, size_t al,
         |     ^~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:117:5: warning: no previous prototype for 'nvme_auth_dhchap_negotiate' [-Wmissing-prototypes]
     117 | int nvme_auth_dhchap_negotiate(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:144:5: warning: no previous prototype for 'nvme_auth_dhchap_challenge' [-Wmissing-prototypes]
     144 | int nvme_auth_dhchap_challenge(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:214:5: warning: no previous prototype for 'nvme_auth_dhchap_reply' [-Wmissing-prototypes]
     214 | int nvme_auth_dhchap_reply(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:257:5: warning: no previous prototype for 'nvme_auth_dhchap_success1' [-Wmissing-prototypes]
     257 | int nvme_auth_dhchap_success1(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:302:5: warning: no previous prototype for 'nvme_auth_dhchap_success2' [-Wmissing-prototypes]
     302 | int nvme_auth_dhchap_success2(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:317:5: warning: no previous prototype for 'nvme_auth_dhchap_failure2' [-Wmissing-prototypes]
     317 | int nvme_auth_dhchap_failure2(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:334:5: warning: no previous prototype for 'nvme_auth_select_hash' [-Wmissing-prototypes]
     334 | int nvme_auth_select_hash(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:385:5: warning: no previous prototype for 'nvme_auth_dhchap_host_response' [-Wmissing-prototypes]
     385 | int nvme_auth_dhchap_host_response(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:432:5: warning: no previous prototype for 'nvme_auth_dhchap_controller_response' [-Wmissing-prototypes]
     432 | int nvme_auth_dhchap_controller_response(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/auth.c:485:5: warning: no previous prototype for 'nvme_auth_generate_key' [-Wmissing-prototypes]
     485 | int nvme_auth_generate_key(struct nvme_ctrl *ctrl,
         |     ^~~~~~~~~~~~~~~~~~~~~~


vim +/nvme_auth_send +40 drivers/nvme/host/auth.c

    39	
  > 40	int nvme_auth_send(struct nvme_ctrl *ctrl, int qid, void *data, size_t tl)
    41	{
    42		struct nvme_command cmd = {};
    43		blk_mq_req_flags_t flags = qid == NVME_QID_ANY ?
    44			0 : BLK_MQ_REQ_NOWAIT | BLK_MQ_REQ_RESERVED;
    45		struct request_queue *q = qid == NVME_QID_ANY ?
    46			ctrl->fabrics_q : ctrl->connect_q;
    47		int ret;
    48	
    49		cmd.auth_send.opcode = nvme_fabrics_command;
    50		cmd.auth_send.fctype = nvme_fabrics_type_auth_send;
    51		cmd.auth_send.secp = NVME_AUTH_DHCHAP_PROTOCOL_IDENTIFIER;
    52		cmd.auth_send.spsp0 = 0x01;
    53		cmd.auth_send.spsp1 = 0x01;
    54		cmd.auth_send.tl = tl;
    55	
    56		ret = __nvme_submit_sync_cmd(q, &cmd, NULL, data, tl, 0, qid,
    57					     0, flags);
    58		if (ret)
    59			dev_dbg(ctrl->device,
    60				"%s: qid %d error %d\n", __func__, qid, ret);
    61		return ret;
    62	}
    63	
  > 64	int nvme_auth_receive(struct nvme_ctrl *ctrl, int qid, void *buf, size_t al,
    65			      u16 transaction, u8 expected_msg )
    66	{
    67		struct nvme_command cmd = {};
    68		struct nvmf_auth_dhchap_failure_data *data = buf;
    69		blk_mq_req_flags_t flags = qid == NVME_QID_ANY ?
    70			0 : BLK_MQ_REQ_NOWAIT | BLK_MQ_REQ_RESERVED;
    71		struct request_queue *q = qid == NVME_QID_ANY ?
    72			ctrl->fabrics_q : ctrl->connect_q;
    73		int ret;
    74	
    75		cmd.auth_receive.opcode = nvme_fabrics_command;
    76		cmd.auth_receive.fctype = nvme_fabrics_type_auth_receive;
    77		cmd.auth_receive.secp = NVME_AUTH_DHCHAP_PROTOCOL_IDENTIFIER;
    78		cmd.auth_receive.spsp0 = 0x01;
    79		cmd.auth_receive.spsp1 = 0x01;
    80		cmd.auth_receive.al = al;
    81	
    82		ret = __nvme_submit_sync_cmd(q, &cmd, NULL, buf, al, 0, qid,
    83					     0, flags);
    84		if (ret > 0) {
    85			dev_dbg(ctrl->device, "%s: qid %d nvme status %x\n",
    86				__func__, qid, ret);
    87			ret = -EIO;
    88		}
    89		if (ret < 0) {
    90			dev_dbg(ctrl->device, "%s: qid %d error %d\n",
    91				__func__, qid, ret);
    92			return ret;
    93		}
    94		dev_dbg(ctrl->device, "%s: qid %d auth_type %d auth_id %x\n",
    95			__func__, qid, data->auth_type, data->auth_id);
    96		if (data->auth_type == NVME_AUTH_COMMON_MESSAGES &&
    97		    data->auth_id == NVME_AUTH_DHCHAP_MESSAGE_FAILURE1) {
    98			return data->reason_code_explanation;
    99		}
   100		if (data->auth_type != NVME_AUTH_DHCHAP_MESSAGES ||
   101		    data->auth_id != expected_msg) {
   102			dev_warn(ctrl->device,
   103				 "%s: qid %d invalid message type %02x/%02x\n",
   104				 __func__, qid, data->auth_type, data->auth_id);
   105			return NVME_AUTH_DHCHAP_FAILURE_INVALID_PAYLOAD;
   106		}
   107		if (le16_to_cpu(data->t_id) != transaction) {
   108			dev_warn(ctrl->device,
   109				 "%s: qid %d invalid transaction ID %d\n",
   110				 __func__, qid, le16_to_cpu(data->t_id));
   111			return NVME_AUTH_DHCHAP_FAILURE_INVALID_PAYLOAD;
   112		}
   113	
   114		return 0;
   115	}
   116	
 > 117	int nvme_auth_dhchap_negotiate(struct nvme_ctrl *ctrl,
   118				       struct nvme_dhchap_context *chap,
   119				       void *buf, size_t buf_size)
   120	{
   121		struct nvmf_auth_dhchap_negotiate_data *data = buf;
   122		size_t size = sizeof(*data) + sizeof(union nvmf_auth_protocol);
   123	
   124		if (buf_size < size)
   125			return -EINVAL;
   126	
   127		memset((u8 *)buf, 0, size);
   128		data->auth_type = NVME_AUTH_COMMON_MESSAGES;
   129		data->auth_id = NVME_AUTH_DHCHAP_MESSAGE_NEGOTIATE;
   130		data->t_id = cpu_to_le16(chap->transaction);
   131		data->sc_c = 0; /* No secure channel concatenation */
   132		data->napd = 1;
   133		data->auth_protocol[0].dhchap.authid = NVME_AUTH_DHCHAP_AUTH_ID;
   134		data->auth_protocol[0].dhchap.halen = 3;
   135		data->auth_protocol[0].dhchap.dhlen = 1;
   136		data->auth_protocol[0].dhchap.idlist[0] = NVME_AUTH_DHCHAP_HASH_SHA256;
   137		data->auth_protocol[0].dhchap.idlist[1] = NVME_AUTH_DHCHAP_HASH_SHA384;
   138		data->auth_protocol[0].dhchap.idlist[2] = NVME_AUTH_DHCHAP_HASH_SHA512;
   139		data->auth_protocol[0].dhchap.idlist[3] = NVME_AUTH_DHCHAP_DHGROUP_NULL;
   140	
   141		return size;
   142	}
   143	
 > 144	int nvme_auth_dhchap_challenge(struct nvme_ctrl *ctrl,
   145				       struct nvme_dhchap_context *chap,
   146				       void *buf, size_t buf_size)
   147	{
   148		struct nvmf_auth_dhchap_challenge_data *data = buf;
   149		size_t size = sizeof(*data) + data->hl + data->dhvlen;
   150		const char *gid_name;
   151	
   152		if (buf_size < size) {
   153			chap->status = NVME_AUTH_DHCHAP_FAILURE_INVALID_PAYLOAD;
   154			return -ENOMSG;
   155		}
   156	
   157		if (data->hashid != NVME_AUTH_DHCHAP_HASH_SHA256 &&
   158		    data->hashid != NVME_AUTH_DHCHAP_HASH_SHA384 &&
   159		    data->hashid != NVME_AUTH_DHCHAP_HASH_SHA512) {
   160			dev_warn(ctrl->device,
   161				 "qid %d: DH-HMAC-CHAP: invalid HASH ID %d\n",
   162				 chap->qid, data->hashid);
   163			chap->status = NVME_AUTH_DHCHAP_FAILURE_HASH_UNUSABLE;
   164			return -EPROTO;
   165		}
   166		switch (data->dhgid) {
   167		case NVME_AUTH_DHCHAP_DHGROUP_NULL:
   168			gid_name = "null";
   169			break;
   170		default:
   171			gid_name = NULL;
   172			break;
   173		}
   174		if (!gid_name) {
   175			dev_warn(ctrl->device,
   176				 "qid %d: DH-HMAC-CHAP: invalid DH group id %d\n",
   177				 chap->qid, data->dhgid);
   178			chap->status = NVME_AUTH_DHCHAP_FAILURE_DHGROUP_UNUSABLE;
   179			return -EPROTO;
   180		}
   181		if (data->dhgid != NVME_AUTH_DHCHAP_DHGROUP_NULL) {
   182			chap->status = NVME_AUTH_DHCHAP_FAILURE_DHGROUP_UNUSABLE;
   183			return -EPROTO;
   184		}
   185		if (data->dhgid == NVME_AUTH_DHCHAP_DHGROUP_NULL && data->dhvlen != 0) {
   186			dev_warn(ctrl->device,
   187				 "qid %d: DH-HMAC-CHAP: invalid DH value for NULL DH\n",
   188				chap->qid);
   189			chap->status = NVME_AUTH_DHCHAP_FAILURE_DHGROUP_UNUSABLE;
   190			return -EPROTO;
   191		}
   192		dev_dbg(ctrl->device, "%s: qid %d requested hash id %d\n",
   193			__func__, chap->qid, data->hashid);
   194		chap->hash_id = data->hashid;
   195		if ((data->hashid == NVME_AUTH_DHCHAP_HASH_SHA256 &&
   196		     data->hl != 32) ||
   197		    (data->hashid == NVME_AUTH_DHCHAP_HASH_SHA384 &&
   198		     data->hl != 48) ||
   199		    (data->hashid == NVME_AUTH_DHCHAP_HASH_SHA512 &&
   200		     data->hl != 64)) {
   201			dev_warn(ctrl->device,
   202				 "qid %d: DH-HMAC-CHAP: invalid hash length\n",
   203				chap->qid);
   204			chap->status = NVME_AUTH_DHCHAP_FAILURE_HASH_UNUSABLE;
   205			return -EPROTO;
   206		}
   207		chap->hash_len = data->hl;
   208		chap->s1 = le32_to_cpu(data->seqnum);
   209		memcpy(chap->c1, data->cval, chap->hash_len);
   210	
   211		return 0;
   212	}
   213	
 > 214	int nvme_auth_dhchap_reply(struct nvme_ctrl *ctrl,
   215				   struct nvme_dhchap_context *chap,
   216				   void *buf, size_t buf_size)
   217	{
   218		struct nvmf_auth_dhchap_reply_data *data = buf;
   219		size_t size = sizeof(*data);
   220	
   221		size += 2 * chap->hash_len;
   222		if (ctrl->opts->dhchap_auth) {
   223			get_random_bytes(chap->c2, chap->hash_len);
   224			chap->s2 = nvme_dhchap_seqnum++;
   225		} else
   226			memset(chap->c2, 0, chap->hash_len);
   227	
   228		if (chap->host_key_len)
   229			size += chap->host_key_len;
   230	
   231		if (buf_size < size)
   232			return -EINVAL;
   233	
   234		memset(buf, 0, size);
   235		data->auth_type = NVME_AUTH_DHCHAP_MESSAGES;
   236		data->auth_id = NVME_AUTH_DHCHAP_MESSAGE_REPLY;
   237		data->t_id = cpu_to_le16(chap->transaction);
   238		data->hl = chap->hash_len;
   239		data->dhvlen = chap->host_key_len;
   240		data->seqnum = cpu_to_le32(chap->s2);
   241		memcpy(data->rval, chap->response, chap->hash_len);
   242		if (ctrl->opts->dhchap_auth) {
   243			dev_dbg(ctrl->device, "%s: qid %d ctrl challenge %*ph\n",
   244				__func__, chap->qid,
   245				chap->hash_len, chap->c2);
   246			data->cvalid = 1;
   247			memcpy(data->rval + chap->hash_len, chap->c2,
   248			       chap->hash_len);
   249		}
   250		if (chap->host_key_len)
   251			memcpy(data->rval + 2 * chap->hash_len, chap->host_key,
   252			       chap->host_key_len);
   253	
   254		return size;
   255	}
   256	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Download attachment ".config.gz" of type "application/gzip" (65324 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ