From eda4d612c2e64321766e1074a698caeae843102a Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sun, 23 Feb 2025 03:24:37 +0900 Subject: fortify: keep external files alive This should eliminate sporadic failures, like the known double close in "seccomp". Signed-off-by: Ophestra --- wl/conn.go | 1 + wl/wayland-bind.c | 2 +- wl/wayland-bind.h | 2 +- wl/wl.go | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) (limited to 'wl') diff --git a/wl/conn.go b/wl/conn.go index 82c0587b..1a7cba65 100644 --- a/wl/conn.go +++ b/wl/conn.go @@ -94,6 +94,7 @@ func bindRawConn(done chan struct{}, rc syscall.RawConn, p, appID, instanceID st // keep socket alive until done is requested <-done + runtime.KeepAlive(syncPipe[1].Fd()) }); err != nil { setupDone <- err } diff --git a/wl/wayland-bind.c b/wl/wayland-bind.c index a177a378..01e8b882 100644 --- a/wl/wayland-bind.c +++ b/wl/wayland-bind.c @@ -23,7 +23,7 @@ static const struct wl_registry_listener registry_listener = { .global_remove = registry_handle_global_remove, }; -int32_t bind_wayland_fd(char *socket_path, int fd, const char *app_id, const char *instance_id, int sync_fd) { +int32_t f_bind_wayland_fd(char *socket_path, int fd, const char *app_id, const char *instance_id, int sync_fd) { int32_t res = 0; // refer to resErr for meaning struct wl_display *display; diff --git a/wl/wayland-bind.h b/wl/wayland-bind.h index 67898fc6..720dfe4e 100644 --- a/wl/wayland-bind.h +++ b/wl/wayland-bind.h @@ -1,3 +1,3 @@ #include -int32_t bind_wayland_fd(char *socket_path, int fd, const char *app_id, const char *instance_id, int sync_fd); \ No newline at end of file +int32_t f_bind_wayland_fd(char *socket_path, int fd, const char *app_id, const char *instance_id, int sync_fd); \ No newline at end of file diff --git a/wl/wl.go b/wl/wl.go index da1ed2c8..51ad1fd2 100644 --- a/wl/wl.go +++ b/wl/wl.go @@ -29,7 +29,7 @@ func bindWaylandFd(socketPath string, fd uintptr, appID, instanceID string, sync if hasNull(appID) || hasNull(instanceID) { return ErrContainsNull } - res := C.bind_wayland_fd(C.CString(socketPath), C.int(fd), C.CString(appID), C.CString(instanceID), C.int(syncFD)) + res := C.f_bind_wayland_fd(C.CString(socketPath), C.int(fd), C.CString(appID), C.CString(instanceID), C.int(syncFD)) return resErr[int32(res)] } -- cgit v1.3.1