diff options
| -rw-r--r-- | util/nvmutil/lib/num.c | 52 | ||||
| -rw-r--r-- | util/nvmutil/lib/state.c | 6 |
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) |
