mirror of
https://github.com/speed47/spectre-meltdown-checker.git
synced 2026-06-04 13:43:05 +02:00
Merge source-build for v26.36.0601873 (#575)
* chore: add stalebot in dryrun built from commitafadf53f7fdated 2026-04-02 13:13:19 +0200 by Stéphane Lesimple (speed47_github@speed47.net) * Merge branch 'test' into source built from commit952fe6a87fdated 2026-04-02 18:40:05 +0200 by Stéphane Lesimple (speed47_github@speed47.net) * Merge pull request #530 from speed47/test built from commitd3c0f1a24ddated 2026-04-02 16:49:41 +0000 by Stéphane Lesimple (speed47_github@speed47.net) chore: workflows revamp * Merge pull request #532 from speed47/test built from commit6fac2d8ff1dated 2026-04-02 21:32:39 +0000 by Stéphane Lesimple (speed47_github@speed47.net) Retbleed / Downfall overhald / doc updates * enh: add known fixed ucode versions for CVE-2023-23583 (Reptar) and CVE-2024-45332 (BPI) built from commitcccb3c0081dated 2026-04-04 17:50:04 +0200 by Stéphane Lesimple (speed47_github@speed47.net) * fix: add rebleet to --variant built from commit7a7408d124dated 2026-04-04 18:17:35 +0200 by Stéphane Lesimple (speed47_github@speed47.net) * Merge pull request #566 from speed47/test built from commit3e2b6cc734dated 2026-04-20 11:02:38 +0000 by Stéphane Lesimple (speed47_github@speed47.net) Prepare release v26.33.0420xxx * Merge pull request #571 from speed47/test built from commit0045d237fadated 2026-06-01 20:44:44 +0000 by Stéphane Lesimple (speed47_github@speed47.net) Prepare next release * update: fwdb from v349+i20260227+615b to v349+i20260512+1cce, 19 microcode changes built from commit645a79846bdated 2026-06-01 20:56:45 +0000 by github-actions[bot] (41898282+github-actions[bot]@users.noreply.github.com) --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
3f4801e6a7
commit
26cf31b282
@@ -25,21 +25,81 @@ jobs:
|
|||||||
mv spectre-meltdown-checker.sh dist/
|
mv spectre-meltdown-checker.sh dist/
|
||||||
- name: check direct execution
|
- name: check direct execution
|
||||||
run: |
|
run: |
|
||||||
|
set -x
|
||||||
expected=$(cat .github/workflows/expected_cve_count)
|
expected=$(cat .github/workflows/expected_cve_count)
|
||||||
cd dist
|
cd dist
|
||||||
nb=$(sudo ./spectre-meltdown-checker.sh --batch json | jq '.[]|.CVE' | wc -l)
|
|
||||||
|
json=$(sudo ./spectre-meltdown-checker.sh --batch json || true)
|
||||||
|
|
||||||
|
# Validate JSON is well-formed (and show it if not)
|
||||||
|
echo "$json" | jq . >/dev/null || {
|
||||||
|
echo "Invalid JSON produced by spectre-meltdown-checker.sh"
|
||||||
|
echo "$json"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Validate required keys exist
|
||||||
|
for key in meta system cpu cpu_microcode vulnerabilities; do
|
||||||
|
echo "$json" | jq -e ".$key" >/dev/null || {
|
||||||
|
echo "Missing top-level key: $key"
|
||||||
|
echo "$json" | jq .
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
done
|
||||||
|
|
||||||
|
# Use -r to get raw scalars (no quotes)
|
||||||
|
fmtver=$(echo "$json" | jq -r '.meta.format_version // empty')
|
||||||
|
if [ "$fmtver" != "1" ]; then
|
||||||
|
echo "Unexpected format_version: $fmtver"
|
||||||
|
echo "$json" | jq .
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
run_as_root=$(echo "$json" | jq -r '.meta.run_as_root // empty')
|
||||||
|
if [ "$run_as_root" != "true" ]; then
|
||||||
|
echo "Expected run_as_root=true, got: $run_as_root"
|
||||||
|
echo "$json" | jq .
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mocked=$(echo "$json" | jq -r '.meta.mocked // "false"')
|
||||||
|
if [ "$mocked" = "true" ]; then
|
||||||
|
echo "mocked=true must never appear in production"
|
||||||
|
echo "$json" | jq .
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Count CVEs robustly (as a number)
|
||||||
|
nb=$(echo "$json" | jq -r '[.vulnerabilities[].cve] | length')
|
||||||
if [ "$nb" -ne "$expected" ]; then
|
if [ "$nb" -ne "$expected" ]; then
|
||||||
echo "Invalid number of CVEs reported: $nb instead of $expected"
|
echo "Invalid number of CVEs reported: $nb instead of $expected"
|
||||||
|
echo "$json" | jq '.vulnerabilities[].cve'
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
echo "OK $nb CVEs reported"
|
echo "OK $nb CVEs reported"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Validate json-terse backward compatibility
|
||||||
|
nb_terse=$(sudo ./spectre-meltdown-checker.sh --batch json-terse | jq -r 'map(.CVE) | length')
|
||||||
|
if [ "$nb_terse" -ne "$expected" ]; then
|
||||||
|
echo "json-terse backward compat broken: $nb_terse CVEs instead of $expected"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK json-terse backward compat: $nb_terse CVEs"
|
||||||
|
fi
|
||||||
- name: check docker compose run execution
|
- name: check docker compose run execution
|
||||||
run: |
|
run: |
|
||||||
expected=$(cat .github/workflows/expected_cve_count)
|
expected=$(cat .github/workflows/expected_cve_count)
|
||||||
cd dist
|
cd dist
|
||||||
docker compose build
|
docker compose build
|
||||||
nb=$(docker compose run --rm spectre-meltdown-checker --batch json | jq '.[]|.CVE' | wc -l)
|
json=$(docker compose run --rm spectre-meltdown-checker --batch json || true)
|
||||||
|
echo "$json" | jq . > /dev/null
|
||||||
|
fmtver=$(echo "$json" | jq '.meta.format_version')
|
||||||
|
if [ "$fmtver" != "1" ]; then
|
||||||
|
echo "Unexpected format_version: $fmtver"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
nb=$(echo "$json" | jq '.vulnerabilities[].cve' | wc -l)
|
||||||
if [ "$nb" -ne "$expected" ]; then
|
if [ "$nb" -ne "$expected" ]; then
|
||||||
echo "Invalid number of CVEs reported: $nb instead of $expected"
|
echo "Invalid number of CVEs reported: $nb instead of $expected"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -51,7 +111,14 @@ jobs:
|
|||||||
expected=$(cat .github/workflows/expected_cve_count)
|
expected=$(cat .github/workflows/expected_cve_count)
|
||||||
cd dist
|
cd dist
|
||||||
docker build -t spectre-meltdown-checker .
|
docker build -t spectre-meltdown-checker .
|
||||||
nb=$(docker run --rm --privileged -v /boot:/boot:ro -v /dev/cpu:/dev/cpu:ro -v /lib/modules:/lib/modules:ro spectre-meltdown-checker --batch json | jq '.[]|.CVE' | wc -l)
|
json=$(docker run --rm --privileged -v /boot:/boot:ro -v /dev/cpu:/dev/cpu:ro -v /lib/modules:/lib/modules:ro spectre-meltdown-checker --batch json || true)
|
||||||
|
echo "$json" | jq . > /dev/null
|
||||||
|
fmtver=$(echo "$json" | jq '.meta.format_version')
|
||||||
|
if [ "$fmtver" != "1" ]; then
|
||||||
|
echo "Unexpected format_version: $fmtver"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
nb=$(echo "$json" | jq '.vulnerabilities[].cve' | wc -l)
|
||||||
if [ "$nb" -ne "$expected" ]; then
|
if [ "$nb" -ne "$expected" ]; then
|
||||||
echo "Invalid number of CVEs reported: $nb instead of $expected"
|
echo "Invalid number of CVEs reported: $nb instead of $expected"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -92,15 +159,19 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
- name: create a pull request to ${{ github.ref_name }}-build
|
- name: create a pull request to ${{ github.ref_name }}-build
|
||||||
run: |
|
run: |
|
||||||
|
# all the files in dist/* and .github/* must be moved as is to the -build branch root, move them out for now:
|
||||||
tmpdir=$(mktemp -d)
|
tmpdir=$(mktemp -d)
|
||||||
mv ./dist/* .github $tmpdir/
|
mv ./dist/* .github $tmpdir/
|
||||||
rm -rf ./dist
|
rm -rf ./dist
|
||||||
|
|
||||||
git fetch origin ${{ github.ref_name }}-build
|
git fetch origin ${{ github.ref_name }}-build
|
||||||
git checkout -f ${{ github.ref_name }}-build
|
git checkout -f ${{ github.ref_name }}-build
|
||||||
|
rm -rf doc/
|
||||||
mv $tmpdir/* .
|
mv $tmpdir/* .
|
||||||
rm -rf src/
|
rm -rf src/ scripts/ img/
|
||||||
mkdir -p .github
|
mkdir -p .github
|
||||||
rsync -vaP --delete $tmpdir/.github/ .github/
|
rsync -vaP --delete $tmpdir/.github/ .github/
|
||||||
|
|
||||||
git add --all
|
git add --all
|
||||||
echo =#=#= DIFF CACHED
|
echo =#=#= DIFF CACHED
|
||||||
git diff --cached
|
git diff --cached
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
26
|
32
|
||||||
|
|||||||
@@ -40,6 +40,14 @@ CVE | Name | Aliases
|
|||||||
[CVE-2024-45332](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-45332) | Branch Privilege Injection | BPI
|
[CVE-2024-45332](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-45332) | Branch Privilege Injection | BPI
|
||||||
[CVE-2025-54505](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-54505) | AMD Zen1 Floating-Point Divider Stale Data Leak | FPDSS
|
[CVE-2025-54505](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-54505) | AMD Zen1 Floating-Point Divider Stale Data Leak | FPDSS
|
||||||
|
|
||||||
|
The following entries are ARM64 silicon errata that the kernel actively works around. They have no assigned CVE; they are tracked only by ARM's erratum numbers. Select them with `--errata <number>` or the associated `--variant` mnemonic.
|
||||||
|
|
||||||
|
ID | Name | Affected cores
|
||||||
|
-- | ---- | --------------
|
||||||
|
CVE-0001-0001 | Speculative AT TLB corruption (errata 1165522, 1319367, 1319537, 1530923) | Cortex-A55/A57/A72/A76
|
||||||
|
CVE-0001-0002 | Speculative unprivileged load (errata 2966298, 3117295) | Cortex-A510/A520
|
||||||
|
CVE-0001-0003 | MSR SSBS not self-synchronizing (erratum 3194386 + siblings) | Cortex-A76/A77/A78/A78C/A710/A715/A720/A720AE/A725, X1/X1C/X2/X3/X4/X925, Neoverse-N1/N2/N3/V1/V2/V3/V3AE
|
||||||
|
|
||||||
## Am I at risk?
|
## Am I at risk?
|
||||||
|
|
||||||
Depending on your situation, the table below answers whether an attacker in a given position can extract data from a given target.
|
Depending on your situation, the table below answers whether an attacker in a given position can extract data from a given target.
|
||||||
|
|||||||
@@ -307,3 +307,13 @@ A weakness in AMD's microcode signature verification (AES-CMAC hash) allows load
|
|||||||
Exploits a synchronization failure in the AMD stack engine via an undocumented MSR bit, targeting AMD SEV-SNP confidential VMs. Requires hypervisor-level (ring 0) access.
|
Exploits a synchronization failure in the AMD stack engine via an undocumented MSR bit, targeting AMD SEV-SNP confidential VMs. Requires hypervisor-level (ring 0) access.
|
||||||
|
|
||||||
**Why out of scope:** Not a transient/speculative execution side channel. This is an architectural attack on AMD SEV-SNP confidential computing that requires hypervisor access, which is outside the threat model of this tool.
|
**Why out of scope:** Not a transient/speculative execution side channel. This is an architectural attack on AMD SEV-SNP confidential computing that requires hypervisor access, which is outside the threat model of this tool.
|
||||||
|
|
||||||
|
## No CVE — Jump Conditional Code (JCC) Erratum
|
||||||
|
|
||||||
|
- **Issue:** [#329](https://github.com/speed47/spectre-meltdown-checker/issues/329)
|
||||||
|
- **Intel whitepaper:** [Mitigations for Jump Conditional Code Erratum](https://www.intel.com/content/dam/support/us/en/documents/processors/mitigations-jump-conditional-code-erratum.pdf)
|
||||||
|
- **Affected CPUs:** Intel 6th through 10th generation Core and Xeon processors (Skylake through Cascade Lake)
|
||||||
|
|
||||||
|
A microarchitectural correctness erratum where a conditional jump instruction that straddles or ends at a 64-byte instruction fetch boundary can corrupt the branch predictor state, potentially causing incorrect execution. Intel addressed this in a November 2019 microcode update. Compilers and assemblers (GCC, LLVM, binutils) also introduced alignment options (`-mbranch-alignment`, `-x86-branches-within-32B-boundaries`) to pad jump instructions away from boundary conditions, preserving performance on CPUs with updated microcode.
|
||||||
|
|
||||||
|
**Why out of scope:** The JCC erratum is a microarchitectural correctness bug, not a transient or speculative execution side-channel vulnerability. No CVE was ever assigned. Red Hat noted that privilege escalation "has not been ruled out" but made no definitive security finding, and no exploit has been demonstrated. There is no Linux sysfs entry, no CPUID bit, and no MSR flag exposing the mitigation status. The microcode fix introduces no detectable hardware indicator, so checking for it would require maintaining a per-CPU-stepping minimum microcode version table (the design principle 3 exception) — costly to maintain without a CVE anchor or confirmed exploitability to justify the ongoing work. The kernel compiler mitigation is a build-time-only change (instruction alignment) with no observable runtime state.
|
||||||
|
|||||||
+675
-117
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user