crosvm: bind mount all wayland socket directories (take 3)

In 781d975d0b ("Revert "Revert "rutabaga_gfx: cross-domain: a
new year's miracle in February""), we went back to just bind mount
the wayland socket instead of all the sockets.

The logs indicated a weird interaction between the camera socket
and the Mali driver.

This is incorrect, and I would like to this opportunity to apologize
to the camera team for this outrageous slander.  I'm sorry.  Please
forgive me.  I hope we can put this behind us.

In the end, we were just mounting the wrong directories.

BUG=b:150239451, b:173630595
TEST=arc.Boot.vm

Change-Id: I5e5d5afba074c3aaed79df058558a295d03732f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2906128
Auto-Submit: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
This commit is contained in:
Gurchetan Singh 2021-05-19 15:05:56 -07:00 committed by Commit Bot
parent 584fc8944d
commit 1bbbf1cad3

View file

@ -864,21 +864,22 @@ fn create_gpu_device(
map_request: Arc<Mutex<Option<ExternalMapping>>>,
mem: &GuestMemory,
) -> DeviceResult {
let jailed_wayland_path = Path::new("/wayland-0");
let mut display_backends = vec![
virtio::DisplayBackend::X(x_display),
virtio::DisplayBackend::Stub,
];
let wayland_socket_dirs = cfg
.wayland_socket_paths
.iter()
.map(|(_name, path)| path.parent())
.collect::<Option<Vec<_>>>()
.ok_or(Error::InvalidWaylandPath)?;
if let Some(socket_path) = wayland_socket_path {
display_backends.insert(
0,
virtio::DisplayBackend::Wayland(if cfg.sandbox {
Some(jailed_wayland_path.to_owned())
} else {
Some(socket_path.to_owned())
}),
virtio::DisplayBackend::Wayland(Some(socket_path.to_owned())),
);
}
@ -976,13 +977,12 @@ fn create_gpu_device(
}
}
// Bind mount the wayland socket into jail's root. This is necessary since each
// new wayland context must open() the socket. Don't bind mount the camera socket
// since it seems to cause problems on ARCVM (b/180126126) + Mali. It's unclear if
// camera team will opt for virtio-camera or continue using virtio-wl, so this should
// be fine for now.
if let Some(path) = wayland_socket_path {
jail.mount_bind(path, jailed_wayland_path, true)?;
// Bind mount the wayland socket's directory into jail's root. This is necessary since
// each new wayland context must open() the socket. If the wayland socket is ever
// destroyed and remade in the same host directory, new connections will be possible
// without restarting the wayland device.
for dir in &wayland_socket_dirs {
jail.mount_bind(dir, dir, true)?;
}
add_crosvm_user_to_jail(&mut jail, "gpu")?;