Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
google
GitHub Repository: google/crosvm
Path: blob/main/devices/src/virtio/fs/arc_ioctl.rs
5394 views
1
// Copyright 2024 The ChromiumOS Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
//! Data structures and logic for virtio-fs IOCTLs specific to ARCVM.
6
7
use zerocopy::FromBytes;
8
use zerocopy::Immutable;
9
use zerocopy::IntoBytes;
10
use zerocopy::KnownLayout;
11
12
pub const FS_IOCTL_PATH_MAX_LEN: usize = 128;
13
pub const FS_IOCTL_XATTR_NAME_MAX_LEN: usize = 128;
14
pub const FS_IOCTL_XATTR_VALUE_MAX_LEN: usize = 128;
15
16
#[repr(C)]
17
#[derive(Clone, Copy, FromBytes, Immutable, IntoBytes, KnownLayout)]
18
pub(crate) struct FsPermissionDataBuffer {
19
pub guest_uid: u32,
20
pub guest_gid: u32,
21
pub host_uid: u32,
22
pub host_gid: u32,
23
pub umask: u32,
24
pub pad: u32,
25
pub perm_path: [u8; FS_IOCTL_PATH_MAX_LEN],
26
}
27
28
#[derive(Debug, Clone, PartialEq)]
29
pub(crate) struct XattrData {
30
pub xattr_name: String,
31
pub xattr_value: String,
32
pub xattr_path: String,
33
}
34
35
impl XattrData {
36
pub(crate) fn need_set_guest_xattr(&self, path: &str, name: &str) -> bool {
37
path.starts_with(&self.xattr_path) && (name == self.xattr_name)
38
}
39
}
40
#[repr(C)]
41
#[derive(Clone, Copy, FromBytes, Immutable, IntoBytes, KnownLayout)]
42
pub(crate) struct FsPathXattrDataBuffer {
43
pub path: [u8; FS_IOCTL_PATH_MAX_LEN],
44
pub xattr_name: [u8; FS_IOCTL_XATTR_NAME_MAX_LEN],
45
pub xattr_value: [u8; FS_IOCTL_XATTR_VALUE_MAX_LEN],
46
}
47
48