}
int nvme_sec_send(int fd, __u32 nsid, __u8 nssf, __u16 spsp,
- __u8 secp, __u32 tl, __u32 data_len, void *data, __u32 *result)
+ __u8 secp, __u32 tl, __u32 data_len, void *data)
{
struct nvme_admin_cmd cmd = {
.opcode = nvme_admin_security_send,
.cdw10 = secp << 24 | spsp << 8 | nssf,
.cdw11 = tl,
};
- int err;
- err = nvme_submit_admin_passthru(fd, &cmd);
- if (!err && result)
- *result = cmd.result;
- return err;
+ return nvme_submit_admin_passthru(fd, &cmd);
}
int nvme_sec_recv(int fd, __u32 nsid, __u8 nssf, __u16 spsp,
- __u8 secp, __u32 al, __u32 data_len, void *data, __u32 *result)
+ __u8 secp, __u32 al, __u32 data_len, void *data)
{
struct nvme_admin_cmd cmd = {
.opcode = nvme_admin_security_recv,
.addr = (__u64)(uintptr_t) data,
.data_len = data_len,
};
- int err;
- err = nvme_submit_admin_passthru(fd, &cmd);
- if (!err && result)
- *result = cmd.result;
- return err;
+ return nvme_submit_admin_passthru(fd, &cmd);
}
int nvme_get_lba_status(int fd, __u32 namespace_id, __u64 slba, __u32 mndw,
#define RPMB_NVME_SECP 0xEA
#define RPMB_NVME_SPSP 0x0001
-#define SEND_RPMB_REQ(tgt, size, req, result) \
+#define SEND_RPMB_REQ(tgt, size, req) \
nvme_sec_send(fd, 0, tgt, RPMB_NVME_SPSP, RPMB_NVME_SECP, size, size, \
- (unsigned char *)(req), (result))
+ (unsigned char *)(req))
-#define RECV_RPMB_RSP(tgt, size, rsp, result) \
+#define RECV_RPMB_RSP(tgt, size, rsp) \
nvme_sec_recv(fd, 0, tgt, RPMB_NVME_SPSP, RPMB_NVME_SECP, size, size, \
- (unsigned char *)(rsp), (result))
+ (unsigned char *)(rsp))
/* Initialize nonce value in rpmb request frame */
static void rpmb_nonce_init(struct rpmb_data_frame_t *req)
int rsp_size)
{
struct rpmb_data_frame_t *rsp = NULL;
- unsigned int result = 0;
unsigned char msg[1024] = { 0 };
int error;
sprintf((char *)msg, "RPMB request 0x%04x to target 0x%x",
req->type, req->target);
- error = SEND_RPMB_REQ(req->target, req_size, req, &result);
+ error = SEND_RPMB_REQ(req->target, req_size, req);
if (error != 0) {
- fprintf(stderr, "%s failed with error = 0x%x, result = %x\n",
- msg, error, result);
+ fprintf(stderr, "%s failed with error = 0x%x\n",
+ msg, error);
goto error_out;
}
}
/* Read result of previous request */
- error = RECV_RPMB_RSP(req->target, rsp_size, rsp, &result);
+ error = RECV_RPMB_RSP(req->target, rsp_size, rsp);
if (error) {
fprintf(stderr, "error 0x%x receiving response for %s\n",
error, msg);
struct rpmb_data_frame_t *rsp = NULL;
int err = -ENOMEM;
- unsigned int result = 0;
req = rpmb_request_init(req_size, RPMB_REQ_AUTH_KEY_PROGRAM, target,
0, 0, 0, key_buf, (223 - key_size), key_size);
/* re-use response buffer */
memset(rsp, 0, rsp_size);
- err = RECV_RPMB_RSP(req->target, rsp_size, (unsigned char *)rsp, &result);
- if (err != 0 || result != 0) {
+ err = RECV_RPMB_RSP(req->target, rsp_size, (unsigned char *)rsp);
+ if (err != 0) {
err = check_rpmb_response(req, rsp, "Failed to Program Key");
}
out:
struct rpmb_data_frame_t *req = NULL;
struct rpmb_data_frame_t *rsp = NULL;
- unsigned int result = 0, write_cntr = 0;
+ unsigned int write_cntr = 0;
unsigned char *mac = NULL;
int error = -ENOMEM;
memcpy(req->mac, mac, 32);
/* send the request and get response */
- error = SEND_RPMB_REQ(tgt, req_size, (unsigned char *)req, &result);
+ error = SEND_RPMB_REQ(tgt, req_size, (unsigned char *)req);
if (error != 0) {
- fprintf(stderr, "RPMB request 0x%04x for 0x%x, error: %d, result = %x\n",
- req->type, tgt, error, result);
+ fprintf(stderr, "RPMB request 0x%04x for 0x%x, error: %d\n",
+ req->type, tgt, error);
goto out;
}
rsp = (struct rpmb_data_frame_t *)calloc(rsp_size, 1);
rsp->target = req->target;
rsp->type = RPMB_REQ_READ_RESULT;
- error = SEND_RPMB_REQ(tgt, rsp_size, (unsigned char *)rsp, &result);
+ error = SEND_RPMB_REQ(tgt, rsp_size, (unsigned char *)rsp);
if (error != 0 || rsp->result != 0) {
fprintf(stderr, "Write-data read result 0x%x, error = 0x%x\n",
rsp->result, error);
/* Read final response */
memset(rsp, 0, rsp_size);
- error = RECV_RPMB_RSP(tgt, rsp_size, (unsigned char *)rsp, &result);
+ error = RECV_RPMB_RSP(tgt, rsp_size, (unsigned char *)rsp);
if (error != 0)
fprintf(stderr, "Auth data write recv error = 0x%x\n", error);
else
struct rpmb_data_frame_t *req = NULL;
struct rpmb_data_frame_t *rsp = NULL;
unsigned char *cfg_buf_read = NULL, *mac = NULL;
- unsigned int write_cntr = 0, result = 0;
+ unsigned int write_cntr = 0;
int error = -ENOMEM;
/* initialize request */
memcpy(req->mac, mac, sizeof(req->mac));
- error = SEND_RPMB_REQ(0, req_size, (unsigned char *)req, &result);
+ error = SEND_RPMB_REQ(0, req_size, (unsigned char *)req);
if (error != 0) {
fprintf(stderr, "Write-config RPMB request, error = 0x%x\n",
error);
rsp->target = req->target;
rsp->type = RPMB_REQ_READ_RESULT;
/* get the response and validate */
- error = RECV_RPMB_RSP(req->target, rsp_size, rsp, &result);
+ error = RECV_RPMB_RSP(req->target, rsp_size, rsp);
if (error != 0) {
fprintf(stderr,"Failed getting write-config response\
error = 0x%x\n", error);
int err, fd, sec_fd = -1;
void *sec_buf;
unsigned int sec_size;
- __u32 result;
struct config {
__u32 namespace_id;
}
err = nvme_sec_send(fd, cfg.namespace_id, cfg.nssf, cfg.spsp, cfg.secp,
- cfg.tl, sec_size, sec_buf, &result);
+ cfg.tl, sec_size, sec_buf);
if (err < 0)
perror("security-send");
else if (err != 0)
nvme_show_status(err);
else
- printf("NVME Security Send Command Success:%d\n", result);
+ printf("NVME Security Send Command Success\n");
free:
free(sec_buf);
const char *nssf = "NVMe Security Specific Field";
int err, fd;
void *sec_buf = NULL;
- __u32 result;
struct config {
__u32 namespace_id;
}
err = nvme_sec_recv(fd, cfg.namespace_id, cfg.nssf, cfg.spsp,
- cfg.secp, cfg.al, cfg.size, sec_buf, &result);
+ cfg.secp, cfg.al, cfg.size, sec_buf);
if (err < 0)
perror("security receive");
else if (err != 0)
nvme_show_status(err);
else {
+ printf("NVME Security Receive Command Success\n");
if (!cfg.raw_binary) {
- printf("NVME Security Receive Command Success:%d\n",
- result);
d(sec_buf, cfg.size, 16, 1);
} else if (cfg.size)
d_raw((unsigned char *)sec_buf, cfg.size);