Commit | Line | Data |
---|---|---|
929be906 | 1 | /* SPDX-License-Identifier: LGPL-2.1 */ |
0de1f4c6 | 2 | /* |
0de1f4c6 SF |
3 | * |
4 | * Structure definitions for io control for cifs/smb3 | |
5 | * | |
6 | * Copyright (c) 2015 Steve French <steve.french@primarydata.com> | |
7 | * | |
0de1f4c6 SF |
8 | */ |
9 | ||
10 | struct smb_mnt_fs_info { | |
11 | __u32 version; /* 0001 */ | |
12 | __u16 protocol_id; | |
13 | __u16 tcon_flags; | |
14 | __u32 vol_serial_number; | |
15 | __u32 vol_create_time; | |
16 | __u32 share_caps; | |
17 | __u32 share_flags; | |
18 | __u32 sector_flags; | |
19 | __u32 optimal_sector_size; | |
20 | __u32 max_bytes_chunk; | |
21 | __u32 fs_attributes; | |
22 | __u32 max_path_component; | |
23 | __u32 device_type; | |
24 | __u32 device_characteristics; | |
25 | __u32 maximal_access; | |
26 | __u64 cifs_posix_caps; | |
27 | } __packed; | |
28 | ||
834170c8 SF |
29 | struct smb_snapshot_array { |
30 | __u32 number_of_snapshots; | |
31 | __u32 number_of_snapshots_returned; | |
32 | __u32 snapshot_array_size; | |
33 | /* snapshots[]; */ | |
34 | } __packed; | |
35 | ||
31ba4331 SF |
36 | /* query_info flags */ |
37 | #define PASSTHRU_QUERY_INFO 0x00000000 | |
38 | #define PASSTHRU_FSCTL 0x00000001 | |
0e90696d | 39 | #define PASSTHRU_SET_INFO 0x00000002 |
f5b05d62 RS |
40 | struct smb_query_info { |
41 | __u32 info_type; | |
42 | __u32 file_info_class; | |
43 | __u32 additional_information; | |
44 | __u32 flags; | |
45 | __u32 input_buffer_length; | |
46 | __u32 output_buffer_length; | |
47 | /* char buffer[]; */ | |
48 | } __packed; | |
49 | ||
aa22ebc3 SF |
50 | /* |
51 | * Dumping the commonly used 16 byte (e.g. CCM and GCM128) keys still supported | |
52 | * for backlevel compatibility, but is not sufficient for dumping the less | |
53 | * frequently used GCM256 (32 byte) keys (see the newer "CIFS_DUMP_FULL_KEY" | |
54 | * ioctl for dumping decryption info for GCM256 mounts) | |
55 | */ | |
7e7db86c SF |
56 | struct smb3_key_debug_info { |
57 | __u64 Suid; | |
58 | __u16 cipher_type; | |
59 | __u8 auth_key[16]; /* SMB2_NTLMV2_SESSKEY_SIZE */ | |
60 | __u8 smb3encryptionkey[SMB3_SIGN_KEY_SIZE]; | |
61 | __u8 smb3decryptionkey[SMB3_SIGN_KEY_SIZE]; | |
62 | } __packed; | |
63 | ||
aa22ebc3 | 64 | /* |
1bb56810 | 65 | * Dump variable-sized keys |
aa22ebc3 SF |
66 | */ |
67 | struct smb3_full_key_debug_info { | |
1bb56810 AA |
68 | /* INPUT: size of userspace buffer */ |
69 | __u32 in_size; | |
70 | ||
71 | /* | |
72 | * INPUT: 0 for current user, otherwise session to dump | |
73 | * OUTPUT: session id that was dumped | |
74 | */ | |
75 | __u64 session_id; | |
aa22ebc3 | 76 | __u16 cipher_type; |
1bb56810 AA |
77 | __u8 session_key_length; |
78 | __u8 server_in_key_length; | |
79 | __u8 server_out_key_length; | |
80 | __u8 data[]; | |
81 | /* | |
82 | * return this struct with the keys appended at the end: | |
83 | * __u8 session_key[session_key_length]; | |
84 | * __u8 server_in_key[server_in_key_length]; | |
85 | * __u8 server_out_key[server_out_key_length]; | |
86 | */ | |
aa22ebc3 SF |
87 | } __packed; |
88 | ||
d26c2ddd SF |
89 | struct smb3_notify { |
90 | __u32 completion_filter; | |
91 | bool watch_tree; | |
92 | } __packed; | |
93 | ||
0de1f4c6 SF |
94 | #define CIFS_IOCTL_MAGIC 0xCF |
95 | #define CIFS_IOC_COPYCHUNK_FILE _IOW(CIFS_IOCTL_MAGIC, 3, int) | |
96 | #define CIFS_IOC_SET_INTEGRITY _IO(CIFS_IOCTL_MAGIC, 4) | |
97 | #define CIFS_IOC_GET_MNT_INFO _IOR(CIFS_IOCTL_MAGIC, 5, struct smb_mnt_fs_info) | |
834170c8 | 98 | #define CIFS_ENUMERATE_SNAPSHOTS _IOR(CIFS_IOCTL_MAGIC, 6, struct smb_snapshot_array) |
f5b05d62 | 99 | #define CIFS_QUERY_INFO _IOWR(CIFS_IOCTL_MAGIC, 7, struct smb_query_info) |
7e7db86c | 100 | #define CIFS_DUMP_KEY _IOWR(CIFS_IOCTL_MAGIC, 8, struct smb3_key_debug_info) |
d26c2ddd | 101 | #define CIFS_IOC_NOTIFY _IOW(CIFS_IOCTL_MAGIC, 9, struct smb3_notify) |
aa22ebc3 | 102 | #define CIFS_DUMP_FULL_KEY _IOWR(CIFS_IOCTL_MAGIC, 10, struct smb3_full_key_debug_info) |
087f757b SF |
103 | #define CIFS_IOC_SHUTDOWN _IOR ('X', 125, __u32) |
104 | ||
105 | /* | |
106 | * Flags for going down operation | |
107 | */ | |
108 | #define CIFS_GOING_FLAGS_DEFAULT 0x0 /* going down */ | |
109 | #define CIFS_GOING_FLAGS_LOGFLUSH 0x1 /* flush log but not data */ | |
110 | #define CIFS_GOING_FLAGS_NOLOGFLUSH 0x2 /* don't flush log nor data */ | |
111 | ||
112 | static inline bool cifs_forced_shutdown(struct cifs_sb_info *sbi) | |
113 | { | |
114 | if (CIFS_MOUNT_SHUTDOWN & sbi->mnt_cifs_flags) | |
115 | return true; | |
116 | else | |
117 | return false; | |
118 | } |