A pool-operator in XAPI-based hypervisors (XenServer, XCP-ng) can disable automatic PBD creation for shared storage repositories by setting the sync_create_pbds key to "nosync" in Pool.other_config. The create_storage.ml:166-171 module checks this value during host boot and skips PBD creation when it equals "nosync". This causes shared storage to remain disconnected after host reboot - VMs depending on shared storage cannot start. The disruption persists across reboots until the key is removed.
Pool.other_config is a Map(String, String) field writable by pool-operator. The sync_create_pbds key controls whether XAPI automatically creates PBDs (Physical Block Devices - the host-local connections to shared storage repositories) during host startup.
The code path:
pool-operator calls Pool.add_to_other_config(pool, "sync_create_pbds", "nosync")create_storage.ml:166-171 reads Pool.other_configsync_create_pbds equals "nosync""nosync", PBD auto-creation for shared SRs is skipped entirelyThe key persists across reboots. Every subsequent host restart in the pool continues to skip PBD creation until the key is manually removed. In a pool with HA, this can cause cascading failures: hosts reboot without storage, HA-protected VMs cannot restart, and the pool enters a degraded state.
Missing RBAC protection. Pool.other_config has no map_keys_roles entry for sync_create_pbds. It inherits the class default _R_POOL_OP.
Missing write-time validation. No validation occurs when the key is set. The value "nosync" is a string comparison at consumption time only.
Persistent denial of service. The key persists in the database across reboots, causing repeated storage disconnection on every host startup until manually removed.
No operational guard. No check verifies whether disabling PBD sync is appropriate for the current pool state (e.g., whether shared SRs exist, whether HA is enabled).
| Scenario | Impact | Pre-conditions | Status |
|---|---|---|---|
| Storage disconnection on reboot | All shared SRs disconnected after host restart, VMs fail to start | pool-operator | Source-traced |
| HA cascade | HA-protected VMs cannot restart after failover because shared storage is disconnected | pool-operator, HA enabled, shared storage | Source-traced |
| Persistent disruption | Key persists across reboots, causing repeated failures until manual removal | pool-operator | Source-traced |
| BOC-1 chain | vm-admin uses BOC-1 S3 to self-grant pool-operator, then disables PBD sync | vm-admin, BOC-1 | Source-traced |
sync_create_pbds=nosync. The disruption activates on next host reboot.Pool.other_config for the sync_create_pbds keydisclosure/vendor-detection-guidance.mdPool.other_config for unexpected sync_create_pbds key"nosync", remove the key: Pool.remove_from_other_config(pool, "sync_create_pbds")Protect the key via map_keys_roles. Add sync_create_pbds to Pool.other_config map_keys_roles at _R_POOL_ADMIN in datamodel_pool.ml.
Add operational warnings. When sync_create_pbds is set to "nosync", XAPI should log a prominent warning during host boot indicating that shared storage will not be connected.
Upstream patches exist. They are held privately pending coordinated disclosure.
Disclosure:
create_storage.ml:166-171 (sync_create_pbds check), datamodel_pool.ml:1764-1773 (field definition)disclosure/advisories/ploc-security-advisory.md (PLOC-5)research/investigations/pool-other-config.mdDiscovered and reported by Jakob Wolffhechel, Moksha.