xref: /aosp_15_r20/external/crosvm/tests/vfs_crypto.c (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker #ifndef _GNU_SOURCE
6*bb4ee6a4SAndroid Build Coastguard Worker #define _GNU_SOURCE
7*bb4ee6a4SAndroid Build Coastguard Worker #endif
8*bb4ee6a4SAndroid Build Coastguard Worker 
9*bb4ee6a4SAndroid Build Coastguard Worker #include <errno.h>
10*bb4ee6a4SAndroid Build Coastguard Worker #include <fcntl.h>
11*bb4ee6a4SAndroid Build Coastguard Worker #include <linux/fs.h>
12*bb4ee6a4SAndroid Build Coastguard Worker #include <stdio.h>
13*bb4ee6a4SAndroid Build Coastguard Worker #include <sys/stat.h>
14*bb4ee6a4SAndroid Build Coastguard Worker #include <sys/types.h>
15*bb4ee6a4SAndroid Build Coastguard Worker #include <sys/ioctl.h>
16*bb4ee6a4SAndroid Build Coastguard Worker #include <unistd.h>
17*bb4ee6a4SAndroid Build Coastguard Worker 
18*bb4ee6a4SAndroid Build Coastguard Worker extern char* program_invocation_short_name;
19*bb4ee6a4SAndroid Build Coastguard Worker 
main(int argc,char ** argv)20*bb4ee6a4SAndroid Build Coastguard Worker int main(int argc, char** argv) {
21*bb4ee6a4SAndroid Build Coastguard Worker   if (argc != 2) {
22*bb4ee6a4SAndroid Build Coastguard Worker     printf("Usage: %s <path_to_directory>\n", program_invocation_short_name);
23*bb4ee6a4SAndroid Build Coastguard Worker     return 1;
24*bb4ee6a4SAndroid Build Coastguard Worker   }
25*bb4ee6a4SAndroid Build Coastguard Worker 
26*bb4ee6a4SAndroid Build Coastguard Worker   int dir = open(argv[1], O_DIRECTORY | O_CLOEXEC);
27*bb4ee6a4SAndroid Build Coastguard Worker   if (dir < 0) {
28*bb4ee6a4SAndroid Build Coastguard Worker     perror("Failed to open directory");
29*bb4ee6a4SAndroid Build Coastguard Worker     return 1;
30*bb4ee6a4SAndroid Build Coastguard Worker   }
31*bb4ee6a4SAndroid Build Coastguard Worker 
32*bb4ee6a4SAndroid Build Coastguard Worker   struct fscrypt_policy policy;
33*bb4ee6a4SAndroid Build Coastguard Worker   int ret = ioctl(dir, FS_IOC_GET_ENCRYPTION_POLICY, &policy);
34*bb4ee6a4SAndroid Build Coastguard Worker   if (ret < 0) {
35*bb4ee6a4SAndroid Build Coastguard Worker     perror("FS_IOC_GET_ENCRYPTION_POLICY failed");
36*bb4ee6a4SAndroid Build Coastguard Worker     return 1;
37*bb4ee6a4SAndroid Build Coastguard Worker   }
38*bb4ee6a4SAndroid Build Coastguard Worker 
39*bb4ee6a4SAndroid Build Coastguard Worker   printf("File system encryption policy:\n");
40*bb4ee6a4SAndroid Build Coastguard Worker   printf("\tversion = %#x\n", policy.version);
41*bb4ee6a4SAndroid Build Coastguard Worker   printf("\tcontents_encryption_mode = %#x\n", policy.contents_encryption_mode);
42*bb4ee6a4SAndroid Build Coastguard Worker   printf("\tfilenames_encryption_mode = %#x\n",
43*bb4ee6a4SAndroid Build Coastguard Worker          policy.filenames_encryption_mode);
44*bb4ee6a4SAndroid Build Coastguard Worker   printf("\tflags = %#x\n", policy.flags);
45*bb4ee6a4SAndroid Build Coastguard Worker   printf("\tmaster_key_descriptor = 0x");
46*bb4ee6a4SAndroid Build Coastguard Worker   for (int i = 0; i < FS_KEY_DESCRIPTOR_SIZE; ++i) {
47*bb4ee6a4SAndroid Build Coastguard Worker     printf("%x", policy.master_key_descriptor[i]);
48*bb4ee6a4SAndroid Build Coastguard Worker   }
49*bb4ee6a4SAndroid Build Coastguard Worker   printf("\n");
50*bb4ee6a4SAndroid Build Coastguard Worker 
51*bb4ee6a4SAndroid Build Coastguard Worker   ret = ioctl(dir, FS_IOC_SET_ENCRYPTION_POLICY, &policy);
52*bb4ee6a4SAndroid Build Coastguard Worker   if (ret < 0) {
53*bb4ee6a4SAndroid Build Coastguard Worker     perror("FS_IOC_SET_ENCRYPTION_POLICY failed");
54*bb4ee6a4SAndroid Build Coastguard Worker     return 1;
55*bb4ee6a4SAndroid Build Coastguard Worker   }
56*bb4ee6a4SAndroid Build Coastguard Worker 
57*bb4ee6a4SAndroid Build Coastguard Worker   return 0;
58*bb4ee6a4SAndroid Build Coastguard Worker }
59