Skip to content

Commit aa5d3f7

Browse files
committed
flamenco, feature: enable_extend_program_checked
1 parent 7506327 commit aa5d3f7

File tree

10 files changed

+409
-207
lines changed

10 files changed

+409
-207
lines changed

src/flamenco/features/fd_features_generated.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,6 +1614,12 @@ fd_feature_id_t const ids[] = {
16141614
.name = "formalize_loaded_transaction_data_size",
16151615
.cleaned_up = {UINT_MAX, UINT_MAX, UINT_MAX} },
16161616

1617+
{ .index = offsetof(fd_features_t, enable_extend_program_checked)>>3,
1618+
.id = {"\x1a\xbb\x7f\x36\x84\xcf\x70\x71\xd5\x7a\xb1\x1e\x63\x2b\xf9\xaf\x28\x4d\x99\x50\x39\x5d\xe9\x70\x11\x8c\x88\x96\xc7\x32\x90\x49"},
1619+
/* 2oMRZEDWT2tqtYMofhmmfQ8SsjqUFzT6sYXppQDavxwz */
1620+
.name = "enable_extend_program_checked",
1621+
.cleaned_up = {UINT_MAX, UINT_MAX, UINT_MAX} },
1622+
16171623
{ .index = ULONG_MAX }
16181624
};
16191625
/* TODO replace this with fd_map_perfect */
@@ -1856,6 +1862,7 @@ fd_feature_id_query( ulong prefix ) {
18561862
case 0xec3a4c069e71cb0e: return &ids[ 233 ];
18571863
case 0xbbec21266d76cb0e: return &ids[ 234 ];
18581864
case 0xe72f76507222e3bb: return &ids[ 235 ];
1865+
case 0x7170cf84367fbb1a: return &ids[ 236 ];
18591866
default: break;
18601867
}
18611868
return NULL;
@@ -2097,4 +2104,5 @@ FD_STATIC_ASSERT( offsetof( fd_features_t, mask_out_rent_epoch_in_vm_serializati
20972104
FD_STATIC_ASSERT( offsetof( fd_features_t, disable_zk_elgamal_proof_program )>>3==233UL, layout );
20982105
FD_STATIC_ASSERT( offsetof( fd_features_t, reenable_zk_elgamal_proof_program )>>3==234UL, layout );
20992106
FD_STATIC_ASSERT( offsetof( fd_features_t, formalize_loaded_transaction_data_size )>>3==235UL, layout );
2107+
FD_STATIC_ASSERT( offsetof( fd_features_t, enable_extend_program_checked )>>3==236UL, layout );
21002108
FD_STATIC_ASSERT( sizeof( fd_features_t )>>3==FD_FEATURE_ID_CNT, layout );

src/flamenco/features/fd_features_generated.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#endif
99

1010
/* FEATURE_ID_CNT is the number of features in ids */
11-
#define FD_FEATURE_ID_CNT (236UL)
11+
#define FD_FEATURE_ID_CNT (237UL)
1212
union fd_features {
1313
ulong f[ FD_FEATURE_ID_CNT ];
1414
struct {
@@ -248,5 +248,6 @@ union fd_features {
248248
/* 0xec3a4c069e71cb0e */ ulong disable_zk_elgamal_proof_program;
249249
/* 0xbbec21266d76cb0e */ ulong reenable_zk_elgamal_proof_program;
250250
/* 0xe72f76507222e3bb */ ulong formalize_loaded_transaction_data_size;
251+
/* 0x7170cf84367fbb1a */ ulong enable_extend_program_checked;
251252
};
252253
};

src/flamenco/features/feature_map.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,5 +234,6 @@
234234
{"name":"mask_out_rent_epoch_in_vm_serialization","pubkey":"RENtePQcDLrAbxAsP3k8dwVcnNYQ466hi2uKvALjnXx"},
235235
{"name":"disable_zk_elgamal_proof_program","pubkey":"zkdoVwnSFnSLtGJG7irJPEYUpmb4i7sGMGcnN6T9rnC"},
236236
{"name":"reenable_zk_elgamal_proof_program","pubkey":"zkemPXcuM3G4wpMDZ36Cpw34EjUpvm1nuioiSGbGZPR"},
237-
{"name":"formalize_loaded_transaction_data_size","pubkey":"DeS7sR48ZcFTUmt5FFEVDr1v1bh73aAbZiZq3SYr8Eh8"}
237+
{"name":"formalize_loaded_transaction_data_size","pubkey":"DeS7sR48ZcFTUmt5FFEVDr1v1bh73aAbZiZq3SYr8Eh8"},
238+
{"name":"enable_extend_program_checked","pubkey":"2oMRZEDWT2tqtYMofhmmfQ8SsjqUFzT6sYXppQDavxwz"}
238239
]

src/flamenco/runtime/program/fd_bpf_loader_program.c

Lines changed: 280 additions & 192 deletions
Large diffs are not rendered by default.

src/flamenco/types/fd_fuzz_types.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2584,6 +2584,14 @@ void *fd_bpf_upgradeable_loader_program_instruction_extend_program_generate( voi
25842584
return mem;
25852585
}
25862586

2587+
void *fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_generate( void *mem, void **alloc_mem, fd_rng_t * rng ) {
2588+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t *self = (fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t *) mem;
2589+
*alloc_mem = (uchar *) *alloc_mem + sizeof(fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t);
2590+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_new(mem);
2591+
self->additional_bytes = fd_rng_uint( rng );
2592+
return mem;
2593+
}
2594+
25872595
void fd_bpf_upgradeable_loader_program_instruction_inner_generate( fd_bpf_upgradeable_loader_program_instruction_inner_t * self, void **alloc_mem, uint discriminant, fd_rng_t * rng ) {
25882596
switch (discriminant) {
25892597
case 1: {
@@ -2598,13 +2606,17 @@ void fd_bpf_upgradeable_loader_program_instruction_inner_generate( fd_bpf_upgrad
25982606
fd_bpf_upgradeable_loader_program_instruction_extend_program_generate( &self->extend_program, alloc_mem, rng );
25992607
break;
26002608
}
2609+
case 9: {
2610+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_generate( &self->extend_program_checked, alloc_mem, rng );
2611+
break;
2612+
}
26012613
}
26022614
}
26032615
void *fd_bpf_upgradeable_loader_program_instruction_generate( void *mem, void **alloc_mem, fd_rng_t * rng ) {
26042616
fd_bpf_upgradeable_loader_program_instruction_t *self = (fd_bpf_upgradeable_loader_program_instruction_t *) mem;
26052617
*alloc_mem = (uchar *) *alloc_mem + sizeof(fd_bpf_upgradeable_loader_program_instruction_t);
26062618
fd_bpf_upgradeable_loader_program_instruction_new(mem);
2607-
self->discriminant = fd_rng_uint( rng ) % 9;
2619+
self->discriminant = fd_rng_uint( rng ) % 10;
26082620
fd_bpf_upgradeable_loader_program_instruction_inner_generate( &self->inner, alloc_mem, self->discriminant, rng );
26092621
return mem;
26102622
}

src/flamenco/types/fd_types.c

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15919,6 +15919,35 @@ void fd_bpf_upgradeable_loader_program_instruction_extend_program_walk( void * w
1591915919
fun( w, &self->additional_bytes, "additional_bytes", FD_FLAMENCO_TYPE_UINT, "uint", level, 0 );
1592015920
fun( w, self, name, FD_FLAMENCO_TYPE_MAP_END, "fd_bpf_upgradeable_loader_program_instruction_extend_program", level--, 0 );
1592115921
}
15922+
int fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_encode( fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t const * self, fd_bincode_encode_ctx_t * ctx ) {
15923+
int err;
15924+
err = fd_bincode_uint32_encode( self->additional_bytes, ctx );
15925+
if( FD_UNLIKELY( err ) ) return err;
15926+
return FD_BINCODE_SUCCESS;
15927+
}
15928+
static inline int fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_decode_footprint_inner( fd_bincode_decode_ctx_t * ctx, ulong * total_sz ) {
15929+
if( (ulong)ctx->data + 4UL > (ulong)ctx->dataend ) { return FD_BINCODE_ERR_OVERFLOW; };
15930+
ctx->data = (void *)( (ulong)ctx->data + 4UL );
15931+
return 0;
15932+
}
15933+
static void fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_decode_inner( void * struct_mem, void * * alloc_mem, fd_bincode_decode_ctx_t * ctx ) {
15934+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t * self = (fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t *)struct_mem;
15935+
fd_bincode_uint32_decode_unsafe( &self->additional_bytes, ctx );
15936+
}
15937+
void * fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_decode( void * mem, fd_bincode_decode_ctx_t * ctx ) {
15938+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t * self = (fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t *)mem;
15939+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_new( self );
15940+
void * alloc_region = (uchar *)mem + sizeof(fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t);
15941+
void * * alloc_mem = &alloc_region;
15942+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_decode_inner( mem, alloc_mem, ctx );
15943+
return self;
15944+
}
15945+
void fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_walk( void * w, fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t const * self, fd_types_walk_fn_t fun, const char *name, uint level, uint varint ) {
15946+
(void) varint;
15947+
fun( w, self, name, FD_FLAMENCO_TYPE_MAP, "fd_bpf_upgradeable_loader_program_instruction_extend_program_checked", level++, 0 );
15948+
fun( w, &self->additional_bytes, "additional_bytes", FD_FLAMENCO_TYPE_UINT, "uint", level, 0 );
15949+
fun( w, self, name, FD_FLAMENCO_TYPE_MAP_END, "fd_bpf_upgradeable_loader_program_instruction_extend_program_checked", level--, 0 );
15950+
}
1592215951
FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_initialize_buffer(fd_bpf_upgradeable_loader_program_instruction_t const * self) {
1592315952
return self->discriminant == 0;
1592415953
}
@@ -15946,6 +15975,9 @@ FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_set_authority_
1594615975
FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_migrate(fd_bpf_upgradeable_loader_program_instruction_t const * self) {
1594715976
return self->discriminant == 8;
1594815977
}
15978+
FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_extend_program_checked(fd_bpf_upgradeable_loader_program_instruction_t const * self) {
15979+
return self->discriminant == 9;
15980+
}
1594915981
void fd_bpf_upgradeable_loader_program_instruction_inner_new( fd_bpf_upgradeable_loader_program_instruction_inner_t * self, uint discriminant );
1595015982
int fd_bpf_upgradeable_loader_program_instruction_inner_decode_footprint( uint discriminant, fd_bincode_decode_ctx_t * ctx, ulong * total_sz ) {
1595115983
int err;
@@ -15983,6 +16015,11 @@ int fd_bpf_upgradeable_loader_program_instruction_inner_decode_footprint( uint d
1598316015
case 8: {
1598416016
return FD_BINCODE_SUCCESS;
1598516017
}
16018+
case 9: {
16019+
err = fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_decode_footprint_inner( ctx, total_sz );
16020+
if( FD_UNLIKELY( err ) ) return err;
16021+
return FD_BINCODE_SUCCESS;
16022+
}
1598616023
default: return FD_BINCODE_ERR_ENCODING;
1598716024
}
1598816025
}
@@ -16033,6 +16070,10 @@ static void fd_bpf_upgradeable_loader_program_instruction_inner_decode_inner( fd
1603316070
case 8: {
1603416071
break;
1603516072
}
16073+
case 9: {
16074+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_decode_inner( &self->extend_program_checked, alloc_mem, ctx );
16075+
break;
16076+
}
1603616077
}
1603716078
}
1603816079
static void fd_bpf_upgradeable_loader_program_instruction_decode_inner( void * struct_mem, void * * alloc_mem, fd_bincode_decode_ctx_t * ctx ) {
@@ -16080,6 +16121,10 @@ void fd_bpf_upgradeable_loader_program_instruction_inner_new( fd_bpf_upgradeable
1608016121
case 8: {
1608116122
break;
1608216123
}
16124+
case 9: {
16125+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_new( &self->extend_program_checked );
16126+
break;
16127+
}
1608316128
default: break; // FD_LOG_ERR(( "unhandled type"));
1608416129
}
1608516130
}
@@ -16135,6 +16180,11 @@ void fd_bpf_upgradeable_loader_program_instruction_walk( void * w, fd_bpf_upgrad
1613516180
fun( w, self, "migrate", FD_FLAMENCO_TYPE_ENUM_DISC, "discriminant", level, 0 );
1613616181
break;
1613716182
}
16183+
case 9: {
16184+
fun( w, self, "extend_program_checked", FD_FLAMENCO_TYPE_ENUM_DISC, "discriminant", level, 0 );
16185+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_walk( w, &self->inner.extend_program_checked, fun, "extend_program_checked", level, 0 );
16186+
break;
16187+
}
1613816188
}
1613916189
fun( w, self, name, FD_FLAMENCO_TYPE_ENUM_END, "fd_bpf_upgradeable_loader_program_instruction", level--, 0 );
1614016190
}
@@ -16154,6 +16204,10 @@ ulong fd_bpf_upgradeable_loader_program_instruction_size( fd_bpf_upgradeable_loa
1615416204
size += fd_bpf_upgradeable_loader_program_instruction_extend_program_size( &self->inner.extend_program );
1615516205
break;
1615616206
}
16207+
case 9: {
16208+
size += fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_size( &self->inner.extend_program_checked );
16209+
break;
16210+
}
1615716211
}
1615816212
return size;
1615916213
}
@@ -16176,6 +16230,11 @@ int fd_bpf_upgradeable_loader_program_instruction_inner_encode( fd_bpf_upgradeab
1617616230
if( FD_UNLIKELY( err ) ) return err;
1617716231
break;
1617816232
}
16233+
case 9: {
16234+
err = fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_encode( &self->extend_program_checked, ctx );
16235+
if( FD_UNLIKELY( err ) ) return err;
16236+
break;
16237+
}
1617916238
}
1618016239
return FD_BINCODE_SUCCESS;
1618116240
}

src/flamenco/types/fd_types.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2572,10 +2572,18 @@ struct fd_bpf_upgradeable_loader_program_instruction_extend_program {
25722572
typedef struct fd_bpf_upgradeable_loader_program_instruction_extend_program fd_bpf_upgradeable_loader_program_instruction_extend_program_t;
25732573
#define FD_BPF_UPGRADEABLE_LOADER_PROGRAM_INSTRUCTION_EXTEND_PROGRAM_ALIGN alignof(fd_bpf_upgradeable_loader_program_instruction_extend_program_t)
25742574

2575+
/* Encoded Size: Fixed (4 bytes) */
2576+
struct fd_bpf_upgradeable_loader_program_instruction_extend_program_checked {
2577+
uint additional_bytes;
2578+
};
2579+
typedef struct fd_bpf_upgradeable_loader_program_instruction_extend_program_checked fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t;
2580+
#define FD_BPF_UPGRADEABLE_LOADER_PROGRAM_INSTRUCTION_EXTEND_PROGRAM_CHECKED_ALIGN alignof(fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t)
2581+
25752582
union fd_bpf_upgradeable_loader_program_instruction_inner {
25762583
fd_bpf_upgradeable_loader_program_instruction_write_t write;
25772584
fd_bpf_upgradeable_loader_program_instruction_deploy_with_max_data_len_t deploy_with_max_data_len;
25782585
fd_bpf_upgradeable_loader_program_instruction_extend_program_t extend_program;
2586+
fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t extend_program_checked;
25792587
};
25802588
typedef union fd_bpf_upgradeable_loader_program_instruction_inner fd_bpf_upgradeable_loader_program_instruction_inner_t;
25812589

@@ -5402,6 +5410,18 @@ static inline int fd_bpf_upgradeable_loader_program_instruction_extend_program_d
54025410
}
54035411
void * fd_bpf_upgradeable_loader_program_instruction_extend_program_decode( void * mem, fd_bincode_decode_ctx_t * ctx );
54045412

5413+
static inline void fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_new( fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t * self ) { fd_memset( self, 0, sizeof(fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t) ); }
5414+
int fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_encode( fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t const * self, fd_bincode_encode_ctx_t * ctx );
5415+
void fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_walk( void * w, fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t const * self, fd_types_walk_fn_t fun, const char *name, uint level, uint varint );
5416+
static inline ulong fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_size( fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t const * self ) { (void)self; return 4UL; }
5417+
static inline ulong fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_align( void ) { return FD_BPF_UPGRADEABLE_LOADER_PROGRAM_INSTRUCTION_EXTEND_PROGRAM_CHECKED_ALIGN; }
5418+
static inline int fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_decode_footprint( fd_bincode_decode_ctx_t * ctx, ulong * total_sz ) {
5419+
*total_sz += sizeof(fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_t);
5420+
if( (ulong)ctx->data + 4UL > (ulong)ctx->dataend ) { return FD_BINCODE_ERR_OVERFLOW; };
5421+
return 0;
5422+
}
5423+
void * fd_bpf_upgradeable_loader_program_instruction_extend_program_checked_decode( void * mem, fd_bincode_decode_ctx_t * ctx );
5424+
54055425
void fd_bpf_upgradeable_loader_program_instruction_new_disc( fd_bpf_upgradeable_loader_program_instruction_t * self, uint discriminant );
54065426
void fd_bpf_upgradeable_loader_program_instruction_new( fd_bpf_upgradeable_loader_program_instruction_t * self );
54075427
int fd_bpf_upgradeable_loader_program_instruction_encode( fd_bpf_upgradeable_loader_program_instruction_t const * self, fd_bincode_encode_ctx_t * ctx );
@@ -5420,6 +5440,7 @@ FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_close( fd_bpf_
54205440
FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_extend_program( fd_bpf_upgradeable_loader_program_instruction_t const * self );
54215441
FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_set_authority_checked( fd_bpf_upgradeable_loader_program_instruction_t const * self );
54225442
FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_migrate( fd_bpf_upgradeable_loader_program_instruction_t const * self );
5443+
FD_FN_PURE uchar fd_bpf_upgradeable_loader_program_instruction_is_extend_program_checked( fd_bpf_upgradeable_loader_program_instruction_t const * self );
54235444
enum {
54245445
fd_bpf_upgradeable_loader_program_instruction_enum_initialize_buffer = 0,
54255446
fd_bpf_upgradeable_loader_program_instruction_enum_write = 1,
@@ -5430,6 +5451,7 @@ fd_bpf_upgradeable_loader_program_instruction_enum_close = 5,
54305451
fd_bpf_upgradeable_loader_program_instruction_enum_extend_program = 6,
54315452
fd_bpf_upgradeable_loader_program_instruction_enum_set_authority_checked = 7,
54325453
fd_bpf_upgradeable_loader_program_instruction_enum_migrate = 8,
5454+
fd_bpf_upgradeable_loader_program_instruction_enum_extend_program_checked = 9,
54335455
};
54345456
void fd_bpf_upgradeable_loader_state_buffer_new( fd_bpf_upgradeable_loader_state_buffer_t * self );
54355457
int fd_bpf_upgradeable_loader_state_buffer_encode( fd_bpf_upgradeable_loader_state_buffer_t const * self, fd_bincode_encode_ctx_t * ctx );

src/flamenco/types/fd_types.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1665,6 +1665,13 @@
16651665
{ "name": "additional_bytes", "type": "uint" }
16661666
]
16671667
},
1668+
{
1669+
"name": "bpf_upgradeable_loader_program_instruction_extend_program_checked",
1670+
"type": "struct",
1671+
"fields": [
1672+
{ "name": "additional_bytes", "type": "uint" }
1673+
]
1674+
},
16681675
{
16691676
"name": "bpf_upgradeable_loader_program_instruction",
16701677
"type": "enum",
@@ -1677,7 +1684,8 @@
16771684
{ "name": "close" },
16781685
{ "name": "extend_program", "type": "bpf_upgradeable_loader_program_instruction_extend_program" },
16791686
{ "name": "set_authority_checked" },
1680-
{ "name": "migrate" }
1687+
{ "name": "migrate" },
1688+
{ "name": "extend_program_checked", "type": "bpf_upgradeable_loader_program_instruction_extend_program_checked" }
16811689
]
16821690
},
16831691
{

0 commit comments

Comments
 (0)