-
Notifications
You must be signed in to change notification settings - Fork 318
SIMD-0431: Loader V3: Minimum Extend Program Size #431
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
Merged
simd-bot
merged 18 commits into
solana-foundation:main
from
blueshift-gg:permissioned-extend-program
Apr 4, 2026
+181
−0
Merged
Changes from 7 commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
0b554ed
Permissioned program extend
deanmlittle 60d7d2e
Rename 0431-permissioned-program-extend.md to 0431-permissioned-exten…
deanmlittle 4b82626
lint
deanmlittle 76748d7
lint
deanmlittle 8c56c34
incrrect directory
deanmlittle 52ce763
Update proposals/0431-permissioned-extend-program.md
deanmlittle ec1b9aa
Update proposals/0431-permissioned-extend-program.md
deanmlittle a6e8efa
Update proposals/0431-permissioned-extend-program.md
deanmlittle 04ae5b1
Update proposals/0431-permissioned-extend-program.md
deanmlittle c4aa022
Update proposals/0431-permissioned-extend-program.md
deanmlittle ebc7a2e
typo
deanmlittle d84354f
flesh out detailed design
buffalojoec df5f51d
Merge pull request #2 from buffalojoec/permissioned-extend-program
deanmlittle 740e3ab
Update security considerations and alternatives section
deanmlittle 19d657a
SIMD-0431: revise to use minimum extension size approach
buffalojoec 8bee72f
Document edge cases for minimum extension size
buffalojoec 5be22bc
Merge pull request #3 from buffalojoec/simd-0431-min-extend
deanmlittle afdc952
Rename permissioned extend program proposal file
deanmlittle File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,68 @@ | ||||||
| --- | ||||||
| simd: '0431' | ||||||
| title: Permissioned Extend Program | ||||||
| authors: | ||||||
| - Dean Little (Blueshift) | ||||||
| - Joe Caulfield (Anza) | ||||||
| category: Standard | ||||||
| type: Core | ||||||
| status: Review | ||||||
| created: 2025-12-14 | ||||||
| feature: (fill in with feature key and github tracking issues once accepted) | ||||||
| supersedes: '0164' | ||||||
| --- | ||||||
|
|
||||||
| ## Summary | ||||||
|
|
||||||
| This SIMD proposes restricting invocation of the extend program instruction in | ||||||
| Loader V3 to the program's upgrade authority, along with lifting the current | ||||||
| restriction preventing it from being invoked via CPI. | ||||||
|
|
||||||
| ## Motivation | ||||||
|
|
||||||
| Currently, due to the permissionless nature of the extend program instruction | ||||||
| and some complexities surrounding the program cache, there is a DoS vector by | ||||||
| which anyone could disable a program for one slot by permissionlessly | ||||||
| extending its program data account. | ||||||
|
|
||||||
| ## New Terminology | ||||||
|
|
||||||
| No new terminology is introduced by this proposal. | ||||||
|
|
||||||
| ## Detailed Design | ||||||
|
|
||||||
| 1. Add a check to the extend program instruction to ensure it is being invoked | ||||||
| by the current program upgrade authority. | ||||||
|
deanmlittle marked this conversation as resolved.
Outdated
|
||||||
| 2. Activate this change with a feature gate. | ||||||
| 3. Remove feature gate after network activation. | ||||||
|
deanmlittle marked this conversation as resolved.
Outdated
|
||||||
|
|
||||||
| ## Alternatives Considered | ||||||
|
|
||||||
| - Allow DoS vectory to remain unresolved | ||||||
|
|
||||||
| ## Impact | ||||||
|
|
||||||
| This proposal will remove the DoS vector for all deployed programs. Due to | ||||||
| constraints of ABI V1, in the case that a multisig upgrade authority wishes to | ||||||
| extend the program data account by greater than 10KiB, it will either need to | ||||||
| create multiple resize proposals, or atomically set its authority to a | ||||||
| top-level signer and reclaim it in the same transaction. The `ExtendProgram` | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
think this is what you meant here?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That line means reclaim the authority after extending at top-level with the temporary authority. |
||||||
| instruction will now also be invokable by CPI. | ||||||
|
|
||||||
| ## Security Considerations | ||||||
|
|
||||||
| In the case of a multisig atomically setting its authority to a top-level | ||||||
| signer, it is important to introspect the transaction and ensure that it | ||||||
| consists of the following instructions: | ||||||
|
|
||||||
| - Set upgrade authority to top-level signer | ||||||
| - Extend program data account in top-level instruction | ||||||
| - Set upgrade authority back to quorum | ||||||
|
|
||||||
| If this order is not observed, it would be possible for a quorum to | ||||||
| accidentally lose its upgrade authority. | ||||||
|
|
||||||
| ## Backwards Compatibility | ||||||
|
|
||||||
| This feature places additional restrictions upon an existing Loader V3 | ||||||
| instruction and is therefore not backwards compatible, necessitating a feature gate. | ||||||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.