Merge "Reland "shipping level 31, target-level 6""
diff --git a/common/frontend/socket_vsock_proxy/main.cpp b/common/frontend/socket_vsock_proxy/main.cpp
index ee781ff..2eebc7f 100644
--- a/common/frontend/socket_vsock_proxy/main.cpp
+++ b/common/frontend/socket_vsock_proxy/main.cpp
@@ -49,15 +49,15 @@
}
}
- ssize_t SendAll(const std::vector<char>& packet) {
+ ssize_t SendAll(const char* packet, ssize_t length) {
ssize_t written{};
- while (written < static_cast<ssize_t>(packet.size())) {
+ while (written < length) {
if (!socket_->IsOpen()) {
return -1;
}
auto just_written =
- socket_->Send(packet.data() + written,
- packet.size() - written, MSG_NOSIGNAL);
+ socket_->Send(packet + written,
+ length - written, MSG_NOSIGNAL);
if (just_written <= 0) {
LOG(INFO) << "Couldn't write to client: "
<< strerror(socket_->GetErrno());
@@ -82,13 +82,14 @@
SocketReceiver(const SocketReceiver&&) = delete;
SocketReceiver& operator=(const SocketReceiver&) = delete;
- // *packet will be empty if Read returns 0 or error
- void Recv(std::vector<char>* packet) {
- auto size = socket_->Read(packet->data(), packet->size());
+ // return value will be 0 if Read returns 0 or error
+ ssize_t Recv(char* packet, ssize_t length) {
+ auto size = socket_->Read(packet, length);
if (size < 0) {
size = 0;
}
- packet->resize(size);
+
+ return size;
}
private:
@@ -97,10 +98,11 @@
void SocketToVsock(SocketReceiver socket_receiver,
SocketSender vsock_sender) {
+ char packet[kMaxPacketSize] = {};
+
while (true) {
- std::vector<char> packet(kMaxPacketSize, '\0');
- socket_receiver.Recv(&packet);
- if (packet.empty() || vsock_sender.SendAll(packet) < 0) {
+ ssize_t length = socket_receiver.Recv(packet, kMaxPacketSize);
+ if (length == 0 || vsock_sender.SendAll(packet, length) < 0) {
break;
}
}
@@ -109,13 +111,14 @@
void VsockToSocket(SocketSender socket_sender,
SocketReceiver vsock_receiver) {
- std::vector<char> packet(kMaxPacketSize, '\0');
+ char packet[kMaxPacketSize] = {};
+
while (true) {
- vsock_receiver.Recv(&packet);
- if (packet.empty()) {
+ ssize_t length = vsock_receiver.Recv(packet, kMaxPacketSize);
+ if (length == 0) {
break;
}
- if (socket_sender.SendAll(packet) < 0) {
+ if (socket_sender.SendAll(packet, length) < 0) {
break;
}
}
diff --git a/shared/sepolicy/vendor/file_contexts b/shared/sepolicy/vendor/file_contexts
index 0256dc9..d209c85 100644
--- a/shared/sepolicy/vendor/file_contexts
+++ b/shared/sepolicy/vendor/file_contexts
@@ -2,13 +2,20 @@
# Devices
#
-# crosvm block devices
+# crosvm (x86) block devices
/dev/block/pci/pci0000:00/0000:00:01\.0/by-name/boot u:object_r:boot_block_device:s0
/dev/block/pci/pci0000:00/0000:00:01\.0/by-name/metadata u:object_r:metadata_block_device:s0
/dev/block/pci/pci0000:00/0000:00:01\.0/by-name/misc u:object_r:misc_block_device:s0
/dev/block/pci/pci0000:00/0000:00:01\.0/by-name/super u:object_r:super_block_device:s0
/dev/block/pci/pci0000:00/0000:00:01\.0/by-name/userdata u:object_r:userdata_block_device:s0
/dev/block/pci/pci0000:00/0000:00:01\.0/by-name/cache u:object_r:cache_block_device:s0
+# crosvm (arm64) block devices
+/dev/block/platform/10000.pci/by-name/boot u:object_r:boot_block_device:s0
+/dev/block/platform/10000.pci/by-name/metadata u:object_r:metadata_block_device:s0
+/dev/block/platform/10000.pci/by-name/misc u:object_r:misc_block_device:s0
+/dev/block/platform/10000.pci/by-name/super u:object_r:super_block_device:s0
+/dev/block/platform/10000.pci/by-name/userdata u:object_r:userdata_block_device:s0
+/dev/block/platform/10000.pci/by-name/cache u:object_r:cache_block_device:s0
# qemu block devices
/dev/block/pci/pci0000:00/0000:00:03\.0/by-name/boot u:object_r:boot_block_device:s0
/dev/block/pci/pci0000:00/0000:00:03\.0/by-name/metadata u:object_r:metadata_block_device:s0
diff --git a/shared/sepolicy/vendor/genfs_contexts b/shared/sepolicy/vendor/genfs_contexts
index 36a5a07..5ac5257 100644
--- a/shared/sepolicy/vendor/genfs_contexts
+++ b/shared/sepolicy/vendor/genfs_contexts
@@ -1,19 +1,30 @@
-genfscon sysfs /bus/iio/devices u:object_r:sysfs_iio_devices:s0
-genfscon sysfs /devices/pnp0/00:00/rtc u:object_r:sysfs_rtc:s0 # qemu x86 virtual rtc
-genfscon sysfs /devices/platform/2000.rtc/rtc u:object_r:sysfs_rtc:s0 # crosvm arm64 virtual rtc
-genfscon sysfs /devices/platform/rtc-test.0/rtc/rtc0/hctosys u:object_r:sysfs_rtc:s0
-genfscon sysfs /devices/platform/rtc-test.1/rtc/rtc1/hctosys u:object_r:sysfs_rtc:s0
-genfscon sysfs /devices/platform/rtc-test.2/rtc/rtc2/hctosys u:object_r:sysfs_rtc:s0
-genfscon sysfs /devices/pci0000:00/0000:00:04.0/virtio2/net u:object_r:sysfs_net:s0 # qemu buried_eth0 & wlan0
-genfscon sysfs /devices/pci0000:00/0000:00:05.0/virtio3/net u:object_r:sysfs_net:s0 # qemu rmnet0
-genfscon sysfs /devices/pci0000:00/0000:00:07.0/virtio6/net u:object_r:sysfs_net:s0 # crosvm buried_eth0 & wlan0
-genfscon sysfs /devices/pci0000:00/0000:00:08.0/virtio7/net u:object_r:sysfs_net:s0 # crosvm rmnet0
+# crosvm (x86)
+genfscon sysfs /devices/pci0000:00/0000:00:07.0/virtio6/net u:object_r:sysfs_net:s0 # buried_eth0 & wlan0
+genfscon sysfs /devices/pci0000:00/0000:00:08.0/virtio7/net u:object_r:sysfs_net:s0 # rmnet0
genfscon sysfs /devices/pci0000:00/0000:00:0a.0/device u:object_r:sysfs_gpu:s0
genfscon sysfs /devices/pci0000:00/0000:00:0a.0/subsystem_device u:object_r:sysfs_gpu:s0
genfscon sysfs /devices/pci0000:00/0000:00:0a.0/subsystem_vendor u:object_r:sysfs_gpu:s0
genfscon sysfs /devices/pci0000:00/0000:00:0a.0/uevent u:object_r:sysfs_gpu:s0
genfscon sysfs /devices/pci0000:00/0000:00:0a.0/vendor u:object_r:sysfs_gpu:s0
+genfscon sysfs /devices/pnp0/00:00/rtc u:object_r:sysfs_rtc:s0 # also used by qemu
+# crosvm (arm64)
+genfscon sysfs /devices/platform/10000.pci/pci0000:00/0000:00:07.0/virtio6/net u:object_r:sysfs_net:s0 # buried_eth0 & wlan0
+genfscon sysfs /devices/platform/10000.pci/pci0000:00/0000:00:08.0/virtio7/net u:object_r:sysfs_net:s0 # rmnet0
+genfscon sysfs /devices/platform/10000.pci/pci0000:00/0000:00:0a.0/device u:object_r:sysfs_gpu:s0
+genfscon sysfs /devices/platform/10000.pci/pci0000:00/0000:00:0a.0/subsystem_device u:object_r:sysfs_gpu:s0
+genfscon sysfs /devices/platform/10000.pci/pci0000:00/0000:00:0a.0/subsystem_vendor u:object_r:sysfs_gpu:s0
+genfscon sysfs /devices/platform/10000.pci/pci0000:00/0000:00:0a.0/uevent u:object_r:sysfs_gpu:s0
+genfscon sysfs /devices/platform/10000.pci/pci0000:00/0000:00:0a.0/vendor u:object_r:sysfs_gpu:s0
+genfscon sysfs /devices/platform/2000.rtc/rtc u:object_r:sysfs_rtc:s0
+# qemu (x86)
+genfscon sysfs /devices/pci0000:00/0000:00:04.0/virtio2/net u:object_r:sysfs_net:s0 # buried_eth0 & wlan0
+genfscon sysfs /devices/pci0000:00/0000:00:05.0/virtio3/net u:object_r:sysfs_net:s0 # rmnet0
+# common on all platforms / vm managers
+genfscon sysfs /bus/iio/devices u:object_r:sysfs_iio_devices:s0
+genfscon sysfs /devices/platform/rtc-test.0/rtc/rtc0/hctosys u:object_r:sysfs_rtc:s0
+genfscon sysfs /devices/platform/rtc-test.1/rtc/rtc1/hctosys u:object_r:sysfs_rtc:s0
+genfscon sysfs /devices/platform/rtc-test.2/rtc/rtc2/hctosys u:object_r:sysfs_rtc:s0
# TODO(b/148802006): Work around core policy sysfs_wakeup label not working
# All kernels
genfscon sysfs /devices/platform/rtc-test.1/wakeup/wakeup0 u:object_r:sysfs_wakeup:s0