Files
danos/tools/bounds-allowlist.txt
T
Daniel Samson 729b40ece7 usb: a device has as many interfaces as it declares
max_interfaces was 4. A composite device — a headset, a webcam with audio, a
dock, a multifunction printer — routinely has more, and the fifth did not
merely go missing. parseConfiguration's cap branch had no `else`, so when the
count was reached `current` kept pointing at interface 3 and the fifth
interface's endpoint descriptors were appended to interface 3's array. A
class driver bound to interface 3 could then be handed an endpoint belonging
to something else entirely, and subscribe or bulk-transfer on it. The
alternate-setting arm one line above cleared `current` correctly, which is
what the cap branch should have done.

Interfaces are now counted from the block in a first pass and allocated to
exactly that number, so the ceiling is bNumInterfaces' u8 — the USB
specification's. The missing `else` is added too, though after this the bug
is unreachable by construction: interface_count cannot reach interfaces.len
mid-parse when the list was sized from the same walk.

max_configured_endpoints was max_interfaces * max_endpoints_per_interface =
16, a derived guess that moved whenever either input moved. It is now 31,
which is the xHCI specification's own limit: a Device Context holds a slot
context plus at most 31 endpoint contexts, because the Context Entries field
addressing them is 5 bits.

max_endpoints_per_interface stays at 4 with its reason recorded — the
usb-transfer wire protocol reports exactly max_reported_endpoints (4) per
interface, so widening it alone would change nothing a class driver sees.
Lifting it is a protocol change.

No direct test, and that is written down as open question 5 rather than
glossed. The parser is pure and wants a host unit test, but
usb-xhci-library.zig imports memory, mmio and time so it cannot be a
standalone test root, and QEMU offers nothing that reaches the path — the
largest device available is usb-audio,multi=on at 2 interfaces and 211
bytes. The alternate-setting path that shares the same `current = null`
logic is exercised by that device.

Suite 116/116.
2026-08-08 12:05:33 +01:00

282 lines
12 KiB
Plaintext

# Bounds that predate the rule (docs/os-development/bounds.md).
#
# Generated from the tree as it stood when the check landed, so the gate could start
# without a 278-site sweep in front of it. Every line is a compile-time ceiling that
# has not yet said what it counts, who decides its size, what it protects, what
# happens when it is reached, or how anyone finds out.
#
# **This list may only shrink.** Declaring a bound means deleting its line; the check
# fails if a listed bound is now declared, and fails if a listed bound has vanished.
# Nothing may be added to it — a new ceiling declares itself or does not land.
#
# docs/fixed-bounds-audit.md is the analysis of how they got here.
boot/efi.zig:buffer
boot/efi.zig:info_buffer
boot/efi.zig:maximum_bundled
boot/efi.zig:maximum_tree_depth
library/device/acpi/aml/interpreter.zig:argbuf
library/device/acpi/aml/interpreter.zig:args
library/device/acpi/aml/interpreter.zig:locals
library/device/acpi/aml/interpreter.zig:maximum_segments
library/device/acpi/aml/interpreter.zig:notify_queue
library/device/acpi/aml/namespace.zig:segment
library/device/acpi/aml/parser.zig:maximum_segments
library/device/driver/driver.zig:lookup_attempts
library/device/model/device-abi.zig:hid
library/device/model/device-abi.zig:maximum_device_resources
library/device/pci/pci.zig:bar_virtual
library/device/pci/pci.zig:bars
library/device/registry/device-registry.zig:cols
library/device/registry/device-registry.zig:rules
library/device/registry/device-registry.zig:rules
library/device/registry/device-registry.zig:rules
library/device/registry/device-registry.zig:rules
library/device/registry/device-registry.zig:rules
library/kernel/channel.zig:bind_attempts
library/kernel/channel.zig:name_maximum
library/kernel/channel.zig:path_maximum
library/kernel/file-system.zig:name_buffer
library/kernel/file-system.zig:out
library/kernel/logging.zig:buffer
library/kernel/process.zig:blob
library/kernel/process.zig:receive
library/kernel/process.zig:table
library/kernel/service.zig:subscriber_capacity
library/kernel/start.zig:buffer
library/kernel/thread.zig:readers
library/kernel/thread.zig:writers
library/protocol/device-manager/device-manager-protocol.zig:hid
library/protocol/display/display-protocol.zig:max_modes
library/protocol/envelope/envelope.zig:packet_maximum
library/protocol/envelope/envelope.zig:post_maximum
library/protocol/power/power-protocol.zig:hid
library/protocol/scanout/scanout-protocol.zig:max_modes
library/protocol/usb-transfer/usb-transfer-protocol.zig:max_report_data
library/protocol/usb-transfer/usb-transfer-protocol.zig:max_reported_endpoints
library/protocol/usb-transfer/usb-transfer-protocol.zig:setup
system/abi.zig:errno_maximum
system/abi.zig:klog_maximum_message
system/abi.zig:maximum_process_name
system/boot-handoff.zig:kernel_segments
system/drivers/pci-bus/pci-bus.zig:line
system/drivers/pci-bus/pci-bus.zig:sub_buffer
system/drivers/ps2-bus/mouse-packet.zig:bytes
system/drivers/ps2-bus/scancode.zig:pressed
system/drivers/ps2-bus/scancode.zig:set2_base
system/drivers/ps2-bus/scancode.zig:set2_extended
system/drivers/usb-hid/hid-report.zig:keys
system/drivers/usb-hid/keyboard.zig:receive
system/drivers/usb-hid/mouse.zig:receive
system/drivers/usb-storage/bulk-only-transport.zig:cdb
system/drivers/usb-storage/scsi.zig:op_read_capacity_10
system/drivers/usb-storage/usb-storage.zig:capacity_bytes
system/drivers/usb-xhci-bus/usb-xhci-bus.zig:hid_buffer
system/drivers/usb-xhci-bus/usb-xhci-bus.zig:maker_buffer
system/drivers/usb-xhci-bus/usb-xhci-bus.zig:maker_buffer
system/drivers/usb-xhci-bus/usb-xhci-bus.zig:prev_connected
system/drivers/usb-xhci-bus/usb-xhci-bus.zig:product_buffer
system/drivers/usb-xhci-bus/usb-xhci-bus.zig:product_buffer
system/drivers/usb-xhci-bus/usb-xhci-library.zig:buffer
system/drivers/usb-xhci-bus/usb-xhci-library.zig:bytes
system/drivers/usb-xhci-bus/usb-xhci-library.zig:data
system/drivers/usb-xhci-bus/usb-xhci-library.zig:descriptor
system/drivers/usb-xhci-bus/usb-xhci-library.zig:head
system/drivers/usb-xhci-bus/usb-xhci-library.zig:header
system/drivers/usb-xhci-bus/usb-xhci-library.zig:max_subscriptions
system/drivers/usb-xhci-bus/usb-xhci-library.zig:port_changes
system/drivers/usb-xhci-bus/usb-xhci-library.zig:raw
system/drivers/usb-xhci-bus/usb-xhci-library.zig:report_queue_capacity
system/drivers/usb-xhci-bus/usb-xhci-library.zig:request_set_hub_depth
system/drivers/virtio-gpu/virtio-gpu-protocol.zig:edid
system/drivers/virtio-gpu/virtio-gpu-protocol.zig:max_scanouts
system/drivers/virtio-gpu/virtio-gpu.zig:descriptors
system/drivers/virtio-gpu/virtio-gpu.zig:max_height
system/drivers/virtio-gpu/virtio-gpu.zig:max_width
system/initial-ramdisk.zig:buffer
system/initial-ramdisk.zig:buffer
system/initial-ramdisk.zig:maximum_name
system/kernel/acpi.zig:APIC
system/kernel/acpi.zig:BERT
system/kernel/acpi.zig:CPEP
system/kernel/acpi.zig:DMAR
system/kernel/acpi.zig:DSDT
system/kernel/acpi.zig:ECDT
system/kernel/acpi.zig:EINJ
system/kernel/acpi.zig:ERST
system/kernel/acpi.zig:FACP
system/kernel/acpi.zig:FACS
system/kernel/acpi.zig:HEST
system/kernel/acpi.zig:HPET
system/kernel/acpi.zig:IVRS
system/kernel/acpi.zig:MCFG
system/kernel/acpi.zig:MPST
system/kernel/acpi.zig:MSCT
system/kernel/acpi.zig:PMTT
system/kernel/acpi.zig:PSDT
system/kernel/acpi.zig:RASF
system/kernel/acpi.zig:RSDT
system/kernel/acpi.zig:SBST
system/kernel/acpi.zig:SLIT
system/kernel/acpi.zig:SPCR
system/kernel/acpi.zig:SRAT
system/kernel/acpi.zig:SSDT
system/kernel/acpi.zig:XSDT
system/kernel/acpi.zig:aml_block_len
system/kernel/acpi.zig:aml_block_physical
system/kernel/acpi.zig:holes
system/kernel/acpi.zig:maximum_rmrr
system/kernel/acpi.zig:nb
system/kernel/acpi.zig:nb
system/kernel/acpi.zig:nb
system/kernel/acpi.zig:oem_id
system/kernel/acpi.zig:oem_id
system/kernel/acpi.zig:oem_id
system/kernel/acpi.zig:oem_table_id
system/kernel/acpi.zig:overrides
system/kernel/acpi.zig:rmrr_limit_offset
system/kernel/acpi.zig:signature
system/kernel/acpi.zig:signature
system/kernel/acpi.zig:signature
system/kernel/architecture/x86_64/cpu.zig:irq_vector_count
system/kernel/architecture/x86_64/idt.zig:gate_count
system/kernel/architecture/x86_64/ioapic.zig:overrides
system/kernel/architecture/x86_64/iommu-amd.zig:buffer
system/kernel/architecture/x86_64/iommu-amd.zig:buffer
system/kernel/architecture/x86_64/iommu-intel.zig:buffer
system/kernel/architecture/x86_64/iommu-intel.zig:buffer
system/kernel/architecture/x86_64/iommu-intel.zig:context_table
system/kernel/device-model.zig:buffer
system/kernel/device-model.zig:cbuf
system/kernel/device-model.zig:hid_buffer
system/kernel/device-model.zig:maximum_resources
system/kernel/device-model.zig:name_buffer
system/kernel/device-model.zig:rbuf
system/kernel/heap.zig:heap_maximum
system/kernel/ipc-synchronous.zig:MESSAGE_MAXIMUM
system/kernel/ipc-synchronous.zig:POST_MAXIMUM
system/kernel/ipc-synchronous.zig:notify_buffer
system/kernel/ipc-synchronous.zig:post_capacity
system/kernel/irq.zig:maximum_gsi
system/kernel/irq.zig:msi_bound
system/kernel/irq.zig:msi_owner
system/kernel/irq.zig:vector_gsi
system/kernel/kernel.zig:buffer
system/kernel/kernel.zig:buffer
system/kernel/kernel.zig:buffer
system/kernel/kernel.zig:isos
system/kernel/kernel.zig:maximum_wake_attempts
system/kernel/log-ring.zig:message
system/kernel/log-ring.zig:out
system/kernel/log.zig:buffer
system/kernel/log.zig:maximum_sinks
system/kernel/log.zig:message
system/kernel/log.zig:ring_capacity
system/kernel/process.zig:chunk
system/kernel/process.zig:chunk
system/kernel/process.zig:chunk
system/kernel/process.zig:chunk
system/kernel/process.zig:exit_record_capacity
system/kernel/process.zig:exit_subscriber_capacity
system/kernel/process.zig:maximum_argument_bytes
system/kernel/process.zig:maximum_arguments
system/kernel/process.zig:maximum_dma_regions
system/kernel/process.zig:maximum_mmap_pages
system/kernel/process.zig:maximum_mount_prefix
system/kernel/process.zig:maximum_mount_rewrite
system/kernel/process.zig:maximum_pages
system/kernel/process.zig:maximum_resolve_path
system/kernel/process.zig:maximum_segments
system/kernel/process.zig:maximum_shared_memory_pages
system/kernel/process.zig:name_buffer
system/kernel/process.zig:timer_capacity
system/kernel/process.zig:word_bytes
system/kernel/process.zig:write_buffer
system/kernel/scheduler.zig:ipc_maximum_handles
system/kernel/scheduler.zig:maximum_space_mappings
system/kernel/vfs.zig:maximum_directories
system/kernel/vfs.zig:maximum_mounts
system/kernel/vfs.zig:maximum_prefix
system/kernel/vfs.zig:maximum_rewrite
system/services/acpi/acpi.zig:blocks
system/services/acpi/acpi.zig:buffer
system/services/acpi/acpi.zig:hid
system/services/acpi/acpi.zig:mmio_scratch
system/services/acpi/acpi.zig:name
system/services/acpi/acpi.zig:registered
system/services/device-manager/device-manager.zig:arguments
system/services/device-manager/device-manager.zig:id_text
system/services/device-manager/device-manager.zig:maximum_children
system/services/device-manager/device-manager.zig:maximum_drivers
system/services/device-manager/device-manager.zig:name_buffer
system/services/device-manager/device-manager.zig:registry_rules
system/services/device-manager/device-manager.zig:registry_source
system/services/display/backend.zig:device_table
system/services/display/backend.zig:line
system/services/display/compositor.zig:capacity
system/services/display/compositor.zig:maximum_columns
system/services/display/compositor.zig:maximum_rects
system/services/display/compositor.zig:maximum_rows
system/services/display/display.zig:line
system/services/display/display.zig:line
system/services/display/display.zig:line
system/services/display/display.zig:list
system/services/display/display.zig:maximum_layers
system/services/display/display.zig:mode_list
system/services/fat/engine.zig:buf
system/services/fat/engine.zig:buf
system/services/fat/engine.zig:buf
system/services/fat/engine.zig:buffer
system/services/fat/engine.zig:cached_back
system/services/fat/engine.zig:chunk
system/services/fat/engine.zig:chunk
system/services/fat/engine.zig:chunk
system/services/fat/engine.zig:device_back
system/services/fat/engine.zig:display
system/services/fat/engine.zig:long_name
system/services/fat/engine.zig:long_name
system/services/fat/engine.zig:long_name
system/services/fat/engine.zig:max_transfer_sectors
system/services/fat/engine.zig:pair
system/services/fat/engine.zig:pair
system/services/fat/engine.zig:payload
system/services/fat/engine.zig:payload
system/services/fat/engine.zig:payload
system/services/fat/engine.zig:readback
system/services/fat/engine.zig:run
system/services/fat/engine.zig:run
system/services/fat/engine.zig:short
system/services/fat/engine.zig:short
system/services/fat/engine.zig:short
system/services/fat/engine.zig:stem
system/services/fat/engine.zig:tail_buffer
system/services/fat/engine.zig:units
system/services/fat/engine.zig:value
system/services/fat/engine.zig:value
system/services/fat/engine.zig:window
system/services/fat/on-disk.zig:filesystem_type
system/services/fat/on-disk.zig:filesystem_type
system/services/fat/on-disk.zig:jump
system/services/fat/on-disk.zig:name
system/services/fat/on-disk.zig:name1
system/services/fat/on-disk.zig:name2
system/services/fat/on-disk.zig:name3
system/services/fat/on-disk.zig:oem_name
system/services/fat/on-disk.zig:volume_label
system/services/fat/on-disk.zig:volume_label
system/services/init/init.zig:binary
system/services/init/init.zig:init_csv
system/services/init/init.zig:max_service_args
system/services/init/init.zig:max_services
system/services/init/init.zig:maximum_bindings
system/services/init/init.zig:maximum_grants
system/services/init/init.zig:maximum_name
system/services/init/init.zig:maximum_restarts
system/services/init/init.zig:process_table
system/services/init/init.zig:protocol_csv
system/services/logger/logger.zig:chunk
system/services/logger/logger.zig:gap_line
system/services/logger/logger.zig:line
system/services/logger/logger.zig:line
system/services/logger/logger.zig:maximum_files
system/services/logger/logger.zig:stamp