Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test remote attestation in UEFI app #2703

Merged
merged 32 commits into from
Apr 19, 2022

Conversation

jul-sh
Copy link
Contributor

@jul-sh jul-sh commented Apr 8, 2022

No description provided.

@jul-sh
Copy link
Contributor Author

jul-sh commented Apr 8, 2022

Running cargo test on the UEFI app on this PR, currently fails with the following output:

docker@437e99feb583:/workspace/experimental/uefi/app$ cargo test
   Compiling compiler_builtins v0.1.69
   Compiling core v0.0.0 (/usr/local/cargo/toolchains/nightly-2022-02-17-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core)
   Compiling proc-macro2 v1.0.36
   Compiling unicode-xid v0.2.2
   Compiling syn v1.0.89
   Compiling either v1.6.1
   Compiling log v0.4.16
   Compiling cc v1.0.73
   Compiling anyhow v1.0.56
   Compiling libc v0.2.121
   Compiling autocfg v1.1.0
   Compiling cfg-if v1.0.0
   Compiling hashbrown v0.11.2
   Compiling bytes v1.1.0
   Compiling fixedbitset v0.4.1
   Compiling regex-syntax v0.6.25
   Compiling remove_dir_all v0.5.3
   Compiling fastrand v1.7.0
   Compiling multimap v0.8.3
   Compiling lazy_static v1.4.0
   Compiling heck v0.4.0
   Compiling itertools v0.10.3
   Compiling indexmap v1.8.1
   Compiling cmake v0.1.48
   Compiling ring v0.17.0-not-released-yet (/workspace/third_party/ring)
   Compiling regex v1.5.5
   Compiling quote v1.0.17
   Compiling which v4.2.5
   Compiling tempfile v3.3.0
   Compiling prost-build v0.10.0
   Compiling petgraph v0.6.0
   Compiling prost-derive v0.10.0
   Compiling uefi-macros v0.6.1
   Compiling rustc-std-workspace-core v1.99.0 (/usr/local/cargo/toolchains/nightly-2022-02-17-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core)
   Compiling alloc v0.0.0 (/usr/local/cargo/toolchains/nightly-2022-02-17-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc)
   Compiling bit_field v0.10.1
   Compiling untrusted v0.9.0
   Compiling spin v0.9.2
   Compiling bitflags v1.3.2
   Compiling qemu-exit v3.0.1
   Compiling ucs2 v0.3.2
   Compiling uefi v0.15.2
   Compiling prost v0.10.0
   Compiling uefi-services v0.12.1
   Compiling prost-types v0.10.0
   Compiling oak_remote_attestation v0.1.0 (/workspace/remote_attestation/rust)
   Compiling uefi-simple v0.1.0 (/workspace/experimental/uefi/app)
error: linking with `rust-lld` failed: exit status: 1
  |
  = note: "rust-lld" "-flavor" "link" "/NOLOGO" "/entry:efi_main" "/subsystem:efi_application" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.0.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.1.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.10.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.11.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.12.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.13.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.2.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.3.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.4.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.5.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.6.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.7.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.8.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.uefi_simple.cf45511b-cgu.9.rcgu.o" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.4qg7o8gcgk2sg112.rcgu.o" "/LIBPATH:/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps" "/LIBPATH:/workspace/experimental/uefi/app/target/debug/deps" "/LIBPATH:/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/build/ring-4f8b492c00e507aa/out" "/LIBPATH:/usr/local/cargo/toolchains/nightly-2022-02-17-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-uefi/lib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libuefi_services-8dcc2f941d980172.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libqemu_exit-45095eb9bb615550.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libuefi-80db4e42d1ecc37f.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libbitflags-d48320b60f222bcf.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libucs2-6d2988a52f9295c6.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libbit_field-b0dabaf33e7bc34d.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/liboak_remote_attestation-bfe4f822be647ac0.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libprost-c6f3255c29231d14.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libbytes-89e6767b77f28f57.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libring-602a4675add91404.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libspin-5aee27ac4a284fdb.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libuntrusted-fe2d576749e9e397.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libanyhow-f8f100ba77b18b75.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/liballoc-d09d8367f7a8dd03.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/liblog-96aecf8aed1c8ca7.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libcfg_if-91aff6c8f7557103.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/librustc_std_workspace_core-1962369abd396dbe.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libcore-b6fab954f7c8d270.rlib" "/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/libcompiler_builtins-6eb4245465ebc3db.rlib" "/NXCOMPAT" "/LIBPATH:/usr/local/cargo/toolchains/nightly-2022-02-17-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-uefi/lib" "/OUT:/workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/deps/uefi_simple-8573d9034ba64d2d.efi" "/OPT:REF,NOICF" "/DEBUG" "/NODEFAULTLIB"
  = note: rust-lld: error: undefined symbol: __declspec(dllimport) RtlVirtualUnwind
          >>> referenced by /workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/build/ring-4f8b492c00e507aa/out/aesni-x86_64-nasm.asm:1291
          >>>               libring-602a4675add91404.rlib(aesni-x86_64-nasm.o):(L$common_seh_tail)
          >>> referenced by /workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/build/ring-4f8b492c00e507aa/out/vpaes-x86_64-nasm.asm:946
          >>>               libring-602a4675add91404.rlib(vpaes-x86_64-nasm.o):(L$in_prologue)
          >>> referenced by /workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/build/ring-4f8b492c00e507aa/out/sha256-x86_64-nasm.asm:4101
          >>>               libring-602a4675add91404.rlib(sha256-x86_64-nasm.o):(L$in_prologue)
          >>> referenced 6 more times
          
          rust-lld: error: undefined symbol: ___chkstk_ms
          >>> referenced by libring-602a4675add91404.rlib(poly1305_vec.o):(poly1305_blocks)
          >>> referenced by libring-602a4675add91404.rlib(poly1305_vec.o):(poly1305_combine)
          

error: could not compile `uefi-simple` due to previous error

I'm not sure what's going on, ring seems to be compiling fine, but then there's an error when building the app. Ideas @conradgrobler / @andrisaar?

@andrisaar
Copy link
Collaborator

Those undefined symbols (__declspec(dllimport) RtlVirtualUnwind, ___chkstk_ms) seem to be something Windows-specific. Looks like something may have come to the conclusion that we're building for Windows (probably because UEFI shares many conventions with Windows) and thus expects them to be there.

@jul-sh
Copy link
Contributor Author

jul-sh commented Apr 11, 2022

Based on

          >>> referenced by /workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/build/ring-4f8b492c00e507aa/out/aesni-x86_64-nasm.asm:1291
          >>>               libring-602a4675add91404.rlib(aesni-x86_64-nasm.o):(L$common_seh_tail)
          >>> referenced by /workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/build/ring-4f8b492c00e507aa/out/vpaes-x86_64-nasm.asm:946
          >>>               libring-602a4675add91404.rlib(vpaes-x86_64-nasm.o):(L$in_prologue)
          >>> referenced by /workspace/experimental/uefi/app/target/x86_64-unknown-uefi/debug/build/ring-4f8b492c00e507aa/out/sha256-x86_64-nasm.asm:4101
          >>>               libring-602a4675add91404.rlib(sha256-x86_64-nasm.o):(L$in_prologue)
          >>> referenced 6 more times

it seems these trace back to rings crypto build scripts, eg
https://github.com/project-oak/oak/blob/main/third_party/ring/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl (which was added in the UEFI patch: https://github.com/briansmith/ring/pull/1406/files). Perhaps they require further edits, or it runs incorrect variants.

What I'm a bit surprised by is this being caught only in the bundling step when adding it the UEFI example app. The remote attestation crate (which includes ring) on its own appears to build fine for the UEFI target.

@jul-sh jul-sh closed this Apr 11, 2022
@jul-sh jul-sh force-pushed the uefi-test-remote-attestation branch from 0a9532d to f7841d5 Compare April 11, 2022 09:51
@conradgrobler
Copy link
Collaborator

I assume it builds because it thinks the symbols would be resolved later during the linking process. As the UEFI app was not yet using the code, the linker did not include it and therefore did not try to resolve all the symbols. Now that it is trying to do so, it cannot resolve it and linking breaks.

@jul-sh jul-sh reopened this Apr 11, 2022
@conradgrobler
Copy link
Collaborator

It looks like this is a potential problem with nasm: openssl/openssl#12712

I am not sure how the precompiled bits are built to bypass this problem.

@conradgrobler
Copy link
Collaborator

Looks like this bit of code is setting the assembler:

AsmTarget {
oss: &[WINDOWS, UEFI],
arch: "x86_64",
perlasm_format: "nasm",
asm_extension: "asm",
preassemble: true,
},

Perhaps UEFI should be split out as a sperate one that does not use nasm.

@jul-sh
Copy link
Contributor Author

jul-sh commented Apr 11, 2022

Worth pointing out that the UEFI patch briansmith/ring#1406 we applied does not include a UEFI test runner for the ring crate itself. The proposed CI integration only checks the the library builds, so wouldn't catch this.

@conradgrobler
Copy link
Collaborator

I guess we could also provide a similar stub implementation: https://github.com/tianocore/edk2/blob/7c0ad2c33810ead45b7919f8f8d0e282dae52e71/CryptoPkg/Library/OpensslLib/X64/ApiHooks.c

@jul-sh
Copy link
Contributor Author

jul-sh commented Apr 11, 2022

It looks like this is a potential problem with nasm: openssl/openssl#12712

For reference, the email thread associated with the issue https://listman.redhat.com/archives/edk2-devel-archive/2020-August/msg00981.html.

Looks like the person who opened said issue is associated with edk2, and like they ended up going with the stub

Inserted MinGW, stubbed as it unavailable in UEFI.
Ref: https://metricpanda.com/rival-fortress-update-45-dealing-with-__chkstk-__chkstk_ms-when-cross-compiling-for-windows/
**/
void *
Copy link
Collaborator

@conradgrobler conradgrobler Apr 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thinking about this a bit more, I don't think this is the correct signature. I think it should be a naked function (not sure how to do that in c, but in rust it is marked with a [naked] attribute to stop the compiler from emitting a function prologue or epilogue) with no arguments and no return values.

Perhaps something like the following might work:

__attribute__((naked)) void ___chkstk_ms() {
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, will look into it

Copy link
Contributor Author

@jul-sh jul-sh Apr 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current status is that with those two stubs (as currently present), it does build. However it panics as soon as the underlying crypto code is called:

[ERROR]: /home/docker/.cargo/registry/src/github.com-1ecc6299db9ec823/uefi-services-0.12.1/src/lib.rs@142: Panic in src/main.rs at (149, 14):
[ERROR]: /home/docker/.cargo/registry/src/github.com-1ecc6299db9ec823/uefi-services-0.12.1/src/lib.rs@149: called `Result::unwrap()` on an `Err` value: Couldn't create signer
ERROR: 
ERROR: Caused by:
[ERROR]: /home/docker/.cargo/registry/src/github.com-1ecc6299db9ec823/uefi-services-0.12.1/src/lib.rs@149:     Couldn't generate PKCS#8 key pair: Unspecified

A simpler test (just filling a buf with SystemRandom to start with) results in the same panic.

Copy link
Contributor Author

@jul-sh jul-sh Apr 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the current stub should be fine, very similar to the stub that go used for a while:
https://android.googlesource.com/platform/external/compiler-rt/+/ccaafe6%5E%21/#F1
ref discussion in golang/go#6305

third_party/ring/src/rand.rs Outdated Show resolved Hide resolved
@jul-sh jul-sh force-pushed the uefi-test-remote-attestation branch from 3f21c3f to 11c7191 Compare April 12, 2022 18:08
@jul-sh jul-sh force-pushed the uefi-test-remote-attestation branch from 11c7191 to d8111c8 Compare April 13, 2022 12:31
Comment on lines 21 to 23
Inserted Mby inGW, stubbed as it is unavailable in UEFI. Given that this
routine is used for very large variable it appears unlikely to ever be
invoked in deployment.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Famous last words; would appreciate extra eyes on this in review. :)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From what I could see this is only used by the poly1305 code because it puts a lot of data on the stack. My understanding is that it is only inserted as a peformance optimisation on Windows, and should not break anything if a blank stub version is invoked. At worst it might cause slightly reduced performance, so I thinkg this is good for now.

@jul-sh
Copy link
Contributor Author

jul-sh commented Apr 14, 2022

Moved out some changes originally in this PR into the (merged) PRs of #2725, #2719, #2718 to allow for easier reviews.

Comment on lines 1 to 36
#!/usr/bin/env bash

# Thin shell script invoked as a cargo runner to run the compiled efi firmware
# in QEMU. Detects if kvm is supported, and sets qemu flags based on that.
# Instead of this single runner script it would be preferable to use a different
# runner based on whether the kvm feature is set. However, cargo does not
# currently allow this. Ref: https://github.com/rust-lang/cargo/issues/8170

readonly TARGET=$1

qemu_flags=(
'-nodefaults'
'-nographic'
'-bios' '/usr/share/OVMF/OVMF_CODE.fd'
'-serial' 'file:target/console.log'
'-serial' 'stdio'
'-machine' 'q35'
'-device' 'isa-debug-exit,iobase=0xf4,iosize=0x04'
)

# Use kvm if supported, as it is required for certain features (that are gated
# behind the cargo `kvm` feature flag. Note that systems that support kvm still
# need to enable the cargo `kvm` feature for this crate in order to include
# code that requires kvm in the compiled firmware. Ideally this check would
# check the cargo `kvm` flag itself. However, cargo does not expose this
# information to the runner.
# Ref: https://doc.rust-lang.org/cargo/reference/environment-variables.html
if [[ -e "/dev/kvm" ]]; then
qemu_flags+=(
'-enable-kvm'
'-cpu' 'Broadwell-IBRS'
)
fi

qemu-system-x86_64 "${qemu_flags[@]}" -kernel "${TARGET}"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a fan of this solution, but there does not currently seem to be a better way to do this. As long as we want this crate to run in GitHub CI we'll need to support hosts that do not support kvm.

Perhaps once we add a CI runner that supports virtualization we can remove this, only leaving the kvm reliant runner.

Comment on lines +3 to +7
# Thin shell script invoked as a cargo runner to run the compiled efi firmware
# in QEMU. Detects if kvm is supported, and sets qemu flags based on that.
# Instead of this single runner script it would be preferable to use a different
# runner based on whether the kvm feature is set. However, cargo does not
# currently allow this. Ref: https://github.com/rust-lang/cargo/issues/8170
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a fan of this solution, but there does not currently seem to be a better way to do this. As long as we want this crate to run in GitHub CI we'll need to support hosts that do not support kvm.

Perhaps once we add a CI runner that supports virtualization we can remove this, only leaving the kvm reliant runner.

@jul-sh jul-sh marked this pull request as ready for review April 14, 2022 22:51
@jul-sh jul-sh requested a review from a team as a code owner April 14, 2022 22:51
@jul-sh jul-sh requested review from conradgrobler and removed request for a team April 14, 2022 22:51
Comment on lines 21 to 23
Inserted Mby inGW, stubbed as it is unavailable in UEFI. Given that this
routine is used for very large variable it appears unlikely to ever be
invoked in deployment.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From what I could see this is only used by the poly1305 code because it puts a lot of data on the stack. My understanding is that it is only inserted as a peformance optimisation on Windows, and should not break anything if a blank stub version is invoked. At worst it might cause slightly reduced performance, so I thinkg this is good for now.


/**
Stub function for win64 routine used for exceedingly large variables.
Inserted Mby inGW, stubbed as it is unavailable in UEFI. Given that this
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super nit: I think this is inserted by nasm rather than MinGW.

// limitations under the License.
//

//! Integration Test of Remote Attestation in UEFI
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: This line of the comment should end with a . and seeing that it looks like a heading it should probably have a blank line after it.

Comment on lines 17 to 26
//! Integration Test of Remote Attestation in UEFI
//! This tests that remote attestion works inside the UEFI app. While the test
//! code is identical to (a subset of) the tests in the remote attestation crate
//! they here utilize the qemu runner configured in the UEFI app. This means
//! that test code actually compiled to a UEFI target, which changes the
//! underlying implementation of the remote attestation crate.
//! TODO(#2654): It would be preferable to remove the test here, and instead
//! run the tests in the oak_remote_attestation crate itself for both standard
//! and UEFI targets. Due to concerns related to the workspace this is presently
//! not possible. Ref: https://github.com/project-oak/oak/issues/2654
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that it is a good pragmatic choice for now. Once we have an end-to-end example with a connection from a client that exercises this functionality the test could be removed.

@jul-sh jul-sh merged commit 4a6666a into project-oak:main Apr 19, 2022
@jul-sh jul-sh deleted the uefi-test-remote-attestation branch April 19, 2022 16:35
@github-actions
Copy link

Reproducibility Index:

93dc1dfb8849e2618d4378bac34e03d41abfac2565ac53f0cc7d77e9f2b5f795  ./target/x86_64-unknown-linux-musl/release/oak_functions_loader_base
65af1630e9b7df522becb6f519d6a96492ba78212e1121133cd18b387635a448  ./target/x86_64-unknown-linux-musl/release/oak_functions_loader_unsafe

Reproducibility Index diff:

diff --git a/reproducibility_index b/reproducibility_index
index abfb372..f737749 100644
--- a/reproducibility_index
+++ b/reproducibility_index
@@ -1,2 +1,2 @@
-d11f60ea056c550c6e288747b2487a78a8699fcb4a4e6490634cd19997775978  ./target/x86_64-unknown-linux-musl/release/oak_functions_loader_base
-ff6fa85496bb0e9f830f5e3d39851789df01b5a8cbfc04dda485ca1c05a79f46  ./target/x86_64-unknown-linux-musl/release/oak_functions_loader_unsafe
+93dc1dfb8849e2618d4378bac34e03d41abfac2565ac53f0cc7d77e9f2b5f795  ./target/x86_64-unknown-linux-musl/release/oak_functions_loader_base
+65af1630e9b7df522becb6f519d6a96492ba78212e1121133cd18b387635a448  ./target/x86_64-unknown-linux-musl/release/oak_functions_loader_unsafe

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants