Files
Shailend ChandandgVisor bot e6859917fb Report hangup in HostReadiness on closed FD and make beforeSave idempotent.
- In HostSender.HostReadiness, return hangup and readable/writeable events
  ((ReadableEvents | WriteableEvents | EventHUp | EventRdHUp) & mask) when
  the host FD is closed (c.fd < 0), ensuring pollers (epoll/poll) are notified
  of EOF and disconnection instead of masking the closed state.
- In SCMSender.beforeSave, return early if e.fd < 0 to make beforeSave
  idempotent and prevent nil-pointer dereferences in fdnotifier.RemoveFD(-1)
  on already-closed endpoints.

PiperOrigin-RevId: 975898094
2026-09-03 13:37:12 -07:00

127 lines
2.8 KiB
Python

load("//pkg/sync/locking:locking.bzl", "declare_mutex")
load("//tools:defs.bzl", "go_library", "go_test")
load("//tools/go_generics:defs.bzl", "go_template_instance")
package(
default_applicable_licenses = ["//:license"],
licenses = ["notice"],
)
declare_mutex(
name = "queue_mutex",
out = "queue_mutex.go",
package = "transport",
prefix = "queue",
)
declare_mutex(
name = "stream_queue_receiver_mutex",
out = "stream_queue_receiver_mutex.go",
package = "transport",
prefix = "streamQueueReceiver",
)
declare_mutex(
name = "endpoint_mutex",
out = "endpoint_mutex.go",
nested_lock_names = [
"higherID",
],
package = "transport",
prefix = "endpoint",
)
go_template_instance(
name = "transport_message_list",
out = "transport_message_list.go",
package = "transport",
prefix = "message",
template = "//pkg/ilist:generic_list",
types = {
"Element": "*message",
"Linker": "*message",
},
)
go_template_instance(
name = "queue_refs",
out = "queue_refs.go",
package = "transport",
prefix = "queue",
template = "//pkg/refs:refs_template",
types = {
"T": "queue",
},
)
go_template_instance(
name = "host_sender_refs",
out = "host_sender_refs.go",
package = "transport",
prefix = "HostSender",
template = "//pkg/refs:refs_template",
types = {
"T": "HostSender",
},
)
go_library(
name = "transport",
srcs = [
"connectioned.go",
"connectioned_state.go",
"connectionless.go",
"connectionless_state.go",
"endpoint_mutex.go",
"host.go",
"host_iovec.go",
"host_sender_refs.go",
"host_unsafe.go",
"queue.go",
"queue_mutex.go",
"queue_refs.go",
"save_restore.go",
"stream_queue_receiver_mutex.go",
"transport_message_list.go",
"unix.go",
],
visibility = ["//:sandbox"],
deps = [
"//pkg/abi/linux",
"//pkg/atomicbitops",
"//pkg/buffer",
"//pkg/context",
"//pkg/errors/linuxerr",
"//pkg/fdnotifier",
"//pkg/ilist",
"//pkg/log",
"//pkg/refs",
"//pkg/sentry/hostfd",
"//pkg/sentry/kernel/auth",
"//pkg/sentry/uniqueid",
"//pkg/sync",
"//pkg/sync/locking",
"//pkg/syserr",
"//pkg/tcpip",
"//pkg/unet",
"//pkg/waiter",
"@org_golang_x_sys//unix:go_default_library",
],
)
go_test(
name = "transport_test",
size = "small",
srcs = [
"host_test.go",
"queue_test.go",
],
library = ":transport",
deps = [
"//pkg/context",
"//pkg/syserr",
"//pkg/waiter",
"@org_golang_x_sys//unix:go_default_library",
],
)