Repository navigation
feat: add CustomSecureBootKeysAllower for out-of-band custom key acceptance - #466
Merged
mergify[bot] merged 4 commits intoSep 25, 2026
Merged
Conversation
mcanevet
marked this pull request as draft
September 10, 2026 14:24
mcanevet
force-pushed
the
secure-boot-key-management
branch
from
September 10, 2026 14:39
9be4fae to
bc1cdab
Compare
mcanevet
force-pushed
the
secure-boot-key-management
branch
2 times, most recently
from
September 10, 2026 15:10
dfd74c5 to
9be4fae
Compare
mcanevet
marked this pull request as ready for review
September 10, 2026 15:43
mcanevet
force-pushed
the
secure-boot-key-management
branch
from
September 11, 2026 08:06
9be4fae to
b8a17f6
Compare
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 11, 2026
bmclib gained a Dell-only SecureBootKeyManagementSetter capability for
enabling/disabling out-of-band acceptance of custom UEFI Secure Boot keys.
Rufio had no Secure Boot support of any kind yet, so this adds the first
action for it: SecureBootKeyManagement{Enable bool} on the shared bmc.Action
type (v1alpha1 only - v1alpha2 isn't wired to any controller yet), reusable
from both bmc.Task/Job and Workflow's preparingActions/postActions since they
embed the same Action type. runTask calls bmcClient.SetSecureBootKeyManagement
directly; no status polling is needed since, like BootDevice/VirtualMedia,
it's a single synchronous call rather than a converging state. The web UI's
task-type label (bmcTaskType) is updated too, so these tasks don't render as
"Unknown".
CRD manifests and deepcopy code regenerated via make manifests-v1alpha1 and
make generate-deepcopy.
TEMPORARY: go.mod/go.sum replace bmclib with mcanevet/bmclib's
secure-boot-key-management branch (bmc-toolbox/bmclib#466), since
SetSecureBootKeyManagement isn't in any bmclib release yet. Drop this replace
and bump the real require once bmclib tags a release containing it, or
CI/reviewers will rightly reject it.
Signed-off-by: Mickael Canevet <mickael.canevet@proton.ch>
mcanevet
force-pushed
the
secure-boot-key-management
branch
2 times, most recently
from
September 14, 2026 06:28
ec4a204 to
ab9fc16
Compare
joelrebel
reviewed
Sep 15, 2026
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 15, 2026
Matches the corresponding rename in bmc-toolbox/bmclib#466, made per maintainer review feedback there: the old name read like it managed something generic, when it actually just toggles whether the platform accepts non-factory UEFI Secure Boot keys. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickael Canevet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 15, 2026
Matches the rename in bmc-toolbox/bmclib#466, made per maintainer review feedback there: the old name read like it managed something generic, when it actually just toggles whether the platform accepts non-factory UEFI Secure Boot keys. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickael Canevet <mickael.canevet@proton.ch>
joelrebel
force-pushed
the
secure-boot-key-management
branch
from
September 16, 2026 10:49
c85a686 to
7d76db0
Compare
mcanevet
force-pushed
the
secure-boot-key-management
branch
from
September 17, 2026 14:13
7d76db0 to
58a7d1b
Compare
…ptance New interface controlling whether a platform will accept custom UEFI Secure Boot keys, as opposed to only the vendor-shipped key set. Distinct from SecureBootSetter (enabling/disabling Secure Boot itself) and from SecureBootCertificateImporter (enrolling a specific certificate) - it's the out-of-band gate some vendors require before a certificate import will be accepted at all. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
Implements bmc.CustomSecureBootKeysAllower via the SecureBootPolicy BIOS attribute (Standard/Custom). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
XCC-based systems have an analogous SecureBootPolicy attribute, but it's unconfirmed whether it's reachable through the same generic /Bios attribute PATCH this package already uses, or requires Lenovo's proprietary OneCLI/XCC transport - left undocumented otherwise, this is the FQXSFPU4097G error code callers will hit without it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
…atches AllowCustomSecureBootKeys read the attribute's currently applied value and returned early when it already matched what was requested. Confirmed live, that's unsafe: currently-applied state can match while a different value is genuinely pending from an earlier call in the same boot cycle (e.g. a stale pending PATCH left staged by an interrupted, unrelated caller). Skipping the write left that stale pending value in place, silently reverting an explicit request on the next reboot - observed as a certificate import rejected because SecureBootPolicy committed as Standard despite requesting Custom moments earlier. It's the same class of bug stmcginnis/gofish#571 fixes one layer down, in SetBiosConfiguration's own diff baseline - but this early return happens before SetBiosConfiguration is ever called, so #571 can't reach it. The attribute is still read first, but only to reject platforms that don't expose it at all. The write itself is now unconditional. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
mcanevet
force-pushed
the
secure-boot-key-management
branch
from
September 17, 2026 14:18
58a7d1b to
0964644
Compare
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 23, 2026
Matches the rename in bmc-toolbox/bmclib#466, made per maintainer review feedback there: the old name read like it managed something generic, when it actually just toggles whether the platform accepts non-factory UEFI Secure Boot keys. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickael Canevet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 23, 2026
Matches the rename in bmc-toolbox/bmclib#466, made per maintainer review feedback there: the old name read like it managed something generic, when it actually just toggles whether the platform accepts non-factory UEFI Secure Boot keys. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickael Canevet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 24, 2026
bmclib gained a Dell-only AllowCustomSecureBootKeys capability for
enabling/disabling out-of-band acceptance of custom UEFI Secure Boot keys.
Rufio had no Secure Boot support of any kind yet, so this adds the first
action for it: AllowCustomSecureBootKeys{Enable bool} on the shared
bmc.Action type (v1alpha1 only - v1alpha2 isn't wired to any controller yet),
reusable from both bmc.Task/Job and Workflow's preparingActions/postActions
since they embed the same Action type. runTask calls
bmcClient.AllowCustomSecureBootKeys directly; no status polling is needed
since, like BootDevice/VirtualMedia, it's a single synchronous call rather
than a converging state. The web UI's task-type label (bmcTaskType) is
updated too, so these tasks don't render as "Unknown".
CRD manifests and deepcopy code regenerated via make manifests-v1alpha1 and
make generate-deepcopy.
TEMPORARY: go.mod/go.sum replace bmclib with mcanevet/bmclib's
secure-boot-key-management branch (bmc-toolbox/bmclib#466), since
AllowCustomSecureBootKeys isn't in any bmclib release yet. Drop this replace
and bump the real require once bmclib tags a release containing it, or
CI/reviewers will rightly reject it.
Signed-off-by: Mickael Canevet <mickael.canevet@proton.ch>
joelrebel
approved these changes
Sep 25, 2026
Contributor
Merge Queue Status
This pull request spent 10 seconds in the queue, including 1 second running CI. Required conditions to merge
|
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 25, 2026
bmc-toolbox/bmclib#466 (CustomSecureBootKeysAllower) merged upstream, so the temporary go.mod/go.sum replace pointing at mcanevet/bmclib's PR branch is no longer needed - point the require directly at the real bmc-toolbox/bmclib commit instead. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 29, 2026
bmclib gained a Dell-only AllowCustomSecureBootKeys capability for
enabling/disabling out-of-band acceptance of custom UEFI Secure Boot keys.
Rufio had no Secure Boot support of any kind yet, so this adds the first
action for it: AllowCustomSecureBootKeys{Enable bool} on the shared
bmc.Action type (v1alpha1 only - v1alpha2 isn't wired to any controller yet),
reusable from both bmc.Task/Job and Workflow's preparingActions/postActions
since they embed the same Action type. runTask calls
bmcClient.AllowCustomSecureBootKeys directly; no status polling is needed
since, like BootDevice/VirtualMedia, it's a single synchronous call rather
than a converging state. The web UI's task-type label (bmcTaskType) is
updated too, so these tasks don't render as "Unknown".
CRD manifests and deepcopy code regenerated via make manifests-v1alpha1 and
make generate-deepcopy.
TEMPORARY: go.mod/go.sum replace bmclib with mcanevet/bmclib's
secure-boot-key-management branch (bmc-toolbox/bmclib#466), since
AllowCustomSecureBootKeys isn't in any bmclib release yet. Drop this replace
and bump the real require once bmclib tags a release containing it, or
CI/reviewers will rightly reject it.
Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 29, 2026
bmc-toolbox/bmclib#466 (CustomSecureBootKeysAllower) merged upstream, so the temporary go.mod/go.sum replace pointing at mcanevet/bmclib's PR branch is no longer needed - point the require directly at the real bmc-toolbox/bmclib commit instead. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 29, 2026
bmclib gained a Dell-only AllowCustomSecureBootKeys capability for
enabling/disabling out-of-band acceptance of custom UEFI Secure Boot keys.
Rufio had no Secure Boot support of any kind yet, so this adds the first
action for it: AllowCustomSecureBootKeys{Enable bool} on the shared
bmc.Action type (v1alpha1 only - v1alpha2 isn't wired to any controller yet),
reusable from both bmc.Task/Job and Workflow's preparingActions/postActions
since they embed the same Action type. runTask calls
bmcClient.AllowCustomSecureBootKeys directly; no status polling is needed
since, like BootDevice/VirtualMedia, it's a single synchronous call rather
than a converging state. The web UI's task-type label (bmcTaskType) is
updated too, so these tasks don't render as "Unknown".
CRD manifests and deepcopy code regenerated via make manifests-v1alpha1 and
make generate-deepcopy.
Requires bmclib at the merged bmc-toolbox/bmclib#466 (CustomSecureBootKeysAllower),
so go.mod points at that upstream commit directly.
Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 29, 2026
bmclib gained a Dell-only AllowCustomSecureBootKeys capability for
enabling/disabling out-of-band acceptance of custom UEFI Secure Boot keys.
Rufio had no Secure Boot support of any kind yet, so this adds the first
action for it: AllowCustomSecureBootKeys{Enable bool} on the shared
bmc.Action type (v1alpha1 only - v1alpha2 isn't wired to any controller yet),
reusable from both bmc.Task/Job and Workflow's preparingActions/postActions
since they embed the same Action type. runTask calls
bmcClient.AllowCustomSecureBootKeys directly; no status polling is needed
since, like BootDevice/VirtualMedia, it's a single synchronous call rather
than a converging state. The web UI's task-type label (bmcTaskType) is
updated too, so these tasks don't render as "Unknown".
CRD manifests and deepcopy code regenerated via make manifests-v1alpha1 and
make generate-deepcopy.
Requires bmclib at the merged bmc-toolbox/bmclib#466 (CustomSecureBootKeysAllower),
so go.mod points at that upstream commit directly.
Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 30, 2026
bmclib gained a Dell-only AllowCustomSecureBootKeys capability for
enabling/disabling out-of-band acceptance of custom UEFI Secure Boot keys.
Rufio had no Secure Boot support of any kind yet, so this adds the first
action for it: AllowCustomSecureBootKeys{Enable bool} on the shared
bmc.Action type (v1alpha1 only - v1alpha2 isn't wired to any controller yet),
reusable from both bmc.Task/Job and Workflow's preparingActions/postActions
since they embed the same Action type. runTask calls
bmcClient.AllowCustomSecureBootKeys directly; no status polling is needed
since, like BootDevice/VirtualMedia, it's a single synchronous call rather
than a converging state. The web UI's task-type label (bmcTaskType) is
updated too, so these tasks don't render as "Unknown".
CRD manifests and deepcopy code regenerated via make manifests-v1alpha1 and
make generate-deepcopy.
Requires bmclib at the merged bmc-toolbox/bmclib#466 (CustomSecureBootKeysAllower),
so go.mod points at that upstream commit directly.
Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 30, 2026
bmclib gained a Dell-only AllowCustomSecureBootKeys capability for
enabling/disabling out-of-band acceptance of custom UEFI Secure Boot keys.
Rufio had no Secure Boot support of any kind yet, so this adds the first
action for it: AllowCustomSecureBootKeys{Enable bool} on the shared
bmc.Action type (v1alpha1 only - v1alpha2 isn't wired to any controller yet),
reusable from both bmc.Task/Job and Workflow's preparingActions/postActions
since they embed the same Action type. runTask calls
bmcClient.AllowCustomSecureBootKeys directly; no status polling is needed
since, like BootDevice/VirtualMedia, it's a single synchronous call rather
than a converging state. The web UI's task-type label (bmcTaskType) is
updated too, so these tasks don't render as "Unknown".
CRD manifests and deepcopy code regenerated via make manifests-v1alpha1 and
make generate-deepcopy.
Requires bmclib at the merged bmc-toolbox/bmclib#466 (CustomSecureBootKeysAllower),
so go.mod points at that upstream commit directly.
Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
mcanevet
added a commit
to mcanevet/tinkerbell
that referenced
this pull request
Sep 30, 2026
bmclib gained a Dell-only AllowCustomSecureBootKeys capability for
enabling/disabling out-of-band acceptance of custom UEFI Secure Boot keys.
Rufio had no Secure Boot support of any kind yet, so this adds the first
action for it: AllowCustomSecureBootKeys{Enable bool} on the shared
bmc.Action type (v1alpha1 only - v1alpha2 isn't wired to any controller yet),
reusable from both bmc.Task/Job and Workflow's preparingActions/postActions
since they embed the same Action type. runTask calls
bmcClient.AllowCustomSecureBootKeys directly; no status polling is needed
since, like BootDevice/VirtualMedia, it's a single synchronous call rather
than a converging state. The web UI's task-type label (bmcTaskType) is
updated too, so these tasks don't render as "Unknown".
CRD manifests and deepcopy code regenerated via make manifests-v1alpha1 and
make generate-deepcopy.
Requires bmclib at the merged bmc-toolbox/bmclib#466 (CustomSecureBootKeysAllower),
so go.mod points at that upstream commit directly.
Signed-off-by: Mickaël Canévet <mickael.canevet@proton.ch>
2 tasks done
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Adds
bmc.CustomSecureBootKeysAllower, a new interface controlling whether a platform will accept custom UEFI Secure Boot keys (as opposed to only the vendor-shipped key set). This is distinct fromSecureBootSetter(enabling/disabling Secure Boot itself) and fromSecureBootCertificateImporter(enrolling a specific certificate) - it's the out-of-band gate some vendors require before a certificate import will be accepted at all.Implemented for Dell, which models this as the
SecureBootPolicyBIOS attribute (Standard/Custom). Not implemented for Lenovo yet: XCC-based systems have an analogousSecureBootPolicyattribute, but it's unconfirmed whether it's reachable through the same generic/Biosattribute PATCH this package already uses, or requires Lenovo's proprietary OneCLI/XCC transport - documented as a known gap with links to Lenovo's public docs (including theFQXSFPU4097Gerror code callers will hit without it).rebootRequiredreports that a successful change is staged and takes effect only after a power cycle, matching how BIOS Setup attribute changes work generally.Also fixes a bug in
AllowCustomSecureBootKeysitself: it returned early when the attribute's currently applied value already matched the request, which is unsafe if a different value is genuinely pending from an earlier call in the same boot cycle - confirmed live, that left a stale pending value in place, silently reverting an explicit request on the next reboot (observed as a certificate import rejected becauseSecureBootPolicycommitted asStandarddespite requestingCustommoments earlier). The write is now unconditional; the attribute is still read first, but only to reject platforms that don't expose it at all. Relies onstmcginnis/gofish#571(via #468, merged) to correctly detect a stale-but-different pending value.Test plan
bmc/secure_boot_test.go:TestAllowCustomSecureBootKeysFromInterfacescovering success/no-implementation/error cases.providers/dell/secure_boot_test.go: enable-from-Standard, already-Custom-but-stale-pending, disable-from-Custom, already-Standard-but-stale-pending, and the attribute-absent (ErrUnsupportedHardware) case.go build ./...,go vet ./...,golangci-lint run ./...(0 new issues),go test ./...all pass.