linux/fs/cifs/cifs_ioctl.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: LGPL-2.1 */
   2/*
   3 *
   4 *   Structure definitions for io control for cifs/smb3
   5 *
   6 *   Copyright (c) 2015 Steve French <steve.french@primarydata.com>
   7 *
   8 */
   9
  10struct 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
  29struct smb_snapshot_array {
  30        __u32   number_of_snapshots;
  31        __u32   number_of_snapshots_returned;
  32        __u32   snapshot_array_size;
  33        /*      snapshots[]; */
  34} __packed;
  35
  36/* query_info flags */
  37#define PASSTHRU_QUERY_INFO     0x00000000
  38#define PASSTHRU_FSCTL          0x00000001
  39#define PASSTHRU_SET_INFO       0x00000002
  40struct 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
  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 */
  56struct 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
  64/*
  65 * Dump variable-sized keys
  66 */
  67struct smb3_full_key_debug_info {
  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;
  76        __u16   cipher_type;
  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         */
  87} __packed;
  88
  89struct smb3_notify {
  90        __u32   completion_filter;
  91        bool    watch_tree;
  92} __packed;
  93
  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)
  98#define CIFS_ENUMERATE_SNAPSHOTS _IOR(CIFS_IOCTL_MAGIC, 6, struct smb_snapshot_array)
  99#define CIFS_QUERY_INFO _IOWR(CIFS_IOCTL_MAGIC, 7, struct smb_query_info)
 100#define CIFS_DUMP_KEY _IOWR(CIFS_IOCTL_MAGIC, 8, struct smb3_key_debug_info)
 101#define CIFS_IOC_NOTIFY _IOW(CIFS_IOCTL_MAGIC, 9, struct smb3_notify)
 102#define CIFS_DUMP_FULL_KEY _IOWR(CIFS_IOCTL_MAGIC, 10, struct smb3_full_key_debug_info)
 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
 112static 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}
 119