Skip to content

Commit 0617649

Browse files
committed
Merge branch 'wasmd-patch'
2 parents 2aad500 + 823c07f commit 0617649

File tree

13 files changed

+106
-6
lines changed

13 files changed

+106
-6
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# CHANGELOG
22

3+
# 1.14.0
4+
5+
- Fix CWA-2024-005
6+
- Bump ledger-cosmos-go from v0.12.2 to v0.12.4
7+
38
# 1.13.0
49

510
- Support DCAP attestation

app/app.go

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
v1_11 "github.com/scrtlabs/SecretNetwork/app/upgrades/v1.11"
3737
v1_12 "github.com/scrtlabs/SecretNetwork/app/upgrades/v1.12"
3838
v1_13 "github.com/scrtlabs/SecretNetwork/app/upgrades/v1.13"
39+
v1_14 "github.com/scrtlabs/SecretNetwork/app/upgrades/v1.14"
3940
v1_3 "github.com/scrtlabs/SecretNetwork/app/upgrades/v1.3"
4041
v1_4 "github.com/scrtlabs/SecretNetwork/app/upgrades/v1.4"
4142
v1_5 "github.com/scrtlabs/SecretNetwork/app/upgrades/v1.5"
@@ -109,6 +110,7 @@ var (
109110
v1_11.Upgrade,
110111
v1_12.Upgrade,
111112
v1_13.Upgrade,
113+
v1_14.Upgrade,
112114
}
113115
)
114116

app/upgrades/v1.14/upgrade.go

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package v1_14
2+
3+
import (
4+
"fmt"
5+
6+
store "github.com/cosmos/cosmos-sdk/store/types"
7+
sdk "github.com/cosmos/cosmos-sdk/types"
8+
"github.com/cosmos/cosmos-sdk/types/module"
9+
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
10+
"github.com/scrtlabs/SecretNetwork/app/keepers"
11+
"github.com/scrtlabs/SecretNetwork/app/upgrades"
12+
)
13+
14+
const upgradeName = "v1.14"
15+
16+
var Upgrade = upgrades.Upgrade{
17+
UpgradeName: upgradeName,
18+
CreateUpgradeHandler: createUpgradeHandler,
19+
StoreUpgrades: store.StoreUpgrades{},
20+
}
21+
22+
func createUpgradeHandler(mm *module.Manager, _ *keepers.SecretAppKeepers, configurator module.Configurator,
23+
) upgradetypes.UpgradeHandler {
24+
return func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
25+
ctx.Logger().Info(` _ _ _____ _____ _____ _____ ______ `)
26+
ctx.Logger().Info(`| | | | __ \ / ____| __ \ /\ | __ \| ____|`)
27+
ctx.Logger().Info(`| | | | |__) | | __| |__) | / \ | | | | |__ `)
28+
ctx.Logger().Info(`| | | | ___/| | |_ | _ / / /\ \ | | | | __| `)
29+
ctx.Logger().Info(`| |__| | | | |__| | | \ \ / ____ \| |__| | |____ `)
30+
ctx.Logger().Info(` \____/|_| \_____|_| \_\/_/ \_\_____/|______|`)
31+
32+
ctx.Logger().Info(fmt.Sprintf("Running module migrations for %s...", upgradeName))
33+
34+
return mm.RunMigrations(ctx, configurator, vm)
35+
}
36+
}

client/docs/config.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"info": {
44
"title": "Secret Network",
55
"description": "A REST interface for queries and transactions",
6-
"version": "v1.12"
6+
"version": "v1.14"
77
},
88
"apis": [
99
{

client/docs/static/openapi/index.html

+2-2
Large diffs are not rendered by default.

client/docs/static/openapi/openapi.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ openapi: 3.0.0
22
info:
33
title: Secret Network
44
description: A REST interface for queries and transactions
5-
version: v1.12
5+
version: v1.14
66
paths:
77
/cosmos/auth/v1beta1/accounts:
88
get:

client/docs/static/swagger/swagger.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ swagger: '2.0'
22
info:
33
title: Secret Network
44
description: A REST interface for queries and transactions
5-
version: v1.12
5+
version: v1.14
66
paths:
77
/cosmos/auth/v1beta1/accounts:
88
get:

client/docs/statik/statik.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x/compute/internal/keeper/handler_plugin.go

+15
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,21 @@ func (h SDKMessageHandler) handleSdkMessage(ctx sdk.Context, contractAddr sdk.Ad
634634
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "can't route message %+v", msg)
635635
}
636636

637+
// callDepthMessageHandler is a wrapper around a Messenger that checks the call depth before dispatching a message.
638+
type callDepthMessageHandler struct {
639+
Messenger
640+
MaxCallDepth uint32
641+
}
642+
643+
func (h callDepthMessageHandler) DispatchMsg(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg v1wasmTypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) {
644+
ctx, err = checkAndIncreaseCallDepth(ctx, h.MaxCallDepth)
645+
if err != nil {
646+
return nil, nil, err
647+
}
648+
649+
return h.Messenger.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg)
650+
}
651+
637652
// convertWasmIBCTimeoutHeightToCosmosHeight converts a wasm type ibc timeout height to ibc module type height
638653
func convertWasmIBCTimeoutHeightToCosmosHeight(ibcTimeoutBlock *v1wasmTypes.IBCTimeoutBlock) ibcclienttypes.Height {
639654
if ibcTimeoutBlock == nil {

x/compute/internal/keeper/keeper.go

+22
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ type Keeper struct {
7979
messenger Messenger
8080
// queryGasLimit is the max wasm gas that can be spent on executing a query with a contract
8181
queryGasLimit uint64
82+
maxCallDepth uint32
8283
HomeDir string
8384
// authZPolicy AuthorizationPolicy
8485
// paramSpace subspace.Subspace
@@ -144,9 +145,12 @@ func NewKeeper(
144145
cdc,
145146
),
146147
queryGasLimit: wasmConfig.SmartQueryGasLimit,
148+
maxCallDepth: types.DefaultMaxCallDepth,
147149
HomeDir: homeDir,
148150
LastMsgManager: lastMsgManager,
149151
}
152+
// always wrap the messenger, even if it was replaced by an option
153+
keeper.messenger = callDepthMessageHandler{keeper.messenger, keeper.maxCallDepth}
150154
keeper.queryPlugins = DefaultQueryPlugins(govKeeper, distKeeper, mintKeeper, bankKeeper, stakingKeeper, queryRouter, &keeper, channelKeeper).Merge(customPlugins)
151155

152156
return keeper
@@ -754,6 +758,24 @@ func (k Keeper) querySmartImpl(ctx sdk.Context, contractAddress sdk.AccAddress,
754758
return queryResult, nil
755759
}
756760

761+
func checkAndIncreaseCallDepth(ctx sdk.Context, maxCallDepth uint32) (sdk.Context, error) {
762+
var callDepth uint32
763+
if size, ok := types.CallDepth(ctx); ok {
764+
callDepth = size
765+
}
766+
767+
// increase
768+
callDepth++
769+
770+
// did we go too far?
771+
if callDepth > maxCallDepth {
772+
return sdk.Context{}, types.ErrExceedMaxCallDepth
773+
}
774+
775+
// set updated stack size
776+
return types.WithCallDepth(ctx, callDepth), nil
777+
}
778+
757779
// We don't use this function since we have an encrypted state. It's here for upstream compatibility
758780
// QueryRaw returns the contract's state for give key. For a `nil` key a empty slice result is returned.
759781
func (k Keeper) QueryRaw(ctx sdk.Context, contractAddress sdk.AccAddress, key []byte) []types.Model {

x/compute/internal/types/context.go

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package types
2+
3+
import (
4+
sdk "github.com/cosmos/cosmos-sdk/types"
5+
)
6+
7+
const contextKeyCallDepth contextKey = iota
8+
9+
func WithCallDepth(ctx sdk.Context, counter uint32) sdk.Context {
10+
return ctx.WithValue(contextKeyCallDepth, counter)
11+
}
12+
13+
func CallDepth(ctx sdk.Context) (uint32, bool) {
14+
val, ok := ctx.Value(contextKeyCallDepth).(uint32)
15+
return val, ok
16+
}

x/compute/internal/types/errors.go

+3
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ var (
7272

7373
// ErrMaxIBCChannels error for maximum number of ibc channels reached
7474
ErrMaxIBCChannels = sdkErrors.Register(DefaultCodespace, 22, "max transfer channels")
75+
76+
// ErrExceedMaxCallDepth error if max message stack size is exceeded
77+
ErrExceedMaxCallDepth = sdkErrors.Register(DefaultCodespace, 30, "max call depth exceeded")
7578
)
7679

7780
func IsEncryptedErrorCode(code uint32) bool {

x/compute/internal/types/types.go

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
)
1818

1919
const (
20+
DefaultMaxCallDepth = uint32(500)
2021
defaultLRUCacheSize = uint64(0)
2122
defaultEnclaveLRUCacheSize = uint16(100)
2223
defaultQueryGasLimit = uint64(10_000_000)

0 commit comments

Comments
 (0)