summary refs log tree commit diff
path: root/pkgs/os-specific/linux/chromium-os
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/os-specific/linux/chromium-os')
-rw-r--r--pkgs/os-specific/linux/chromium-os/common-mk/0001-common-mk-don-t-leak-source-absolute-paths.patch4
-rw-r--r--pkgs/os-specific/linux/chromium-os/common-mk/0002-common-mk-.gn-don-t-hardcode-env-path.patch4
-rw-r--r--pkgs/os-specific/linux/chromium-os/common-mk/0003-Revert-common-mk-Suppress-Wrange-loop-analysis-warni.patch4
-rw-r--r--pkgs/os-specific/linux/chromium-os/sommelier/0004-sommelier-don-t-leak-source-absolute-paths.patch4
-rw-r--r--pkgs/os-specific/linux/chromium-os/sommelier/0005-sommelier-use-stable-xdg-shell-protocol.patch4
-rw-r--r--pkgs/os-specific/linux/chromium-os/sommelier/0006-sommelier-make-building-demos-optional.patch4
-rw-r--r--pkgs/os-specific/linux/chromium-os/sommelier/0007-vm_tools-sommelier-Log-the-value-of-strerror-when-as.patch245
-rw-r--r--pkgs/os-specific/linux/chromium-os/sommelier/default.nix1
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 = [