|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
Per IEC 61508-3 Section 7.4.2.12 and DO-178C Section 12.1.4, this document records the qualification basis for accepting Apache NimBLE into this firmware as Software Of Unknown Provenance (SOUP).
No upstream NimBLE translation unit is compiled today. This section states the intended role and then, separately, what is actually in the build, because the two are not yet the same and conflating them has already misled one triage.
Accepted as-is per IEC 61508-3 Section 7.4.2.12 and DO-178C Section 12.1.4:
None. The vendored tree is byte-identical to the pinned upstream release tag (apps/ omitted), re-verified file-by-file at the 1.10.0 re-vendor.
One historical deviation is worth recording, because it was undocumented and because of how it arose. Under the previous 1.9.0+dev pin, a tree-wide esp32/ path-rename pass (commit a823419b9, cleaning up after a deleted first-party spike) also rewrote a documentation URL inside libs/third_party/nimble/README.md (.../esp-idf/en/latest/esp32/api-reference/... -> .../esp32c6/api-reference/...). That one-line edit made this document's "byte-identical" claim, and the matching claims in THIRD_PARTY_LICENSES.md and the SBOM, false from that commit onward. It was cosmetic – an upstream doc link, no code – but the lesson is that a repo-wide rename must exclude libs/third_party/. The 1.10.0 re-vendor restored upstream content, so the claim holds again.
That lesson is now a mechanism rather than a convention (#538). scripts/gen/gen_sbom.py re-derives a SHA-256 over this component's whole vendored tree on every run – 827 files, by sorted component-relative path, git mode and content – and gen_sbom.py --check in the sbom gate fails naming the component the moment any of those bytes change. The drift above went unnoticed because the SBOM's aggregate_sha256 was a hand-transcribed literal that nothing ever computed, and NimBLE did not even carry one; a value re-derived from the tree is the only kind that can disagree with the tree. A repeat of a823419b9 now fails at the gate instead of quietly falsifying this section.
A digest over our own tree would still not have caught the drift at vendor-in – it would have hashed the rewritten URL faithfully and reported clean forever. So the claim above is also checked against upstream itself (#548): docs/sbom/upstream/nimble.manifest records the blob SHA-1 upstream publishes for each of the 827 vendored files at nimble_1_10_0_tag, fetched from apache/mynewt-nimble rather than derived here, and the soup-upstream gate compares our index against it on every push. Under that check the tree is 827/827 byte-identical with zero declared deviations.
The pinned commit is queried against OSV.dev weekly by .github/workflows/osv-scan.yml (commit-range GIT queries via scripts/checks/osv_scan.sh); a published advisory affecting the pin fails the scheduled run.
That gate fired on 2026-07-27 against the previous pin (#508). The four advisories, the code each one lives in, and their status here:
| CVE | Vulnerable code | In a build of ours? | Status |
|---|---|---|---|
| CVE-2026-45811 | nimble/transport/socket/src/ble_hci_socket.c, ble_hci_sock_rx_msg – unchecked HCI event copy in the POSIX socket transport | No, and not under #493 either: our transport is port/nimble/src/ble_hci_ra8_ble.c, and nimble/transport/socket/ is a host / simulator transport this firmware never builds | Fixed in the pin |
| CVE-2026-45815 | nimble/host/src/ble_gattc.c, ble_gattc_read_mult_cb_var – reachable assertion parsing an ATT Read Multiple Variable Response | Not today; yes once #493 links nimble/host/src. Core GATT client, remotely triggerable (AV:N/AC:L) | Fixed in the pin |
| CVE-2026-45816 | nimble/host/src/ble_sm.c, ble_sm_ltk_req_rx – NULL dereference on an LE Long Term Key Request naming an unknown connection handle | Not today; yes once #493 links nimble/host/src. Its threat model is a misbehaving controller, which is exactly what sits across our SPI HCI link to the C6 | Fixed in the pin |
| CVE-2026-46452 | nimble/host/mesh/src/proxy_msg.c, bt_mesh_proxy_msg_recv – unbounded SAR reassembly append | No, unless BLE Mesh is adopted: the mesh sources are a separate opt-in subset that neither the current build nor #493 compiles | Fixed in the pin |
The four upstream fixes are commits dcc4e4f0, fae6a487, 9448c5f4 and 593f9522 respectively; all are ancestors of nimble_1_10_0_tag, and none was an ancestor of the previous pin. OSV.dev resolves the pinned commit clean.
The "in a build of ours?" column is exposure context, not the basis for accepting the pin. Nothing here is waived: the fix is the version bump, so that analysis would have to be wrong in all four rows before it changed the outcome.