summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/nvmutil/lib/num.c52
-rw-r--r--util/nvmutil/lib/state.c6
2 files changed, 31 insertions, 27 deletions
diff --git a/util/nvmutil/lib/num.c b/util/nvmutil/lib/num.c
index 99503e8c..bbb5a83e 100644
--- a/util/nvmutil/lib/num.c
+++ b/util/nvmutil/lib/num.c
@@ -227,40 +227,44 @@ rlong_next:
#if defined(HAVE_GETRANDOM) || \
defined(HAVE_GETRANDOM_SYSCALL)
int
-fallback_rand_getrandom(void *buf, size_t len)
+fallback_rand_getrandom(void *buf, unsigned long len)
{
- ssize_t rval = -1;
+ unsigned long off = 0;
+ long rval = -1;
- /* keep strict compiler
- * happy if unused
- */
- (void)rval;
- (void)buf;
- (void)len;
+ if (!len)
+ return -1;
-#if defined(HAVE_GETRANDOM)
- do {
- rval = getrandom(buf, len, 0);
- } while (rval < 0 && errno == EINTR);
+ if (buf == NULL)
+ return -1;
-#elif defined(HAVE_GETRANDOM_SYSCALL)
- do {
- rval = syscall(SYS_getrandom, buf, len, 0);
- } while (rval < 0 && errno == EINTR);
+#if defined(HAVE_GETRANDOM) || \
+ defined(HAVE_GETRANDOM_SYSCALL)
-#else
- return -1;
+ while (off < len) {
+
+#if defined(HAVE_GETRANDOM)
+ rval = (long)getrandom((char *)buf + off, len - off, 0);
+#elif defined(HAVE_GETRANDOM_SYSCALL)
+ rval = (long)syscall(SYS_getrandom,
+ (char *)buf + off, len - off, 0);
#endif
-#if defined(HAVE_GETRANDOM) || \
- defined(HAVE_GETRANDOM_SYSCALL)
+ if (rval < 0) {
+ if (errno == EINTR)
+ continue;
+
+ return -1; /* unsupported by kernel */
+ }
- if (rval == (ssize_t)len) {
- return 0;
+ off += (unsigned long)rval;
}
- if (rval < 0 && errno == ENOSYS)
- return -1; /* not supported by kernel */
+ return 0;
+
+#else
+ (void)buf;
+ (void)len;
return -1;
#endif
diff --git a/util/nvmutil/lib/state.c b/util/nvmutil/lib/state.c
index 9e7101bc..02a3e51c 100644
--- a/util/nvmutil/lib/state.c
+++ b/util/nvmutil/lib/state.c
@@ -139,8 +139,8 @@ xstatus(int argc, char *argv[])
#if defined(__OpenBSD__) && defined(OpenBSD) && \
OpenBSD >= 604
- if (unveil(f->tname, "rwc") == -1)
- err(errno, "unveil rwc: %s", f->tname);
+ if (unveil(us.f.tname, "rwc") == -1)
+ err(errno, "unveil rwc: %s", us.f.tname);
#endif
if (fstat(us.f.tmp_fd, &us.f.tmp_st) < 0)
err(errno, "%s: stat", us.f.tname);
@@ -158,7 +158,7 @@ xstatus(int argc, char *argv[])
err(errno, "%s: unveil r", us.f.fname);
} else {
if (unveil(us.f.fname, "rwc") == -1)
- err(errno, "%s: unveil rw", us.f.tname);
+ err(errno, "%s: unveil rw", us.f.fname);
}
if (unveil(us.f.tname, "rwc") == -1)