-
Notifications
You must be signed in to change notification settings - Fork 129
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
Rework Buildtime Random Stack Cookie Values to Improve Incremental Build Times and Ensure Binary Reproducibility #773
Merged
TaylorBeebe
merged 6 commits into
microsoft:release/202311
from
TaylorBeebe:static_cookie_value_on_debug
Mar 29, 2024
Merged
Rework Buildtime Random Stack Cookie Values to Improve Incremental Build Times and Ensure Binary Reproducibility #773
TaylorBeebe
merged 6 commits into
microsoft:release/202311
from
TaylorBeebe:static_cookie_value_on_debug
Mar 29, 2024
Conversation
This file contains 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
github-actions
bot
added
language:python
Pull requests that update Python code
impact:security
Has a security impact
labels
Mar 19, 2024
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## release/202311 #773 +/- ##
===============================================
Coverage 1.23% 1.23%
===============================================
Files 1302 1302
Lines 332084 332084
Branches 6683 6683
===============================================
Hits 4117 4117
Misses 327891 327891
Partials 76 76
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
makubacki
reviewed
Mar 20, 2024
TaylorBeebe
changed the title
Use Fixed Stack Cookie Value for Debug Builds
Cache Basetools Random Stack Cookie Values to Improve Incremental Build Times
Mar 20, 2024
TaylorBeebe
changed the title
Cache Basetools Random Stack Cookie Values to Improve Incremental Build Times
Rework Buildtime Random Stack Cookie Values to Improve Incremental Build Times and Ensure Binary Reproducibility
Mar 28, 2024
os-d
approved these changes
Mar 28, 2024
makubacki
approved these changes
Mar 29, 2024
makubacki
added
type:enhancement
New feature or pull request
type:design-change
A new proposal or modification to a feature design
type:bug
Something isn't working
labels
Mar 29, 2024
Javagedes
approved these changes
Mar 29, 2024
TaylorBeebe
added a commit
to TaylorBeebe/mu_basecore
that referenced
this pull request
Mar 29, 2024
…ild Times and Ensure Binary Reproducibility (microsoft#773) ## Description If the stack cookie value is randomized in the AutoGen.h file each build, the build system will determine the module/library must be rebuilt causing effectively a clean build every time. This also makes binary reproducibility impossible. This PR updates the early build scripts to create 32 and 64-bit JSON files in the build output directory which each contain 100 randomized stack cookie values for each bitwidth. If the JSON files are already present, then they are not recreated which allows them to be stored and moved to other builds for binary reproducibility. Because they are in the build directory, a clean build will cause the values to be regenerated. The logic which creates AutoGen.h will read these JSON files and use a hash of the module GUID (the hash seed is fixed in Basetools) to index into the array of stack cookie values for the module bitwidth. This model is necessary because there isn't thread-consistent data so we cannot use a locking mechanism to ensure only one thread is writing to the stack cookie files at a time. With this model, the build threads only need to read from the files. - [x] Impacts functionality? - **Functionality** - Does the change ultimately impact how firmware functions? - Examples: Add a new library, publish a new PPI, update an algorithm, ... - [x] Impacts security? - **Security** - Does the change have a direct security impact on an application, flow, or firmware? - Examples: Crypto algorithm change, buffer overflow fix, parameter validation improvement, ... - [ ] Breaking change? - **Breaking change** - Will anyone consuming this change experience a break in build or boot behavior? - Examples: Add a new library class, move a module to a different repo, call a function in a new library class in a pre-existing module, ... - [ ] Includes tests? - **Tests** - Does the change include any explicit test code? - Examples: Unit tests, integration tests, robot tests, ... - [ ] Includes documentation? - **Documentation** - Does the change contain explicit documentation additions outside direct code modifications (and comments)? - Examples: Update readme file, add feature readme file, link to documentation on an a separate Web page, ... ## How This Was Tested Tested by building and confirming the reduced build time for debug builds after the initial build. ## Integration Instructions N/A
TaylorBeebe
added a commit
that referenced
this pull request
Mar 29, 2024
…ild Times and Ensure Binary Reproducibility (#773) ## Description If the stack cookie value is randomized in the AutoGen.h file each build, the build system will determine the module/library must be rebuilt causing effectively a clean build every time. This also makes binary reproducibility impossible. This PR updates the early build scripts to create 32 and 64-bit JSON files in the build output directory which each contain 100 randomized stack cookie values for each bitwidth. If the JSON files are already present, then they are not recreated which allows them to be stored and moved to other builds for binary reproducibility. Because they are in the build directory, a clean build will cause the values to be regenerated. The logic which creates AutoGen.h will read these JSON files and use a hash of the module GUID (the hash seed is fixed in Basetools) to index into the array of stack cookie values for the module bitwidth. This model is necessary because there isn't thread-consistent data so we cannot use a locking mechanism to ensure only one thread is writing to the stack cookie files at a time. With this model, the build threads only need to read from the files. - [x] Impacts functionality? - **Functionality** - Does the change ultimately impact how firmware functions? - Examples: Add a new library, publish a new PPI, update an algorithm, ... - [x] Impacts security? - **Security** - Does the change have a direct security impact on an application, flow, or firmware? - Examples: Crypto algorithm change, buffer overflow fix, parameter validation improvement, ... - [ ] Breaking change? - **Breaking change** - Will anyone consuming this change experience a break in build or boot behavior? - Examples: Add a new library class, move a module to a different repo, call a function in a new library class in a pre-existing module, ... - [ ] Includes tests? - **Tests** - Does the change include any explicit test code? - Examples: Unit tests, integration tests, robot tests, ... - [ ] Includes documentation? - **Documentation** - Does the change contain explicit documentation additions outside direct code modifications (and comments)? - Examples: Update readme file, add feature readme file, link to documentation on an a separate Web page, ... ## How This Was Tested Tested by building and confirming the reduced build time for debug builds after the initial build. ## Integration Instructions N/A
ProjectMuBot
referenced
this pull request
in microsoft/mu_tiano_platforms
Apr 3, 2024
Introduces 20 new commits in [MU_BASECORE](https://github.com/microsoft/mu_basecore.git). <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/microsoft/mu_basecore/commit/21b1647326d69c0dec0fdf8a6e420715f34f5f78">21b164</a> pip: update edk2-pytool-extensions requirement from ~=0.27.2 to ~=0.27.3 (<a href="https://github.com/microsoft/mu_basecore/pull/753">#753</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/09be074085bc0d2d93792671b0f9c8c2e9b88f17">09be07</a> pip: update edk2-pytool-library requirement from ~=0.21.3 to ~=0.21.4 (<a href="https://github.com/microsoft/mu_basecore/pull/760">#760</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/086463dde58d49debecbbc45664f92c918baa6e0">086463</a> Repo File Sync: prevent `rustup` from self-updating (<a href="https://github.com/microsoft/mu_basecore/pull/767">#767</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/60187565c895f091eaed3271da3bf015385217ef">601875</a> Revert "MdeModulePkg: Swap to MmuLib instead of Arm-specific lib and Drop all remaining references to ArmPkg"</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/fd0d5764acafaff8121e236d6067db85b124cfde">fd0d57</a> [CHERRY-PICK] MdeModulePkg: Remove ArmPkg Dependency</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/4584975b4bed3c4c6ccb047136ea0c6d52fb2815">458497</a> Remove ArmPkg Dependencies from NetworkPkg</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/3208cb338111936be8dd1103dfac20d5832d0993">3208cb</a> Remove ArmPkg and EmbeddedPkg Dependencies in StandaloneMmPkg</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/fba09d01a35746f4e8a3b03a70b1f13fb43342be">fba09d</a> [CHERRY-PICK] UefiCpuPkg: Adds SmmCpuSyncLib library class</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/f5417b804d5cb89dbbe384458fa6dfc0b81377ff">f5417b</a> [CHERRY-PICK] UefiCpuPkg: Implements SmmCpuSyncLib library instance</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/d421e2b9c9d1af511aca95a20f6fe483f646909b">d421e2</a> [CHERRY-PICK] UefiCpuPkg/PiSmmCpuDxeSmm: Consume SmmCpuSyncLib</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/bb7120572e7f8754fa46aaf01b76f9734ab4b29e">bb7120</a> [CHERRY-PICK] UefiCpuPkg/PiSmmCpuDxeSmm: Simplify RunningApCount decrement</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/631418833c96f3b775a7d12b751f2ad3fa420f84">631418</a> [CHERRY-PICK] MdeModulePkg/Bus/Usb/UsbNetwork: Check array index range before access (<a href="https://github.com/microsoft/mu_basecore/pull/774">#774</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/6cc02e2da5aef3364bc161854382cfada0c6a2b4">6cc02e</a> CryptoPkg/BaseCryptLib: add additional RSAES-OAEP crypto functions (<a href="https://github.com/microsoft/mu_basecore/pull/771">#771</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/d093b84ae7dcf27ab4554edfd1f8a80adc408e07">d093b8</a> [CHERRY-PICK] MdeModulePkg/TraceHubDebugSysTLib: Use wider type for loop comparisons (<a href="https://github.com/microsoft/mu_basecore/pull/775">#775</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/6db656f2bb8a411f06e863b22e60fe6c65341953">6db656</a> BmpCheckPlugin: Pass build vars to FDF parser (<a href="https://github.com/microsoft/mu_basecore/pull/776">#776</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/884e5da43136e0d56863ccb1c842fa74f10088ce">884e5d</a> CryptoPkg: Update shared crypto to 2023.11.2 (<a href="https://github.com/microsoft/mu_basecore/pull/777">#777</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/c8f98831a5e24496ce1707f58588792973959f2c">c8f988</a> Added Mock GoogleTest folder for PolicyLibCommon (<a href="https://github.com/microsoft/mu_basecore/pull/780">#780</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/888b27ce79184023034d6afe5a89af22f1a6a0fb">888b27</a> Rework Buildtime Random Stack Cookie Values to Improve Incremental Build Times and Ensure Binary Reproducibility (<a href="https://github.com/microsoft/mu_basecore/pull/773">#773</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/633535478ed1ad44b5f5a6b9ec7f076560bd0308">633535</a> BaseTools: InfBuildData: Fix Private dec data retrieval (<a href="https://github.com/microsoft/mu_basecore/pull/785">#785</a>)</li> <li><a href="https://github.com/microsoft/mu_basecore/commit/dcdd08f1f09de204b5c8499a7799981060802399">dcdd08</a> Add CRC16 CCITT False Implementation (<a href="https://github.com/microsoft/mu_basecore/pull/782">#782</a>)</li> </ul> </details> Signed-off-by: Project Mu Bot <mubot@microsoft.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
impact:security
Has a security impact
language:python
Pull requests that update Python code
type:bug
Something isn't working
type:design-change
A new proposal or modification to a feature design
type:enhancement
New feature or pull request
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.
Description
If the stack cookie value is randomized in the AutoGen.h file each build, the build system will determine the module/library must be rebuilt causing effectively a clean build every time. This also makes binary reproducibility impossible.
This PR updates the early build scripts to create 32 and 64-bit JSON files in the build output directory which each contain 100 randomized stack cookie values for each bitwidth. If the JSON files are already present, then they are not recreated which allows them to be stored and moved to other builds for binary reproducibility. Because they are in the build directory, a clean build will cause the values to be regenerated.
The logic which creates AutoGen.h will read these JSON files and use a hash of the module GUID (the hash seed is fixed in Basetools) to index into the array of stack cookie values for the module bitwidth. This model is necessary because there isn't thread-consistent data so we cannot use a locking mechanism to ensure only one thread is writing to the stack cookie files at a time. With this model, the build threads only need to read from the files.
flow, or firmware?
validation improvement, ...
in build or boot behavior?
a function in a new library class in a pre-existing module, ...
outside direct code modifications (and comments)?
on an a separate Web page, ...
How This Was Tested
Tested by building and confirming the reduced build time for debug builds after the initial build.
Integration Instructions
N/A