devices/virtio/fs/
arc_ioctl.rs

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
7use zerocopy::FromBytes;
8use zerocopy::Immutable;
9use zerocopy::IntoBytes;
10use zerocopy::KnownLayout;
11
12pub const FS_IOCTL_PATH_MAX_LEN: usize = 128;
13pub const FS_IOCTL_XATTR_NAME_MAX_LEN: usize = 128;
14pub const FS_IOCTL_XATTR_VALUE_MAX_LEN: usize = 128;
15
16#[repr(C)]
17#[derive(Clone, Copy, FromBytes, Immutable, IntoBytes, KnownLayout)]
18pub(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)]
29pub(crate) struct XattrData {
30    pub xattr_name: String,
31    pub xattr_value: String,
32    pub xattr_path: String,
33}
34
35impl 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)]
42pub(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}