Fix interface.nic_attach_users crash when VMs or containers exist
## Problem
`nic_attach_users`, added in 4fb2e51a1b, reads `vm.query` and `container.query` results as dicts. Both are typesafe services on master, so internal calls return Pydantic models and subscripting them raised a `TypeError`. As soon as any VM or container existed, `interface.bridge_members_choices` failed, and so did creating or updating a bridge with `bridge_members`.
## Solution
Read the NIC devices straight from the `vm.device` and `container.device` tables with `datastore.query`. Only persisted device attributes and the owner's name are needed, so this skips the per-VM libvirt status lookup that the query services do, and behaves the same regardless of how those services shape their results. Rows whose attributes cannot be decrypted, or whose owner is missing, are skipped.
[CODEOWNERS] Drop hard-notification for VPlan (#228056)
The author has successfully migrated the notifications that the VPlan
line was previously serving with an approximation, by gaining access to
the pr-subscribers vectorizers group. The author has already opened a
request to further narrow the notifications with the creation of a
vectorizers-loopvectorize label and group, which should be almost
equivalent to the dropped line. As the line no longer serves any
purpose, and creates unnecessary confusion, drop it.
Fix network.common.check_dhcp_or_aliases never rejecting unconfigured interfaces
## Problem
The check passed a list of each interface's settings to `any()`, and a non-empty list is always truthy, so `interface.commit` only failed when there were no interfaces at all. Committing a config where no interface had DHCP, IPv6 autoconfig or an address would go through and `sync()` would unconfigure every NIC.
## Solution
Check each interface's IPv4 DHCP, IPv6 autoconfig and aliases directly, failing only when none of them is configured.
rpki-client: do not fatal after RB_INSERT() into the NCA trees
rpki-client is generally a bit too quick to error out and a repeated source
of problems has been errx after RB_INSERT() (one fixed just yesterday).
The first of these is probably not reachable but do that for good measure.
The other one was shown to be reachable in somewhat contrived setups by
eur1ka, which means rpki-client would refuse to start.
ok claudio
[Support] Preserve trailing newlines in YAML block scalar output
Output::blockScalarString always wrote "|", whose default clip chomping
keeps exactly one trailing line break. A value without a trailing
newline came back with one, and extra trailing newlines were dropped.
Write "|-" or "|+" when the value does not end in exactly one newline.
MIR modules and bodies end in exactly one newline, so their output does
not change.
Assisted-by: Claude
[PatternMatch] match splats from an all-zeroes shufflevector (#228016)
Extends splat pattern matching to recognize
shufflevector(insertelement(elt, 0), any_value, zeroinitializer) in
addition to constant splats.
Prepare four more ports of mine for the next CMake major version
Since there are no existing patches to modify, pass down minimum
version via policy variable.
AArch64: Remove unnecessary NZCV def from PSTATE write instructions (#228058)
PstateWriteSimple is the base class for the MSR immediate forms that
write a single PSTATE field. None of those fields is NZCV, so these do
not clobber the condition flags.
XAFLAG and AXFLAG do write the flags, but they already have their own
Uses/Defs of NZCV.
Co-authored-by: Claude Opus 5 <noreply at anthropic.com>
[Remarks] Reject null characters in YAML remark strings
The bitstream string table stores NUL-terminated strings, so a string
with an embedded NUL splits into several entries and every later string
is read back at the wrong index. Now that the YAML parser decodes
escapes, "\0" in YAML input reaches that path. Reject it with a parse
error.
Assisted-by: Claude
[Remarks] Fix use-after-free of block scalar values in the YAML remark parser
YAMLRemarkParser::parseStr returned BlockScalarNode::getValue() as is.
The YAML parser copies a block scalar's value into the document's node
allocator, and next() advances the document iterator before returning
the remark, which frees that allocator. So every argument value written
as a block scalar pointed at freed memory by the time the caller saw
it.
Copy block scalar values into an allocator owned by the parser.
Assisted-by: Claude