]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
Merge branch 'master' of https://github.com/fixthething/nvme-cli into fixthething...
authorKeith Busch <kbusch@kernel.org>
Fri, 6 Aug 2021 21:01:24 +0000 (14:01 -0700)
committerKeith Busch <kbusch@kernel.org>
Fri, 6 Aug 2021 21:01:24 +0000 (14:01 -0700)
1  2 
nvme-ioctl.c
nvme-ioctl.h
nvme-rpmb.c
nvme.c

diff --cc nvme-ioctl.c
Simple merge
diff --cc nvme-ioctl.h
index 7be1ffdd38993e4b429f66274306e4c0e73bd74a,40231c196e792589754b1ddc5a4ed40f222677e4..2e24b83d6de6dac4d797c14d492bd903d6cd7f89
@@@ -140,10 -136,10 +140,10 @@@ int nvme_ns_attachment(int fd, __u32 ns
                       __u16 *ctrlist, bool attach);
  
  int nvme_fw_download(int fd, __u32 offset, __u32 data_len, void *data);
 -int nvme_fw_commit(int fd, __u8 slot, __u8 action, __u8 bpid);
 +int nvme_fw_commit(int fd, __u8 slot, __u8 action, __u8 bpid, __u32 *result);
  
  int nvme_sec_send(int fd, __u32 nsid, __u8 nssf, __u16 spsp,
-                 __u8 secp, __u32 tl, __u32 data_len, void *data);
+                 __u8 secp, __u32 data_len, void *data);
  int nvme_sec_recv(int fd, __u32 nsid, __u8 nssf, __u16 spsp,
                  __u8 secp, __u32 al, __u32 data_len, void *data);
  
diff --cc nvme-rpmb.c
Simple merge
diff --cc nvme.c
index dde7a13e669c742507b9148475f4b829ec5854d9,eb42d35b05a460a195f02da9a243e08489546b74..86f26f30b7a359f413b6e5aea610ea70c7a15a8f
--- 1/nvme.c
--- 2/nvme.c
+++ b/nvme.c
@@@ -3962,26 -3646,38 +3962,50 @@@ static int sec_send(int argc, char **ar
        if (fd < 0)
                goto ret;
  
-       err = fstat(sec_fd, &sb);
-       if (err < 0) {
-               perror("fstat");
-               goto close_sec_fd;
+       if (cfg.tl == 0) {
+               fprintf(stderr, "--tl unspecified or zero\n");
+               err = -EINVAL;
+               goto close_fd;
+       }
++
 +      sec_fd = open(cfg.file, O_RDONLY);
 +      if (sec_fd < 0) {
 +              fprintf(stderr, "Failed to open %s: %s\n",
 +                              cfg.file, strerror(errno));
 +              errno = EINVAL;
 +              err = -1;
 +              goto close_fd;
 +      }
 +
+       if ((cfg.tl & 3) != 0)
+               fprintf(stderr, "WARNING: --tl not dword aligned; unaligned bytes may be truncated\n");
+       if (strlen(cfg.file) == 0) {
+               sec_fd = STDIN_FILENO;
+               sec_size = cfg.tl;
+       } else {
+               sec_fd = open(cfg.file, O_RDONLY);
+               if (sec_fd < 0) {
+                       fprintf(stderr, "Failed to open %s: %s\n",
+                                       cfg.file, strerror(errno));
+                       err = -EINVAL;
+                       goto close_fd;
+               }
+               err = fstat(sec_fd, &sb);
+               if (err < 0) {
+                       perror("fstat");
+                       goto close_sec_fd;
+               }
+               sec_size = cfg.tl > sb.st_size ? cfg.tl : sb.st_size;
        }
  
 -      if (posix_memalign(&sec_buf, getpagesize(), cfg.tl)) {
 -              fprintf(stderr, "No memory for security size:%d\n", cfg.tl);
 -              err = -ENOMEM;
 +      sec_size = sb.st_size;
 +      if (posix_memalign(&sec_buf, getpagesize(), sec_size)) {
 +              fprintf(stderr, "No memory for security size:%d\n", sec_size);
 +              errno = ENOMEM;
 +              err = -1;
                goto close_sec_fd;
        }