aboutsummaryrefslogtreecommitdiff
path: root/lib/libsecureboot
diff options
context:
space:
mode:
authorSimon J. Gerraty <sjg@FreeBSD.org>2019-04-23 20:25:25 +0000
committerSimon J. Gerraty <sjg@FreeBSD.org>2019-04-23 20:25:25 +0000
commit64ca9a7ff6748eed582b28aa6ff728bf69b2fe27 (patch)
treeba79fbf4b09eb78cd7e579a5762f089ac20716b3 /lib/libsecureboot
parentc034ecf316059a995facc46ecb688ef0412bd013 (diff)
Notes
Diffstat (limited to 'lib/libsecureboot')
-rw-r--r--lib/libsecureboot/h/libsecureboot.h1
-rw-r--r--lib/libsecureboot/vectx.c15
-rw-r--r--lib/libsecureboot/veopen.c5
-rw-r--r--lib/libsecureboot/verify_file.c8
4 files changed, 21 insertions, 8 deletions
diff --git a/lib/libsecureboot/h/libsecureboot.h b/lib/libsecureboot/h/libsecureboot.h
index d0ec327b866ac..6599db299aefa 100644
--- a/lib/libsecureboot/h/libsecureboot.h
+++ b/lib/libsecureboot/h/libsecureboot.h
@@ -86,6 +86,7 @@ ssize_t ve_pcr_get(unsigned char *, size_t);
#define VEF_VERBOSE 1
#define VE_FINGERPRINT_OK 1
+#define VE_FINGERPRINT_IGNORE 2
/* errors from verify_fd */
#define VE_FINGERPRINT_NONE -2
#define VE_FINGERPRINT_WRONG -3
diff --git a/lib/libsecureboot/vectx.c b/lib/libsecureboot/vectx.c
index 879cecac188d9..97a8d97efb884 100644
--- a/lib/libsecureboot/vectx.c
+++ b/lib/libsecureboot/vectx.c
@@ -120,7 +120,10 @@ vectx_open(int fd, const char *path, off_t off, struct stat *stp, int *error)
ctx->vec_status = VE_FINGERPRINT_NONE;
ve_error_set("%s: no entry", path);
} else {
- if (strncmp(cp, "sha256=", 7) == 0) {
+ if (strncmp(cp, "no_hash", 7) == 0) {
+ ctx->vec_status = VE_FINGERPRINT_IGNORE;
+ hashsz = 0;
+ } else if (strncmp(cp, "sha256=", 7) == 0) {
ctx->vec_md = &br_sha256_vtable;
hashsz = br_sha256_SIZE;
cp += 7;
@@ -150,11 +153,13 @@ vectx_open(int fd, const char *path, off_t off, struct stat *stp, int *error)
*error = ctx->vec_status;
ctx->vec_hashsz = hashsz;
ctx->vec_want = cp;
- ctx->vec_md->init(&ctx->vec_ctx.vtable);
+ if (hashsz > 0) {
+ ctx->vec_md->init(&ctx->vec_ctx.vtable);
- if (hashsz > 0 && off > 0) {
- lseek(fd, 0, SEEK_SET);
- vectx_lseek(ctx, off, SEEK_SET);
+ if (off > 0) {
+ lseek(fd, 0, SEEK_SET);
+ vectx_lseek(ctx, off, SEEK_SET);
+ }
}
return (ctx);
diff --git a/lib/libsecureboot/veopen.c b/lib/libsecureboot/veopen.c
index b9da7e4479d8f..6ecf85c44af15 100644
--- a/lib/libsecureboot/veopen.c
+++ b/lib/libsecureboot/veopen.c
@@ -345,7 +345,9 @@ verify_fingerprint(int fd, const char *path, const char *cp, off_t off)
size_t hlen;
int n;
- if (strncmp(cp, "sha256=", 7) == 0) {
+ if (strncmp(cp, "no_hash", 7) == 0) {
+ return (VE_FINGERPRINT_IGNORE);
+ } else if (strncmp(cp, "sha256=", 7) == 0) {
md = &br_sha256_vtable;
hlen = br_sha256_SIZE;
cp += 7;
@@ -423,6 +425,7 @@ verify_fd(int fd, const char *path, off_t off, struct stat *stp)
rc = verify_fingerprint(fd, path, cp, off);
switch (rc) {
case VE_FINGERPRINT_OK:
+ case VE_FINGERPRINT_IGNORE:
case VE_FINGERPRINT_UNKNOWN:
return (rc);
default:
diff --git a/lib/libsecureboot/verify_file.c b/lib/libsecureboot/verify_file.c
index 369c0bb8eb376..00822aa480d5d 100644
--- a/lib/libsecureboot/verify_file.c
+++ b/lib/libsecureboot/verify_file.c
@@ -343,10 +343,14 @@ verify_file(int fd, const char *filename, off_t off, int severity)
if ((rc = verify_fd(fd, filename, off, &st)) >= 0) {
if (verbose || severity > VE_WANT) {
#if defined(VE_DEBUG_LEVEL) && VE_DEBUG_LEVEL > 0
- printf("Verified %s %llu,%llu\n", filename,
+ printf("%serified %s %llu,%llu\n",
+ (rc == VE_FINGERPRINT_IGNORE) ? "Unv" : "V",
+ filename,
(long long)st.st_dev, (long long)st.st_ino);
#else
- printf("Verified %s\n", filename);
+ printf("%serified %s\n",
+ (rc == VE_FINGERPRINT_IGNORE) ? "Unv" : "V",
+ filename);
#endif
}
if (severity < VE_MUST) { /* not a kernel or module */