`idToGuestCID` generates frequent vsock CID collisions due to limited output space
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
- #895 di @Cicada1107 — chiusa senza merge
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 54/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- go
- Ambito
- backend, networking
Direzione di ricerca
Inizia con idToGuestCID in pkg/unikontainers/vaccel.go, quindi segui il suo utilizzo da Exec in pkg/unikontainers/unikontainers.go fino a qemu.go, firecracker.go e cloud_hypervisor.go. Esamina i vincoli attuali del CID di vhost-vsock e individua come verificare il comportamento di hashing o di ritentativo scelto. Il lavoro è completato quando i container concorrenti non falliscono più a causa di collisioni CID prevedibili, con copertura per il caso di anagramma segnalato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
The idToGuestCID function in pkg/unikontainers/vaccel.go generates vhost-vsock Context Identifiers (CIDs) by summing the ASCII values of a container ID and applying mod 97. This restricts the entire output space to just 97 possible CIDs (range [3, 99]).
Since standard container IDs (e.g., from containerd) are 64-character hex strings, this constrained output space leads to frequent collisions. In a multi-container vAccel deployment, the probability of a CID collision exceeds 50% with just 13 concurrent containers.
When a collision occurs, the hypervisor passes the duplicate guest-cid to the kernel, which rejects the binding with EADDRINUSE. Because urunc does not currently implement collision detection or retry logic during the Exec phase, the container initialization fails.
Furthermore, because the hashing mechanism relies on a simple character sum, container IDs that are anagrams of each other (which is common with hex-encoded strings) will deterministically collide.
Root Cause
pkg/unikontainers/vaccel.godoes the(sum % 97) + 3math.pkg/unikontainers/unikontainers.gocalls it during containerExec().- The hypervisors (
qemu.go,firecracker.go,cloud_hypervisor.go) then pass this blindly to the kernel.
Reproducer for Anagram Collisions
def id_to_guest_cid(id_str):
return (sum(ord(c) for c in id_str) % 97) + 3
id1 = "abcdef0123456789" * 4
id2 = "9876543210fedcba" * 4
# Both IDs share the same character distribution
assert id_to_guest_cid(id1) == id_to_guest_cid(id2) # Evaluates to 29
Proposed Solution
Replace the character sum with a non-cryptographic hash (e.g., hash/fnv) over the container ID, and map it to the full available vhost-vsock CID range ([3, 1<<32 - 1]).
Alternatively, if CIDs must be strictly deterministic and collision-free across arbitrary host states, implement a probe-and-retry mechanism to verify CID availability before executing the VMM.
- Lingua principale
- Go
- Stelle
- 308
- Fork
- 222
- Merge medio
- 2g 13h
- PR unite (30g)
- 43
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di urunc-dev/urunc
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 2 giorni
-
Containers handed over to runc cannot be started, killed or deleted when urunc runs without --rootForse di nuovo libera @Daksha1611 l’ha presa 17 giorni fa e non c’è nessuna pull request aperta. Apertabug enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
urunc-dev/urunc#1127 · 4 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
urunc-deploy cleanup never labels the node, so the cleanup DaemonSet does not runForse già presa @Sarthak-Shreshtha01 l’ha presa 20 giorni fa. Apertabug K8s/Tools
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 2 giorni
-
FreeBSD: docs update and rootfs detectionForse già presa @yug105 l’ha presa 14 giorni fa. Apertadocumentation enhancement Storage
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
urunc-dev/urunc#1108 · 6 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
Rumprun guests receive &, < and > as \u0026, \u003c and \u003eForse già presa @Sarthak-Shreshtha01 l’ha presa 25 giorni fa. Apertabug Guests
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
urunc-dev/urunc#1074 · 4 commenti ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di urunc-dev/urunc
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
SAP/crossplane-provider-btp#1175 ·
I maintainer di solito rispondono entro 1 giorno
-
adk: stream concatenation errors bypass retry and failoverForse già presa @OUAO-FRANK l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
google/osv-scalibr#2586 ·
I maintainer di solito rispondono entro 2 giorni
-
Add an MCP server: imageatApertaneeds-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
stacklok/toolhive-catalog#1890 ·
I maintainer di solito rispondono entro 1 giorno
-
heap: pushing an item that is already queued corrupts the indexForse già presa @lbarrosby l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
kubernetes-sigs/kwok#1800 ·
I maintainer di solito rispondono entro 1 giorno