diff options
Diffstat (limited to 'pkgs/os-specific/linux/chromium-os')
8 files changed, 258 insertions, 12 deletions
diff --git a/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-don-t-leak-source-absolute-paths.patch b/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-don-t-leak-source-absolute-paths.patch index 741b50af1b4..eb79e1ae8fa 100644 --- a/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-don-t-leak-source-absolute-paths.patch +++ b/pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-don-t-leak-source-absolute-paths.patch @@ -1,7 +1,7 @@ From 56d3fe9520c1ef2a6400939f4deae06d9b5cdfc2 Mon Sep 17 00:00:00 2001 From: Alyssa Ross <hi@alyssa.is> Date: Sun, 24 Nov 2019 16:56:11 +0000 -Subject: [PATCH 1/6] common-mk: don't leak source-absolute paths +Subject: [PATCH 1/7] common-mk: don't leak source-absolute paths Source-absolute paths like //vm_tools/whatever were being leaked to subprocesses, which of course didn't know how to understand them. @@ -135,5 +135,5 @@ index 7fcb08341..692704288 100644 } } -- -2.25.1 +2.26.2 diff --git a/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-.gn-don-t-hardcode-env-path.patch b/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-.gn-don-t-hardcode-env-path.patch index 51c15dcd4cb..9d4843064d2 100644 --- a/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-.gn-don-t-hardcode-env-path.patch +++ b/pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-.gn-don-t-hardcode-env-path.patch @@ -1,7 +1,7 @@ From ec1afec90fd8e391b93f53f0abd8bc11cdba0a32 Mon Sep 17 00:00:00 2001 From: Alyssa Ross <hi@alyssa.is> Date: Sun, 24 Nov 2019 17:20:46 +0000 -Subject: [PATCH 2/6] common-mk: .gn: don't hardcode env path +Subject: [PATCH 2/7] common-mk: .gn: don't hardcode env path This is needlessly non-portable. --- @@ -19,5 +19,5 @@ index e7dba8c91..e29fcd61e 100644 -script_executable = "/usr/bin/env" +script_executable = "env" -- -2.25.1 +2.26.2 diff --git a/pkgs/os-specific/linux/chromium-os/common-mk/0003-Revert-common-mk-Suppress-Wrange-loop-analysis-warni.patch b/pkgs/os-specific/linux/chromium-os/common-mk/0003-Revert-common-mk-Suppress-Wrange-loop-analysis-warni.patch index d3d4e915163..f64969fc811 100644 --- a/pkgs/os-specific/linux/chromium-os/common-mk/0003-Revert-common-mk-Suppress-Wrange-loop-analysis-warni.patch +++ b/pkgs/os-specific/linux/chromium-os/common-mk/0003-Revert-common-mk-Suppress-Wrange-loop-analysis-warni.patch @@ -1,7 +1,7 @@ From b3add805d98e01488d71cbad51206f3a4949bb1c Mon Sep 17 00:00:00 2001 From: Denis Nikitin <denik@chromium.org> Date: Wed, 5 Feb 2020 18:43:38 +0000 -Subject: [PATCH 3/6] Revert "common-mk: Suppress -Wrange-loop-analysis +Subject: [PATCH 3/7] Revert "common-mk: Suppress -Wrange-loop-analysis warning" This reverts commit 09298dce8d31b5744a83784d027a3fd1e312eb6d. @@ -68,5 +68,5 @@ index 7c0601b18..dc02a6979 100644 cflags_c = [ "-std=gnu11" ] + external_cppflags + external_cxxflags cflags_cc = [ "-std=gnu++14" ] + external_cppflags + external_cxxflags -- -2.25.1 +2.26.2 diff --git a/pkgs/os-specific/linux/chromium-os/sommelier/0004-sommelier-don-t-leak-source-absolute-paths.patch b/pkgs/os-specific/linux/chromium-os/sommelier/0004-sommelier-don-t-leak-source-absolute-paths.patch index 756584365c7..5d3ec4effe8 100644 --- a/pkgs/os-specific/linux/chromium-os/sommelier/0004-sommelier-don-t-leak-source-absolute-paths.patch +++ b/pkgs/os-specific/linux/chromium-os/sommelier/0004-sommelier-don-t-leak-source-absolute-paths.patch @@ -1,7 +1,7 @@ From 1fa4de5b2228c40b25fd6333a74ae7535d73bcce Mon Sep 17 00:00:00 2001 From: Alyssa Ross <hi@alyssa.is> Date: Sun, 1 Dec 2019 17:04:04 +0000 -Subject: [PATCH 4/6] sommelier: don't leak source-absolute paths +Subject: [PATCH 4/7] sommelier: don't leak source-absolute paths --- vm_tools/sommelier/wayland_protocol.gni | 2 +- @@ -21,5 +21,5 @@ index 4f18a0c10..b1bd5d659 100644 } } -- -2.25.1 +2.26.2 diff --git a/pkgs/os-specific/linux/chromium-os/sommelier/0005-sommelier-use-stable-xdg-shell-protocol.patch b/pkgs/os-specific/linux/chromium-os/sommelier/0005-sommelier-use-stable-xdg-shell-protocol.patch index 20994bc1785..5a6e57375a3 100644 --- a/pkgs/os-specific/linux/chromium-os/sommelier/0005-sommelier-use-stable-xdg-shell-protocol.patch +++ b/pkgs/os-specific/linux/chromium-os/sommelier/0005-sommelier-use-stable-xdg-shell-protocol.patch @@ -1,7 +1,7 @@ From 5068e64b2fdedca0a4a9f1894335af8587c4c55a Mon Sep 17 00:00:00 2001 From: Puck Meerburg <puck@puckipedia.com> Date: Tue, 3 Dec 2019 18:06:14 +0000 -Subject: [PATCH 5/6] sommelier: use stable xdg-shell protocol +Subject: [PATCH 5/7] sommelier: use stable xdg-shell protocol From https://github.com/wayland-project/weston/commit/d8d9f5e6e16c8f6a3c06763d5f56c27dc9a6e52e: @@ -1744,5 +1744,5 @@ index b851b5c8d..7e6daf773 100644 struct sl_global* sl_gtk_shell_global_create(struct sl_context* ctx); -- -2.25.1 +2.26.2 diff --git a/pkgs/os-specific/linux/chromium-os/sommelier/0006-sommelier-make-building-demos-optional.patch b/pkgs/os-specific/linux/chromium-os/sommelier/0006-sommelier-make-building-demos-optional.patch index 277ffa47ce7..3538932d804 100644 --- a/pkgs/os-specific/linux/chromium-os/sommelier/0006-sommelier-make-building-demos-optional.patch +++ b/pkgs/os-specific/linux/chromium-os/sommelier/0006-sommelier-make-building-demos-optional.patch @@ -1,7 +1,7 @@ From 8774d76f1b57092df9004d654fd075d7691b9f12 Mon Sep 17 00:00:00 2001 From: Alyssa Ross <hi@alyssa.is> Date: Wed, 15 Jan 2020 21:36:43 +0000 -Subject: [PATCH 6/6] sommelier: make building demos optional +Subject: [PATCH 6/7] sommelier: make building demos optional MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -96,5 +96,5 @@ index 4330560a1..cbb752745 100644 + } } -- -2.25.1 +2.26.2 diff --git a/pkgs/os-specific/linux/chromium-os/sommelier/0007-vm_tools-sommelier-Log-the-value-of-strerror-when-as.patch b/pkgs/os-specific/linux/chromium-os/sommelier/0007-vm_tools-sommelier-Log-the-value-of-strerror-when-as.patch new file mode 100644 index 00000000000..778c481d598 --- /dev/null +++ b/pkgs/os-specific/linux/chromium-os/sommelier/0007-vm_tools-sommelier-Log-the-value-of-strerror-when-as.patch @@ -0,0 +1,245 @@ +From 64afc7e7271e0bad332a8a246a4fb4151b3d296f Mon Sep 17 00:00:00 2001 +From: Fergus Dall <sidereal@google.com> +Date: Fri, 27 Mar 2020 18:34:04 +1100 +Subject: [PATCH 7/7] vm_tools: sommelier: Log the value of strerror when + asserting + +There's some reports of sommelier crashing with assert failures, and +right now we don't even have a way to tell what the error was from the +logs. + +BUG=chromium:1053843 +TEST=emerge-tatl vm_guest_tools + +Change-Id: Iac9e0470600f7c7a8d8328049a79305251d7ef7f +Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2124131 +Commit-Queue: Fergus Dall <sidereal@google.com> +Tested-by: Fergus Dall <sidereal@google.com> +Reviewed-by: Nic Hollingum <hollingum@google.com> +--- + vm_tools/sommelier/sommelier.c | 65 +++++++++++++++++----------------- + 1 file changed, 32 insertions(+), 33 deletions(-) + +diff --git a/vm_tools/sommelier/sommelier.c b/vm_tools/sommelier/sommelier.c +index 5e03d8978..ffe6f645c 100644 +--- a/vm_tools/sommelier/sommelier.c ++++ b/vm_tools/sommelier/sommelier.c +@@ -37,6 +37,15 @@ + #include "viewporter-client-protocol.h" + #include "xdg-shell-client-protocol.h" + ++#define errno_assert(rv) \ ++ { \ ++ int macro_private_assert_value = (rv); \ ++ if (!macro_private_assert_value) { \ ++ fprintf(stderr, "Unexpected error: %s\n", strerror(errno)); \ ++ assert(false); \ ++ } \ ++ } ++ + // Check that required macro definitions exist. + #ifndef XWAYLAND_PATH + #error XWAYLAND_PATH must be defined +@@ -239,7 +248,7 @@ struct sl_mmap* sl_mmap_create(int fd, + map->buffer_resource = NULL; + map->addr = + mmap(NULL, size + offset0, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); +- assert(map->addr != MAP_FAILED); ++ errno_assert(map->addr != MAP_FAILED); + + return map; + } +@@ -2183,8 +2192,7 @@ int sl_begin_data_source_send(struct sl_context* ctx, + + flags = fcntl(fd, F_GETFL, 0); + rv = fcntl(fd, F_SETFL, flags | O_NONBLOCK); +- assert(!rv); +- UNUSED(rv); ++ errno_assert(!rv); + + ctx->selection_data_source_send_fd = fd; + free(reply); +@@ -2810,7 +2818,7 @@ static void sl_send_data(struct sl_context* ctx, xcb_atom_t data_type) { + int p[2]; + + rv = pipe2(p, O_CLOEXEC | O_NONBLOCK); +- assert(!rv); ++ errno_assert(!rv); + + fd_to_receive = p[0]; + fd_to_wayland = p[1]; +@@ -3153,7 +3161,7 @@ static void sl_sd_notify(const char* state) { + assert(socket_name); + + fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0); +- assert(fd >= 0); ++ errno_assert(fd >= 0); + + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; +@@ -3171,8 +3179,7 @@ static void sl_sd_notify(const char* state) { + msghdr.msg_iovlen = 1; + + rv = sendmsg(fd, &msghdr, MSG_NOSIGNAL); +- assert(rv != -1); +- UNUSED(rv); ++ errno_assert(rv != -1); + } + + static int sl_handle_sigchld(int signal_number, void* data) { +@@ -3304,7 +3311,7 @@ static int sl_handle_display_ready_event(int fd, uint32_t mask, void* data) { + (int)(XCURSOR_SIZE_BASE * ctx->scale + 0.5))); + + pid = fork(); +- assert(pid >= 0); ++ errno_assert(pid >= 0); + if (pid == 0) { + sl_execvp(ctx->runprog[0], ctx->runprog, -1); + _exit(EXIT_FAILURE); +@@ -3373,8 +3380,7 @@ static int sl_handle_virtwl_ctx_event(int fd, uint32_t mask, void* data) { + } + + bytes = sendmsg(ctx->virtwl_socket_fd, &msg, MSG_NOSIGNAL); +- assert(bytes == ioctl_recv->len); +- UNUSED(bytes); ++ errno_assert(bytes == ioctl_recv->len); + + while (fd_count--) + close(ioctl_recv->fds[fd_count]); +@@ -3406,10 +3412,7 @@ static int sl_handle_virtwl_socket_event(int fd, uint32_t mask, void* data) { + msg.msg_controllen = sizeof(fd_buffer); + + bytes = recvmsg(ctx->virtwl_socket_fd, &msg, 0); +- if (bytes < 0) { +- fprintf(stderr, "Failed to get message from virtwl: %s\n", strerror(errno)); +- } +- assert(bytes > 0); ++ errno_assert(bytes > 0); + + // If there were any FDs recv'd by recvmsg, there will be some data in the + // msg_control buffer. To get the FDs out we iterate all cmsghdr's within and +@@ -3437,11 +3440,7 @@ static int sl_handle_virtwl_socket_event(int fd, uint32_t mask, void* data) { + // structure which we now pass along to the kernel. + ioctl_send->len = bytes; + rv = ioctl(ctx->virtwl_ctx_fd, VIRTWL_IOCTL_SEND, ioctl_send); +- if (!rv) { +- fprintf(stderr, "Failed to send message to virtwl: %s\n", strerror(errno)); +- } +- assert(!rv); +- UNUSED(rv); ++ errno_assert(!rv); + + while (fd_count--) + close(ioctl_send->fds[fd_count]); +@@ -3765,7 +3764,7 @@ int main(int argc, char** argv) { + + lock_fd = open(lock_addr, O_CREAT | O_CLOEXEC, + (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)); +- assert(lock_fd >= 0); ++ errno_assert(lock_fd >= 0); + + rv = flock(lock_fd, LOCK_EX | LOCK_NB); + if (rv < 0) { +@@ -3781,25 +3780,25 @@ int main(int argc, char** argv) { + if (sock_stat.st_mode & (S_IWUSR | S_IWGRP)) + unlink(addr.sun_path); + } else { +- assert(errno == ENOENT); ++ errno_assert(errno == ENOENT); + } + + sock_fd = socket(PF_LOCAL, SOCK_STREAM, 0); +- assert(sock_fd >= 0); ++ errno_assert(sock_fd >= 0); + + rv = bind(sock_fd, (struct sockaddr*)&addr, + offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path)); +- assert(rv >= 0); ++ errno_assert(rv >= 0); + + rv = listen(sock_fd, 128); +- assert(rv >= 0); ++ errno_assert(rv >= 0); + + // Spawn optional child process before we notify systemd that we're ready + // to accept connections. WAYLAND_DISPLAY will be set but any attempt to + // connect to this socket at this time will fail. + if (ctx.runprog && ctx.runprog[0]) { + pid = fork(); +- assert(pid != -1); ++ errno_assert(pid != -1); + if (pid == 0) { + setenv("WAYLAND_DISPLAY", socket_name, 1); + sl_execvp(ctx.runprog[0], ctx.runprog, -1); +@@ -3816,7 +3815,7 @@ int main(int argc, char** argv) { + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + rv = sigaction(SIGCHLD, &sa, NULL); +- assert(rv >= 0); ++ errno_assert(rv >= 0); + + do { + struct ucred ucred; +@@ -3833,7 +3832,7 @@ int main(int argc, char** argv) { + rv = getsockopt(client_fd, SOL_SOCKET, SO_PEERCRED, &ucred, &length); + + pid = fork(); +- assert(pid != -1); ++ errno_assert(pid != -1); + if (pid == 0) { + char* client_fd_str; + char* peer_pid_str; +@@ -3963,7 +3962,7 @@ int main(int argc, char** argv) { + + // Connection to virtwl channel. + rv = socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, vws); +- assert(!rv); ++ errno_assert(!rv); + + ctx.virtwl_socket_fd = vws[0]; + virtwl_display_fd = vws[1]; +@@ -4083,7 +4082,7 @@ int main(int argc, char** argv) { + if (ctx.runprog || ctx.xwayland) { + // Wayland connection from client. + rv = socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sv); +- assert(!rv); ++ errno_assert(!rv); + + client_fd = sv[0]; + } +@@ -4199,7 +4198,7 @@ int main(int argc, char** argv) { + + // Xwayland display ready socket. + rv = socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, ds); +- assert(!rv); ++ errno_assert(!rv); + + ctx.display_ready_event_source = + wl_event_loop_add_fd(event_loop, ds[0], WL_EVENT_READABLE, +@@ -4207,12 +4206,12 @@ int main(int argc, char** argv) { + + // X connection to Xwayland. + rv = socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, wm); +- assert(!rv); ++ errno_assert(!rv); + + ctx.wm_fd = wm[0]; + + pid = fork(); +- assert(pid != -1); ++ errno_assert(pid != -1); + if (pid == 0) { + char* display_fd_str; + char* wm_fd_str; +@@ -4280,7 +4279,7 @@ int main(int argc, char** argv) { + ctx.xwayland_pid = pid; + } else { + pid = fork(); +- assert(pid != -1); ++ errno_assert(pid != -1); + if (pid == 0) { + sl_execvp(ctx.runprog[0], ctx.runprog, sv[1]); + _exit(EXIT_FAILURE); +-- +2.26.2 + diff --git a/pkgs/os-specific/linux/chromium-os/sommelier/default.nix b/pkgs/os-specific/linux/chromium-os/sommelier/default.nix index 669bac81628..da2a554837b 100644 --- a/pkgs/os-specific/linux/chromium-os/sommelier/default.nix +++ b/pkgs/os-specific/linux/chromium-os/sommelier/default.nix @@ -10,6 +10,7 @@ common-mk { ./0004-sommelier-don-t-leak-source-absolute-paths.patch ./0005-sommelier-use-stable-xdg-shell-protocol.patch ./0006-sommelier-make-building-demos-optional.patch + ./0007-vm_tools-sommelier-Log-the-value-of-strerror-when-as.patch ]; buildInputs = [ |