Skip to content

Commit f7662bc

Browse files
committed
go/runtime/host: Improve common.GetQuotePolicy function
1 parent 68559e4 commit f7662bc

5 files changed

Lines changed: 46 additions & 40 deletions

File tree

.changelog/6531.trivial.md

Whitespace-only changes.

go/runtime/host/sgx/common/common.go

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,56 +8,47 @@ import (
88

99
"github.com/cenkalti/backoff/v4"
1010

11+
"github.com/oasisprotocol/oasis-core/go/common"
1112
"github.com/oasisprotocol/oasis-core/go/common/cbor"
1213
"github.com/oasisprotocol/oasis-core/go/common/crypto/signature"
1314
"github.com/oasisprotocol/oasis-core/go/common/identity"
1415
"github.com/oasisprotocol/oasis-core/go/common/logging"
1516
"github.com/oasisprotocol/oasis-core/go/common/node"
1617
"github.com/oasisprotocol/oasis-core/go/common/sgx/pcs"
1718
sgxQuote "github.com/oasisprotocol/oasis-core/go/common/sgx/quote"
19+
"github.com/oasisprotocol/oasis-core/go/common/version"
1820
consensus "github.com/oasisprotocol/oasis-core/go/consensus/api"
1921
registry "github.com/oasisprotocol/oasis-core/go/registry/api"
20-
"github.com/oasisprotocol/oasis-core/go/runtime/bundle/component"
2122
"github.com/oasisprotocol/oasis-core/go/runtime/host"
2223
"github.com/oasisprotocol/oasis-core/go/runtime/host/protocol"
2324
"github.com/oasisprotocol/oasis-core/go/runtime/host/sandbox"
2425
)
2526

26-
// GetQuotePolicy fetches the quote policy for the given component. In case the policy is
27-
// not available, return the fallback policy.
28-
func GetQuotePolicy(
27+
// GetRONLQuotePolicy fetches the quote policy for the specified RONL deployment.
28+
//
29+
// Returns nil if the policy is not available.
30+
func GetRONLQuotePolicy(
2931
ctx context.Context,
30-
cfg *host.Config,
32+
runtimeID common.Namespace,
33+
version version.Version,
3134
cs consensus.Service,
32-
fallbackPolicy *sgxQuote.Policy,
3335
) (*sgxQuote.Policy, error) {
34-
switch cfg.Component.Kind {
35-
case component.RONL:
36-
// Load RONL policy from the consensus layer.
37-
rt, err := cs.Registry().GetRuntime(ctx, &registry.GetRuntimeQuery{
38-
Height: consensus.HeightLatest,
39-
ID: cfg.ID,
40-
IncludeSuspended: true,
41-
})
42-
if err != nil {
43-
return nil, fmt.Errorf("failed to query runtime descriptor: %w", err)
44-
}
45-
if d := rt.DeploymentForVersion(cfg.Component.Version); d != nil {
46-
var sc node.SGXConstraints
47-
if err = cbor.Unmarshal(d.TEE, &sc); err != nil {
48-
return nil, fmt.Errorf("malformed runtime SGX constraints: %w", err)
49-
}
50-
51-
return sc.Policy, nil
36+
rt, err := cs.Registry().GetRuntime(ctx, &registry.GetRuntimeQuery{
37+
Height: consensus.HeightLatest,
38+
ID: runtimeID,
39+
IncludeSuspended: true,
40+
})
41+
if err != nil {
42+
return nil, fmt.Errorf("failed to query runtime descriptor: %w", err)
43+
}
44+
if d := rt.DeploymentForVersion(version); d != nil {
45+
var sc node.SGXConstraints
46+
if err = cbor.Unmarshal(d.TEE, &sc); err != nil {
47+
return nil, fmt.Errorf("malformed runtime SGX constraints: %w", err)
5248
}
53-
return fallbackPolicy, nil
54-
case component.ROFL:
55-
// Always use fallback policy for ROFL components.
56-
return fallbackPolicy, nil
57-
default:
58-
// No policy.
59-
return fallbackPolicy, nil
49+
return sc.Policy, nil
6050
}
51+
return nil, nil
6152
}
6253

6354
// EndorseCapabilityTEE endorses the given CapabilityTEE and submits the signed endorsement to the

go/runtime/host/sgx/ecdsa.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import (
66

77
"github.com/oasisprotocol/oasis-core/go/common/sgx/aesm"
88
"github.com/oasisprotocol/oasis-core/go/common/sgx/pcs"
9+
"github.com/oasisprotocol/oasis-core/go/common/sgx/quote"
910
consensus "github.com/oasisprotocol/oasis-core/go/consensus/api"
11+
"github.com/oasisprotocol/oasis-core/go/runtime/bundle/component"
1012
"github.com/oasisprotocol/oasis-core/go/runtime/host"
1113
"github.com/oasisprotocol/oasis-core/go/runtime/host/protocol"
1214
sgxCommon "github.com/oasisprotocol/oasis-core/go/runtime/host/sgx/common"
@@ -63,9 +65,12 @@ func (ec *teeStateECDSA) Update(ctx context.Context, sp *sgxProvisioner, conn pr
6365
return nil, fmt.Errorf("failed to get quote: %w", err)
6466
}
6567

66-
quotePolicy, err := sgxCommon.GetQuotePolicy(ctx, ec.cfg, sp.consensus, nil)
67-
if err != nil {
68-
return nil, err
68+
var quotePolicy *quote.Policy
69+
if ec.cfg.Component.Kind == component.RONL {
70+
quotePolicy, err = sgxCommon.GetRONLQuotePolicy(ctx, ec.cfg.ID, ec.cfg.Component.Version, sp.consensus)
71+
if err != nil {
72+
return nil, fmt.Errorf("failed to fetch RONL quote policy: %w", err)
73+
}
6974
}
7075
var pcsQuotePolicy *pcs.QuotePolicy
7176
if quotePolicy != nil {

go/runtime/host/sgx/epid.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
sgxQuote "github.com/oasisprotocol/oasis-core/go/common/sgx/quote"
1313
consensus "github.com/oasisprotocol/oasis-core/go/consensus/api"
1414
ias "github.com/oasisprotocol/oasis-core/go/ias/api"
15+
"github.com/oasisprotocol/oasis-core/go/runtime/bundle/component"
1516
"github.com/oasisprotocol/oasis-core/go/runtime/host"
1617
"github.com/oasisprotocol/oasis-core/go/runtime/host/protocol"
1718
sgxCommon "github.com/oasisprotocol/oasis-core/go/runtime/host/sgx/common"
@@ -107,9 +108,12 @@ func (ep *teeStateEPID) update(
107108
return nil, fmt.Errorf("error while getting quote: %w", err)
108109
}
109110

110-
quotePolicy, err := sgxCommon.GetQuotePolicy(ctx, ep.cfg, sp.consensus, nil)
111-
if err != nil {
112-
return nil, err
111+
var quotePolicy *sgxQuote.Policy
112+
if ep.cfg.Component.Kind == component.RONL {
113+
quotePolicy, err = sgxCommon.GetRONLQuotePolicy(ctx, ep.cfg.ID, ep.cfg.Component.Version, sp.consensus)
114+
if err != nil {
115+
return nil, fmt.Errorf("failed to fetch RONL quote policy: %w", err)
116+
}
113117
}
114118
var minTCBEvaluationDataNumber uint32
115119
if quotePolicy != nil && quotePolicy.IAS != nil {

go/runtime/host/tdx/qemu.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,9 +443,15 @@ func (p *qemuProvisioner) updateCapabilityTEE(ctx context.Context, hp *sandbox.H
443443
TDX: &pcs.TdxQuotePolicy{},
444444
},
445445
}
446-
quotePolicy, err := sgxCommon.GetQuotePolicy(ctx, hp.Config, p.consensus, fallbackPolicy)
447-
if err != nil {
448-
return nil, err
446+
var quotePolicy *sgxQuote.Policy
447+
if hp.Config.Component.Kind == component.RONL {
448+
quotePolicy, err = sgxCommon.GetRONLQuotePolicy(ctx, hp.Config.ID, hp.Config.Component.Version, p.consensus)
449+
if err != nil {
450+
return nil, fmt.Errorf("failed to fetch RONL quote policy: %w", err)
451+
}
452+
}
453+
if quotePolicy == nil {
454+
quotePolicy = fallbackPolicy
449455
}
450456
if quotePolicy.PCS == nil {
451457
quotePolicy.PCS = fallbackPolicy.PCS

0 commit comments

Comments
 (0)