0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef _CIFS_GLOB_H
0010 #define _CIFS_GLOB_H
0011
0012 #include <linux/in.h>
0013 #include <linux/in6.h>
0014 #include <linux/inet.h>
0015 #include <linux/slab.h>
0016 #include <linux/mempool.h>
0017 #include <linux/workqueue.h>
0018 #include <linux/utsname.h>
0019 #include <linux/sched/mm.h>
0020 #include <linux/netfs.h>
0021 #include "cifs_fs_sb.h"
0022 #include "cifsacl.h"
0023 #include <crypto/internal/hash.h>
0024 #include <linux/scatterlist.h>
0025 #include <uapi/linux/cifs/cifs_mount.h>
0026 #include "../smbfs_common/smb2pdu.h"
0027 #include "smb2pdu.h"
0028
0029 #define SMB_PATH_MAX 260
0030 #define CIFS_PORT 445
0031 #define RFC1001_PORT 139
0032
0033
0034
0035
0036 #define MAX_UID_INFO 16
0037 #define MAX_SES_INFO 2
0038 #define MAX_TCON_INFO 4
0039
0040 #define MAX_TREE_SIZE (2 + CIFS_NI_MAXHOST + 1 + CIFS_MAX_SHARE_LEN + 1)
0041
0042 #define CIFS_MIN_RCV_POOL 4
0043
0044 #define MAX_REOPEN_ATT 5
0045
0046
0047
0048 #define CIFS_DEF_ACTIMEO (1 * HZ)
0049
0050
0051
0052
0053 #define CIFS_MAX_ACTIMEO (1 << 30)
0054
0055
0056
0057
0058
0059 #define SMB3_MAX_HANDLE_TIMEOUT 960000
0060
0061
0062
0063
0064
0065 #define CIFS_MAX_REQ 32767
0066
0067 #define RFC1001_NAME_LEN 15
0068 #define RFC1001_NAME_LEN_WITH_NULL (RFC1001_NAME_LEN + 1)
0069
0070
0071 #define SERVER_NAME_LENGTH 80
0072 #define SERVER_NAME_LEN_WITH_NULL (SERVER_NAME_LENGTH + 1)
0073
0074
0075 #define SMB_ECHO_INTERVAL_MIN 1
0076 #define SMB_ECHO_INTERVAL_MAX 600
0077 #define SMB_ECHO_INTERVAL_DEFAULT 60
0078
0079
0080 #define SMB_DNS_RESOLVE_INTERVAL_MIN 120
0081 #define SMB_DNS_RESOLVE_INTERVAL_DEFAULT 600
0082
0083
0084 #define SMB_INTERFACE_POLL_INTERVAL 600
0085
0086
0087 #define MAX_COMPOUND 5
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099 #define SMB2_MAX_CREDITS_AVAILABLE 32000
0100
0101 #include "cifspdu.h"
0102
0103 #ifndef XATTR_DOS_ATTRIB
0104 #define XATTR_DOS_ATTRIB "user.DOSATTRIB"
0105 #endif
0106
0107 #define CIFS_MAX_WORKSTATION_LEN (__NEW_UTS_LEN + 1)
0108
0109
0110
0111
0112
0113
0114 enum statusEnum {
0115 CifsNew = 0,
0116 CifsGood,
0117 CifsExiting,
0118 CifsNeedReconnect,
0119 CifsNeedNegotiate,
0120 CifsInNegotiate,
0121 };
0122
0123
0124 enum ses_status_enum {
0125 SES_NEW = 0,
0126 SES_GOOD,
0127 SES_EXITING,
0128 SES_NEED_RECON,
0129 SES_IN_SETUP
0130 };
0131
0132
0133 enum tid_status_enum {
0134 TID_NEW = 0,
0135 TID_GOOD,
0136 TID_EXITING,
0137 TID_NEED_RECON,
0138 TID_NEED_TCON,
0139 TID_IN_TCON,
0140 TID_NEED_FILES_INVALIDATE,
0141 TID_IN_FILES_INVALIDATE
0142 };
0143
0144 enum securityEnum {
0145 Unspecified = 0,
0146 NTLMv2,
0147 RawNTLMSSP,
0148 Kerberos,
0149 };
0150
0151 struct session_key {
0152 unsigned int len;
0153 char *response;
0154 };
0155
0156
0157 struct sdesc {
0158 struct shash_desc shash;
0159 char ctx[];
0160 };
0161
0162
0163 struct cifs_secmech {
0164 struct crypto_shash *hmacmd5;
0165 struct crypto_shash *md5;
0166 struct crypto_shash *hmacsha256;
0167 struct crypto_shash *cmacaes;
0168 struct crypto_shash *sha512;
0169 struct sdesc *sdeschmacmd5;
0170 struct sdesc *sdescmd5;
0171 struct sdesc *sdeschmacsha256;
0172 struct sdesc *sdesccmacaes;
0173 struct sdesc *sdescsha512;
0174 struct crypto_aead *ccmaesencrypt;
0175 struct crypto_aead *ccmaesdecrypt;
0176 };
0177
0178
0179 struct ntlmssp_auth {
0180 bool sesskey_per_smbsess;
0181 __u32 client_flags;
0182 __u32 server_flags;
0183 unsigned char ciphertext[CIFS_CPHTXT_SIZE];
0184 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
0185 };
0186
0187 struct cifs_cred {
0188 int uid;
0189 int gid;
0190 int mode;
0191 int cecount;
0192 struct cifs_sid osid;
0193 struct cifs_sid gsid;
0194 struct cifs_ntace *ntaces;
0195 struct cifs_ace *aces;
0196 };
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210 struct smb_rqst {
0211 struct kvec *rq_iov;
0212 unsigned int rq_nvec;
0213 struct page **rq_pages;
0214 unsigned int rq_offset;
0215 unsigned int rq_npages;
0216 unsigned int rq_pagesz;
0217 unsigned int rq_tailsz;
0218 };
0219
0220 struct mid_q_entry;
0221 struct TCP_Server_Info;
0222 struct cifsFileInfo;
0223 struct cifs_ses;
0224 struct cifs_tcon;
0225 struct dfs_info3_param;
0226 struct cifs_fattr;
0227 struct smb3_fs_context;
0228 struct cifs_fid;
0229 struct cifs_readdata;
0230 struct cifs_writedata;
0231 struct cifs_io_parms;
0232 struct cifs_search_info;
0233 struct cifsInodeInfo;
0234 struct cifs_open_parms;
0235 struct cifs_credits;
0236
0237 struct smb_version_operations {
0238 int (*send_cancel)(struct TCP_Server_Info *, struct smb_rqst *,
0239 struct mid_q_entry *);
0240 bool (*compare_fids)(struct cifsFileInfo *, struct cifsFileInfo *);
0241
0242 struct mid_q_entry *(*setup_request)(struct cifs_ses *,
0243 struct TCP_Server_Info *,
0244 struct smb_rqst *);
0245
0246 struct mid_q_entry *(*setup_async_request)(struct TCP_Server_Info *,
0247 struct smb_rqst *);
0248
0249 int (*check_receive)(struct mid_q_entry *, struct TCP_Server_Info *,
0250 bool);
0251 void (*add_credits)(struct TCP_Server_Info *server,
0252 const struct cifs_credits *credits,
0253 const int optype);
0254 void (*set_credits)(struct TCP_Server_Info *, const int);
0255 int * (*get_credits_field)(struct TCP_Server_Info *, const int);
0256 unsigned int (*get_credits)(struct mid_q_entry *);
0257 __u64 (*get_next_mid)(struct TCP_Server_Info *);
0258 void (*revert_current_mid)(struct TCP_Server_Info *server,
0259 const unsigned int val);
0260
0261 unsigned int (*read_data_offset)(char *);
0262
0263
0264
0265
0266
0267
0268
0269 unsigned int (*read_data_length)(char *, bool in_remaining);
0270
0271 int (*map_error)(char *, bool);
0272
0273 struct mid_q_entry * (*find_mid)(struct TCP_Server_Info *, char *);
0274 void (*dump_detail)(void *buf, struct TCP_Server_Info *ptcp_info);
0275 void (*clear_stats)(struct cifs_tcon *);
0276 void (*print_stats)(struct seq_file *m, struct cifs_tcon *);
0277 void (*dump_share_caps)(struct seq_file *, struct cifs_tcon *);
0278
0279 int (*check_message)(char *, unsigned int, struct TCP_Server_Info *);
0280 bool (*is_oplock_break)(char *, struct TCP_Server_Info *);
0281 int (*handle_cancelled_mid)(struct mid_q_entry *, struct TCP_Server_Info *);
0282 void (*downgrade_oplock)(struct TCP_Server_Info *server,
0283 struct cifsInodeInfo *cinode, __u32 oplock,
0284 unsigned int epoch, bool *purge_cache);
0285
0286 bool (*check_trans2)(struct mid_q_entry *, struct TCP_Server_Info *,
0287 char *, int);
0288
0289 bool (*need_neg)(struct TCP_Server_Info *);
0290
0291 int (*negotiate)(const unsigned int xid,
0292 struct cifs_ses *ses,
0293 struct TCP_Server_Info *server);
0294
0295 unsigned int (*negotiate_wsize)(struct cifs_tcon *tcon, struct smb3_fs_context *ctx);
0296
0297 unsigned int (*negotiate_rsize)(struct cifs_tcon *tcon, struct smb3_fs_context *ctx);
0298
0299 int (*sess_setup)(const unsigned int, struct cifs_ses *,
0300 struct TCP_Server_Info *server,
0301 const struct nls_table *);
0302
0303 int (*logoff)(const unsigned int, struct cifs_ses *);
0304
0305 int (*tree_connect)(const unsigned int, struct cifs_ses *, const char *,
0306 struct cifs_tcon *, const struct nls_table *);
0307
0308 int (*tree_disconnect)(const unsigned int, struct cifs_tcon *);
0309
0310 int (*get_dfs_refer)(const unsigned int, struct cifs_ses *,
0311 const char *, struct dfs_info3_param **,
0312 unsigned int *, const struct nls_table *, int);
0313
0314 void (*qfs_tcon)(const unsigned int, struct cifs_tcon *,
0315 struct cifs_sb_info *);
0316
0317 int (*is_path_accessible)(const unsigned int, struct cifs_tcon *,
0318 struct cifs_sb_info *, const char *);
0319
0320 int (*query_path_info)(const unsigned int, struct cifs_tcon *,
0321 struct cifs_sb_info *, const char *,
0322 FILE_ALL_INFO *, bool *, bool *);
0323
0324 int (*query_file_info)(const unsigned int, struct cifs_tcon *,
0325 struct cifs_fid *, FILE_ALL_INFO *);
0326
0327 int (*query_reparse_tag)(const unsigned int xid, struct cifs_tcon *tcon,
0328 struct cifs_sb_info *cifs_sb, const char *path,
0329 __u32 *reparse_tag);
0330
0331 int (*get_srv_inum)(const unsigned int, struct cifs_tcon *,
0332 struct cifs_sb_info *, const char *,
0333 u64 *uniqueid, FILE_ALL_INFO *);
0334
0335 int (*set_path_size)(const unsigned int, struct cifs_tcon *,
0336 const char *, __u64, struct cifs_sb_info *, bool);
0337
0338 int (*set_file_size)(const unsigned int, struct cifs_tcon *,
0339 struct cifsFileInfo *, __u64, bool);
0340
0341 int (*set_file_info)(struct inode *, const char *, FILE_BASIC_INFO *,
0342 const unsigned int);
0343 int (*set_compression)(const unsigned int, struct cifs_tcon *,
0344 struct cifsFileInfo *);
0345
0346 bool (*can_echo)(struct TCP_Server_Info *);
0347
0348 int (*echo)(struct TCP_Server_Info *);
0349
0350 int (*posix_mkdir)(const unsigned int xid, struct inode *inode,
0351 umode_t mode, struct cifs_tcon *tcon,
0352 const char *full_path,
0353 struct cifs_sb_info *cifs_sb);
0354 int (*mkdir)(const unsigned int xid, struct inode *inode, umode_t mode,
0355 struct cifs_tcon *tcon, const char *name,
0356 struct cifs_sb_info *sb);
0357
0358 void (*mkdir_setinfo)(struct inode *, const char *,
0359 struct cifs_sb_info *, struct cifs_tcon *,
0360 const unsigned int);
0361
0362 int (*rmdir)(const unsigned int, struct cifs_tcon *, const char *,
0363 struct cifs_sb_info *);
0364
0365 int (*unlink)(const unsigned int, struct cifs_tcon *, const char *,
0366 struct cifs_sb_info *);
0367
0368 int (*rename_pending_delete)(const char *, struct dentry *,
0369 const unsigned int);
0370
0371 int (*rename)(const unsigned int, struct cifs_tcon *, const char *,
0372 const char *, struct cifs_sb_info *);
0373
0374 int (*create_hardlink)(const unsigned int, struct cifs_tcon *,
0375 const char *, const char *,
0376 struct cifs_sb_info *);
0377
0378 int (*query_symlink)(const unsigned int, struct cifs_tcon *,
0379 struct cifs_sb_info *, const char *,
0380 char **, bool);
0381
0382 int (*open)(const unsigned int, struct cifs_open_parms *,
0383 __u32 *, FILE_ALL_INFO *);
0384
0385 void (*set_fid)(struct cifsFileInfo *, struct cifs_fid *, __u32);
0386
0387 void (*close)(const unsigned int, struct cifs_tcon *,
0388 struct cifs_fid *);
0389
0390 void (*close_getattr)(const unsigned int xid, struct cifs_tcon *tcon,
0391 struct cifsFileInfo *pfile_info);
0392
0393 int (*flush)(const unsigned int, struct cifs_tcon *, struct cifs_fid *);
0394
0395 int (*async_readv)(struct cifs_readdata *);
0396
0397 int (*async_writev)(struct cifs_writedata *,
0398 void (*release)(struct kref *));
0399
0400 int (*sync_read)(const unsigned int, struct cifs_fid *,
0401 struct cifs_io_parms *, unsigned int *, char **,
0402 int *);
0403
0404 int (*sync_write)(const unsigned int, struct cifs_fid *,
0405 struct cifs_io_parms *, unsigned int *, struct kvec *,
0406 unsigned long);
0407
0408 int (*query_dir_first)(const unsigned int, struct cifs_tcon *,
0409 const char *, struct cifs_sb_info *,
0410 struct cifs_fid *, __u16,
0411 struct cifs_search_info *);
0412
0413 int (*query_dir_next)(const unsigned int, struct cifs_tcon *,
0414 struct cifs_fid *,
0415 __u16, struct cifs_search_info *srch_inf);
0416
0417 int (*close_dir)(const unsigned int, struct cifs_tcon *,
0418 struct cifs_fid *);
0419
0420 unsigned int (*calc_smb_size)(void *buf);
0421
0422 bool (*is_status_pending)(char *buf, struct TCP_Server_Info *server);
0423
0424 bool (*is_session_expired)(char *);
0425
0426 int (*oplock_response)(struct cifs_tcon *, struct cifs_fid *,
0427 struct cifsInodeInfo *);
0428
0429 int (*queryfs)(const unsigned int, struct cifs_tcon *,
0430 struct cifs_sb_info *, struct kstatfs *);
0431
0432 int (*mand_lock)(const unsigned int, struct cifsFileInfo *, __u64,
0433 __u64, __u32, int, int, bool);
0434
0435 int (*mand_unlock_range)(struct cifsFileInfo *, struct file_lock *,
0436 const unsigned int);
0437
0438 int (*push_mand_locks)(struct cifsFileInfo *);
0439
0440 void (*get_lease_key)(struct inode *, struct cifs_fid *);
0441
0442 void (*set_lease_key)(struct inode *, struct cifs_fid *);
0443
0444 void (*new_lease_key)(struct cifs_fid *);
0445 int (*generate_signingkey)(struct cifs_ses *ses,
0446 struct TCP_Server_Info *server);
0447 int (*calc_signature)(struct smb_rqst *, struct TCP_Server_Info *,
0448 bool allocate_crypto);
0449 int (*set_integrity)(const unsigned int, struct cifs_tcon *tcon,
0450 struct cifsFileInfo *src_file);
0451 int (*enum_snapshots)(const unsigned int xid, struct cifs_tcon *tcon,
0452 struct cifsFileInfo *src_file, void __user *);
0453 int (*notify)(const unsigned int xid, struct file *pfile,
0454 void __user *pbuf);
0455 int (*query_mf_symlink)(unsigned int, struct cifs_tcon *,
0456 struct cifs_sb_info *, const unsigned char *,
0457 char *, unsigned int *);
0458 int (*create_mf_symlink)(unsigned int, struct cifs_tcon *,
0459 struct cifs_sb_info *, const unsigned char *,
0460 char *, unsigned int *);
0461
0462 bool (*is_read_op)(__u32);
0463
0464 void (*set_oplock_level)(struct cifsInodeInfo *, __u32, unsigned int,
0465 bool *);
0466
0467 char * (*create_lease_buf)(u8 *lease_key, u8 oplock);
0468
0469 __u8 (*parse_lease_buf)(void *buf, unsigned int *epoch, char *lkey);
0470 ssize_t (*copychunk_range)(const unsigned int,
0471 struct cifsFileInfo *src_file,
0472 struct cifsFileInfo *target_file,
0473 u64 src_off, u64 len, u64 dest_off);
0474 int (*duplicate_extents)(const unsigned int, struct cifsFileInfo *src,
0475 struct cifsFileInfo *target_file, u64 src_off, u64 len,
0476 u64 dest_off);
0477 int (*validate_negotiate)(const unsigned int, struct cifs_tcon *);
0478 ssize_t (*query_all_EAs)(const unsigned int, struct cifs_tcon *,
0479 const unsigned char *, const unsigned char *, char *,
0480 size_t, struct cifs_sb_info *);
0481 int (*set_EA)(const unsigned int, struct cifs_tcon *, const char *,
0482 const char *, const void *, const __u16,
0483 const struct nls_table *, struct cifs_sb_info *);
0484 struct cifs_ntsd * (*get_acl)(struct cifs_sb_info *, struct inode *,
0485 const char *, u32 *, u32);
0486 struct cifs_ntsd * (*get_acl_by_fid)(struct cifs_sb_info *,
0487 const struct cifs_fid *, u32 *, u32);
0488 int (*set_acl)(struct cifs_ntsd *, __u32, struct inode *, const char *,
0489 int);
0490
0491 unsigned int (*wp_retry_size)(struct inode *);
0492
0493 int (*wait_mtu_credits)(struct TCP_Server_Info *, unsigned int,
0494 unsigned int *, struct cifs_credits *);
0495
0496 int (*adjust_credits)(struct TCP_Server_Info *server,
0497 struct cifs_credits *credits,
0498 const unsigned int payload_size);
0499
0500 bool (*dir_needs_close)(struct cifsFileInfo *);
0501 long (*fallocate)(struct file *, struct cifs_tcon *, int, loff_t,
0502 loff_t);
0503
0504 int (*init_transform_rq)(struct TCP_Server_Info *, int num_rqst,
0505 struct smb_rqst *, struct smb_rqst *);
0506 int (*is_transform_hdr)(void *buf);
0507 int (*receive_transform)(struct TCP_Server_Info *,
0508 struct mid_q_entry **, char **, int *);
0509 enum securityEnum (*select_sectype)(struct TCP_Server_Info *,
0510 enum securityEnum);
0511 int (*next_header)(char *);
0512
0513 int (*ioctl_query_info)(const unsigned int xid,
0514 struct cifs_tcon *tcon,
0515 struct cifs_sb_info *cifs_sb,
0516 __le16 *path, int is_dir,
0517 unsigned long p);
0518
0519 int (*make_node)(unsigned int xid,
0520 struct inode *inode,
0521 struct dentry *dentry,
0522 struct cifs_tcon *tcon,
0523 const char *full_path,
0524 umode_t mode,
0525 dev_t device_number);
0526
0527 int (*fiemap)(struct cifs_tcon *tcon, struct cifsFileInfo *,
0528 struct fiemap_extent_info *, u64, u64);
0529
0530 loff_t (*llseek)(struct file *, struct cifs_tcon *, loff_t, int);
0531
0532 bool (*is_status_io_timeout)(char *buf);
0533
0534 void (*is_network_name_deleted)(char *buf, struct TCP_Server_Info *srv);
0535 };
0536
0537 struct smb_version_values {
0538 char *version_string;
0539 __u16 protocol_id;
0540 __u32 req_capabilities;
0541 __u32 large_lock_type;
0542 __u32 exclusive_lock_type;
0543 __u32 shared_lock_type;
0544 __u32 unlock_lock_type;
0545 size_t header_preamble_size;
0546 size_t header_size;
0547 size_t max_header_size;
0548 size_t read_rsp_size;
0549 __le16 lock_cmd;
0550 unsigned int cap_unix;
0551 unsigned int cap_nt_find;
0552 unsigned int cap_large_files;
0553 __u16 signing_enabled;
0554 __u16 signing_required;
0555 size_t create_lease_size;
0556 };
0557
0558 #define HEADER_SIZE(server) (server->vals->header_size)
0559 #define MAX_HEADER_SIZE(server) (server->vals->max_header_size)
0560 #define HEADER_PREAMBLE_SIZE(server) (server->vals->header_preamble_size)
0561 #define MID_HEADER_SIZE(server) (HEADER_SIZE(server) - 1 - HEADER_PREAMBLE_SIZE(server))
0562
0563
0564
0565
0566
0567 #define CIFS_MOUNT_MASK (CIFS_MOUNT_NO_PERM | CIFS_MOUNT_SET_UID | \
0568 CIFS_MOUNT_SERVER_INUM | CIFS_MOUNT_DIRECT_IO | \
0569 CIFS_MOUNT_NO_XATTR | CIFS_MOUNT_MAP_SPECIAL_CHR | \
0570 CIFS_MOUNT_MAP_SFM_CHR | \
0571 CIFS_MOUNT_UNX_EMUL | CIFS_MOUNT_NO_BRL | \
0572 CIFS_MOUNT_CIFS_ACL | CIFS_MOUNT_OVERR_UID | \
0573 CIFS_MOUNT_OVERR_GID | CIFS_MOUNT_DYNPERM | \
0574 CIFS_MOUNT_NOPOSIXBRL | CIFS_MOUNT_NOSSYNC | \
0575 CIFS_MOUNT_FSCACHE | CIFS_MOUNT_MF_SYMLINKS | \
0576 CIFS_MOUNT_MULTIUSER | CIFS_MOUNT_STRICT_IO | \
0577 CIFS_MOUNT_CIFS_BACKUPUID | CIFS_MOUNT_CIFS_BACKUPGID | \
0578 CIFS_MOUNT_UID_FROM_ACL | CIFS_MOUNT_NO_HANDLE_CACHE | \
0579 CIFS_MOUNT_NO_DFS | CIFS_MOUNT_MODE_FROM_SID | \
0580 CIFS_MOUNT_RO_CACHE | CIFS_MOUNT_RW_CACHE)
0581
0582
0583
0584
0585
0586 #define CIFS_MS_MASK (SB_RDONLY | SB_MANDLOCK | SB_NOEXEC | SB_NOSUID | \
0587 SB_NODEV | SB_SYNCHRONOUS)
0588
0589 struct cifs_mnt_data {
0590 struct cifs_sb_info *cifs_sb;
0591 struct smb3_fs_context *ctx;
0592 int flags;
0593 };
0594
0595 static inline unsigned int
0596 get_rfc1002_length(void *buf)
0597 {
0598 return be32_to_cpu(*((__be32 *)buf)) & 0xffffff;
0599 }
0600
0601 static inline void
0602 inc_rfc1001_len(void *buf, int count)
0603 {
0604 be32_add_cpu((__be32 *)buf, count);
0605 }
0606
0607 struct TCP_Server_Info {
0608 struct list_head tcp_ses_list;
0609 struct list_head smb_ses_list;
0610 spinlock_t srv_lock;
0611 __u64 conn_id;
0612 int srv_count;
0613
0614 char server_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
0615 struct smb_version_operations *ops;
0616 struct smb_version_values *vals;
0617
0618 enum statusEnum tcpStatus;
0619 char *hostname;
0620 struct socket *ssocket;
0621 struct sockaddr_storage dstaddr;
0622 struct sockaddr_storage srcaddr;
0623 #ifdef CONFIG_NET_NS
0624 struct net *net;
0625 #endif
0626 wait_queue_head_t response_q;
0627 wait_queue_head_t request_q;
0628 spinlock_t mid_lock;
0629 struct list_head pending_mid_q;
0630 bool noblocksnd;
0631 bool noautotune;
0632 bool nosharesock;
0633 bool tcp_nodelay;
0634 unsigned int credits;
0635 unsigned int max_credits;
0636 unsigned int in_flight;
0637 unsigned int max_in_flight;
0638 spinlock_t req_lock;
0639 struct mutex _srv_mutex;
0640 unsigned int nofs_flag;
0641 struct task_struct *tsk;
0642 char server_GUID[16];
0643 __u16 sec_mode;
0644 bool sign;
0645 bool ignore_signature:1;
0646 bool session_estab;
0647 int echo_credits;
0648 int oplock_credits;
0649 bool echoes:1;
0650 __u8 client_guid[SMB2_CLIENT_GUID_SIZE];
0651 u16 dialect;
0652 bool oplocks:1;
0653 unsigned int maxReq;
0654
0655
0656 unsigned int maxBuf;
0657
0658
0659
0660 unsigned int max_rw;
0661
0662
0663 unsigned int capabilities;
0664 int timeAdj;
0665 __u64 CurrentMid;
0666 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
0667
0668 char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
0669 __u32 sequence_number;
0670 __u32 reconnect_instance;
0671 struct session_key session_key;
0672 unsigned long lstrp;
0673 struct cifs_secmech secmech;
0674 #define CIFS_NEGFLAVOR_UNENCAP 1
0675 #define CIFS_NEGFLAVOR_EXTENDED 2
0676 char negflavor;
0677
0678 bool sec_ntlmssp;
0679 bool sec_kerberosu2u;
0680 bool sec_kerberos;
0681 bool sec_mskerberos;
0682 bool large_buf;
0683
0684 bool rdma;
0685
0686 struct smbd_connection *smbd_conn;
0687 struct delayed_work echo;
0688 struct delayed_work resolve;
0689 char *smallbuf;
0690 char *bigbuf;
0691
0692 unsigned int pdu_size;
0693 unsigned int total_read;
0694 atomic_t in_send;
0695 atomic_t num_waiters;
0696 #ifdef CONFIG_CIFS_STATS2
0697 atomic_t num_cmds[NUMBER_OF_SMB2_COMMANDS];
0698 atomic_t smb2slowcmd[NUMBER_OF_SMB2_COMMANDS];
0699 __u64 time_per_cmd[NUMBER_OF_SMB2_COMMANDS];
0700 __u32 slowest_cmd[NUMBER_OF_SMB2_COMMANDS];
0701 __u32 fastest_cmd[NUMBER_OF_SMB2_COMMANDS];
0702 #endif
0703 unsigned int max_read;
0704 unsigned int max_write;
0705 unsigned int min_offload;
0706 __le16 compress_algorithm;
0707 __u16 signing_algorithm;
0708 __le16 cipher_type;
0709
0710 __u8 preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
0711 bool signing_negotiated;
0712 bool posix_ext_supported;
0713 struct delayed_work reconnect;
0714 struct mutex reconnect_mutex;
0715 unsigned long echo_interval;
0716
0717
0718
0719
0720
0721
0722 int nr_targets;
0723 bool noblockcnt;
0724
0725
0726
0727
0728
0729
0730 #define CIFS_SERVER_IS_CHAN(server) (!!(server)->primary_server)
0731 struct TCP_Server_Info *primary_server;
0732
0733 #ifdef CONFIG_CIFS_SWN_UPCALL
0734 bool use_swn_dstaddr;
0735 struct sockaddr_storage swn_dstaddr;
0736 #endif
0737 #ifdef CONFIG_CIFS_DFS_UPCALL
0738 bool is_dfs_conn;
0739 struct mutex refpath_lock;
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751 char *origin_fullpath, *leaf_fullpath, *current_fullpath;
0752 #endif
0753 };
0754
0755 static inline bool is_smb1(struct TCP_Server_Info *server)
0756 {
0757 return HEADER_PREAMBLE_SIZE(server) != 0;
0758 }
0759
0760 static inline void cifs_server_lock(struct TCP_Server_Info *server)
0761 {
0762 unsigned int nofs_flag = memalloc_nofs_save();
0763
0764 mutex_lock(&server->_srv_mutex);
0765 server->nofs_flag = nofs_flag;
0766 }
0767
0768 static inline void cifs_server_unlock(struct TCP_Server_Info *server)
0769 {
0770 unsigned int nofs_flag = server->nofs_flag;
0771
0772 mutex_unlock(&server->_srv_mutex);
0773 memalloc_nofs_restore(nofs_flag);
0774 }
0775
0776 struct cifs_credits {
0777 unsigned int value;
0778 unsigned int instance;
0779 };
0780
0781 static inline unsigned int
0782 in_flight(struct TCP_Server_Info *server)
0783 {
0784 unsigned int num;
0785 spin_lock(&server->req_lock);
0786 num = server->in_flight;
0787 spin_unlock(&server->req_lock);
0788 return num;
0789 }
0790
0791 static inline bool
0792 has_credits(struct TCP_Server_Info *server, int *credits, int num_credits)
0793 {
0794 int num;
0795 spin_lock(&server->req_lock);
0796 num = *credits;
0797 spin_unlock(&server->req_lock);
0798 return num >= num_credits;
0799 }
0800
0801 static inline void
0802 add_credits(struct TCP_Server_Info *server, const struct cifs_credits *credits,
0803 const int optype)
0804 {
0805 server->ops->add_credits(server, credits, optype);
0806 }
0807
0808 static inline void
0809 add_credits_and_wake_if(struct TCP_Server_Info *server,
0810 const struct cifs_credits *credits, const int optype)
0811 {
0812 if (credits->value) {
0813 server->ops->add_credits(server, credits, optype);
0814 wake_up(&server->request_q);
0815 }
0816 }
0817
0818 static inline void
0819 set_credits(struct TCP_Server_Info *server, const int val)
0820 {
0821 server->ops->set_credits(server, val);
0822 }
0823
0824 static inline int
0825 adjust_credits(struct TCP_Server_Info *server, struct cifs_credits *credits,
0826 const unsigned int payload_size)
0827 {
0828 return server->ops->adjust_credits ?
0829 server->ops->adjust_credits(server, credits, payload_size) : 0;
0830 }
0831
0832 static inline __le64
0833 get_next_mid64(struct TCP_Server_Info *server)
0834 {
0835 return cpu_to_le64(server->ops->get_next_mid(server));
0836 }
0837
0838 static inline __le16
0839 get_next_mid(struct TCP_Server_Info *server)
0840 {
0841 __u16 mid = server->ops->get_next_mid(server);
0842
0843
0844
0845
0846 return cpu_to_le16(mid);
0847 }
0848
0849 static inline void
0850 revert_current_mid(struct TCP_Server_Info *server, const unsigned int val)
0851 {
0852 if (server->ops->revert_current_mid)
0853 server->ops->revert_current_mid(server, val);
0854 }
0855
0856 static inline void
0857 revert_current_mid_from_hdr(struct TCP_Server_Info *server,
0858 const struct smb2_hdr *shdr)
0859 {
0860 unsigned int num = le16_to_cpu(shdr->CreditCharge);
0861
0862 return revert_current_mid(server, num > 0 ? num : 1);
0863 }
0864
0865 static inline __u16
0866 get_mid(const struct smb_hdr *smb)
0867 {
0868 return le16_to_cpu(smb->Mid);
0869 }
0870
0871 static inline bool
0872 compare_mid(__u16 mid, const struct smb_hdr *smb)
0873 {
0874 return mid == le16_to_cpu(smb->Mid);
0875 }
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889
0890 #define CIFS_MAX_WSIZE ((1<<24) - 1 - sizeof(WRITE_REQ) + 4)
0891 #define CIFS_MAX_RSIZE ((1<<24) - sizeof(READ_RSP) + 4)
0892
0893
0894
0895
0896
0897
0898 #define CIFS_MAX_RFC1002_WSIZE ((1<<17) - 1 - sizeof(WRITE_REQ) + 4)
0899 #define CIFS_MAX_RFC1002_RSIZE ((1<<17) - 1 - sizeof(READ_RSP) + 4)
0900
0901 #define CIFS_DEFAULT_IOSIZE (1024 * 1024)
0902
0903
0904
0905
0906
0907
0908
0909
0910
0911
0912
0913
0914 #define CIFS_DEFAULT_NON_POSIX_RSIZE (60 * 1024)
0915 #define CIFS_DEFAULT_NON_POSIX_WSIZE (65536)
0916
0917
0918
0919
0920
0921
0922 #ifdef CONFIG_NET_NS
0923
0924 static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
0925 {
0926 return srv->net;
0927 }
0928
0929 static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
0930 {
0931 srv->net = net;
0932 }
0933
0934 #else
0935
0936 static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
0937 {
0938 return &init_net;
0939 }
0940
0941 static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
0942 {
0943 }
0944
0945 #endif
0946
0947 struct cifs_server_iface {
0948 struct list_head iface_head;
0949 struct kref refcount;
0950 size_t speed;
0951 unsigned int rdma_capable : 1;
0952 unsigned int rss_capable : 1;
0953 unsigned int is_active : 1;
0954 struct sockaddr_storage sockaddr;
0955 };
0956
0957
0958 static inline void
0959 release_iface(struct kref *ref)
0960 {
0961 struct cifs_server_iface *iface = container_of(ref,
0962 struct cifs_server_iface,
0963 refcount);
0964 list_del_init(&iface->iface_head);
0965 kfree(iface);
0966 }
0967
0968
0969
0970
0971
0972
0973
0974 static inline int
0975 iface_cmp(struct cifs_server_iface *a, struct cifs_server_iface *b)
0976 {
0977 int cmp_ret = 0;
0978
0979 WARN_ON(!a || !b);
0980 if (a->speed == b->speed) {
0981 if (a->rdma_capable == b->rdma_capable) {
0982 if (a->rss_capable == b->rss_capable) {
0983 cmp_ret = memcmp(&a->sockaddr, &b->sockaddr,
0984 sizeof(a->sockaddr));
0985 if (!cmp_ret)
0986 return 0;
0987 else if (cmp_ret > 0)
0988 return 1;
0989 else
0990 return -1;
0991 } else if (a->rss_capable > b->rss_capable)
0992 return 1;
0993 else
0994 return -1;
0995 } else if (a->rdma_capable > b->rdma_capable)
0996 return 1;
0997 else
0998 return -1;
0999 } else if (a->speed > b->speed)
1000 return 1;
1001 else
1002 return -1;
1003 }
1004
1005 struct cifs_chan {
1006 unsigned int in_reconnect : 1;
1007 struct TCP_Server_Info *server;
1008 struct cifs_server_iface *iface;
1009 __u8 signkey[SMB3_SIGN_KEY_SIZE];
1010 };
1011
1012
1013
1014
1015 struct cifs_ses {
1016 struct list_head smb_ses_list;
1017 struct list_head rlist;
1018 struct list_head tcon_list;
1019 struct cifs_tcon *tcon_ipc;
1020 spinlock_t ses_lock;
1021 struct mutex session_mutex;
1022 struct TCP_Server_Info *server;
1023 int ses_count;
1024 enum ses_status_enum ses_status;
1025 unsigned overrideSecFlg;
1026 char *serverOS;
1027 char *serverNOS;
1028 char *serverDomain;
1029 __u64 Suid;
1030 kuid_t linux_uid;
1031 kuid_t cred_uid;
1032 unsigned int capabilities;
1033 char ip_addr[INET6_ADDRSTRLEN + 1];
1034 char *user_name;
1035
1036 char *domainName;
1037 char *password;
1038 char workstation_name[CIFS_MAX_WORKSTATION_LEN];
1039 struct session_key auth_key;
1040 struct ntlmssp_auth *ntlmssp;
1041 enum securityEnum sectype;
1042 bool sign;
1043 bool domainAuto:1;
1044 __u16 session_flags;
1045 __u8 smb3signingkey[SMB3_SIGN_KEY_SIZE];
1046 __u8 smb3encryptionkey[SMB3_ENC_DEC_KEY_SIZE];
1047 __u8 smb3decryptionkey[SMB3_ENC_DEC_KEY_SIZE];
1048 __u8 preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059 spinlock_t iface_lock;
1060
1061 struct list_head iface_list;
1062 size_t iface_count;
1063 unsigned long iface_last_update;
1064
1065
1066 spinlock_t chan_lock;
1067
1068 #define CIFS_MAX_CHANNELS 16
1069 #define CIFS_ALL_CHANNELS_SET(ses) \
1070 ((1UL << (ses)->chan_count) - 1)
1071 #define CIFS_ALL_CHANS_GOOD(ses) \
1072 (!(ses)->chans_need_reconnect)
1073 #define CIFS_ALL_CHANS_NEED_RECONNECT(ses) \
1074 ((ses)->chans_need_reconnect == CIFS_ALL_CHANNELS_SET(ses))
1075 #define CIFS_SET_ALL_CHANS_NEED_RECONNECT(ses) \
1076 ((ses)->chans_need_reconnect = CIFS_ALL_CHANNELS_SET(ses))
1077 #define CIFS_CHAN_NEEDS_RECONNECT(ses, index) \
1078 test_bit((index), &(ses)->chans_need_reconnect)
1079 #define CIFS_CHAN_IN_RECONNECT(ses, index) \
1080 ((ses)->chans[(index)].in_reconnect)
1081
1082 struct cifs_chan chans[CIFS_MAX_CHANNELS];
1083 size_t chan_count;
1084 size_t chan_max;
1085 atomic_t chan_seq;
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097 unsigned long chans_need_reconnect;
1098
1099 };
1100
1101 static inline bool
1102 cap_unix(struct cifs_ses *ses)
1103 {
1104 return ses->server->vals->cap_unix & ses->capabilities;
1105 }
1106
1107
1108
1109
1110
1111
1112 #define CIFS_FATTR_DFS_REFERRAL 0x1
1113 #define CIFS_FATTR_DELETE_PENDING 0x2
1114 #define CIFS_FATTR_NEED_REVAL 0x4
1115 #define CIFS_FATTR_INO_COLLISION 0x8
1116 #define CIFS_FATTR_UNKNOWN_NLINK 0x10
1117 #define CIFS_FATTR_FAKE_ROOT_INO 0x20
1118
1119 struct cifs_fattr {
1120 u32 cf_flags;
1121 u32 cf_cifsattrs;
1122 u64 cf_uniqueid;
1123 u64 cf_eof;
1124 u64 cf_bytes;
1125 u64 cf_createtime;
1126 kuid_t cf_uid;
1127 kgid_t cf_gid;
1128 umode_t cf_mode;
1129 dev_t cf_rdev;
1130 unsigned int cf_nlink;
1131 unsigned int cf_dtype;
1132 struct timespec64 cf_atime;
1133 struct timespec64 cf_mtime;
1134 struct timespec64 cf_ctime;
1135 u32 cf_cifstag;
1136 };
1137
1138
1139
1140
1141
1142 struct cifs_tcon {
1143 struct list_head tcon_list;
1144 int tc_count;
1145 struct list_head rlist;
1146 spinlock_t tc_lock;
1147 atomic_t num_local_opens;
1148 atomic_t num_remote_opens;
1149 struct list_head openFileList;
1150 spinlock_t open_file_lock;
1151 struct cifs_ses *ses;
1152 char treeName[MAX_TREE_SIZE + 1];
1153 char *nativeFileSystem;
1154 char *password;
1155 __u32 tid;
1156 __u16 Flags;
1157 enum tid_status_enum status;
1158 atomic_t num_smbs_sent;
1159 union {
1160 struct {
1161 atomic_t num_writes;
1162 atomic_t num_reads;
1163 atomic_t num_flushes;
1164 atomic_t num_oplock_brks;
1165 atomic_t num_opens;
1166 atomic_t num_closes;
1167 atomic_t num_deletes;
1168 atomic_t num_mkdirs;
1169 atomic_t num_posixopens;
1170 atomic_t num_posixmkdirs;
1171 atomic_t num_rmdirs;
1172 atomic_t num_renames;
1173 atomic_t num_t2renames;
1174 atomic_t num_ffirst;
1175 atomic_t num_fnext;
1176 atomic_t num_fclose;
1177 atomic_t num_hardlinks;
1178 atomic_t num_symlinks;
1179 atomic_t num_locks;
1180 atomic_t num_acl_get;
1181 atomic_t num_acl_set;
1182 } cifs_stats;
1183 struct {
1184 atomic_t smb2_com_sent[NUMBER_OF_SMB2_COMMANDS];
1185 atomic_t smb2_com_failed[NUMBER_OF_SMB2_COMMANDS];
1186 } smb2_stats;
1187 } stats;
1188 __u64 bytes_read;
1189 __u64 bytes_written;
1190 spinlock_t stat_lock;
1191 FILE_SYSTEM_DEVICE_INFO fsDevInfo;
1192 FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo;
1193 FILE_SYSTEM_UNIX_INFO fsUnixInfo;
1194 bool ipc:1;
1195 bool pipe:1;
1196 bool print:1;
1197 bool retry:1;
1198 bool nocase:1;
1199 bool nohandlecache:1;
1200 bool nodelete:1;
1201 bool seal:1;
1202 bool unix_ext:1;
1203
1204 bool posix_extensions;
1205 bool local_lease:1;
1206 bool broken_posix_open;
1207 bool broken_sparse_sup;
1208 bool need_reconnect:1;
1209 bool need_reopen_files:1;
1210 bool use_resilient:1;
1211 bool use_persistent:1;
1212 bool no_lease:1;
1213 bool use_witness:1;
1214 __le32 capabilities;
1215 __u32 share_flags;
1216 __u32 maximal_access;
1217 __u32 vol_serial_number;
1218 __le64 vol_create_time;
1219 __u64 snapshot_time;
1220 __u32 handle_timeout;
1221 __u32 ss_flags;
1222 __u32 perf_sector_size;
1223 __u32 max_chunks;
1224 __u32 max_bytes_chunk;
1225 __u32 max_bytes_copy;
1226 #ifdef CONFIG_CIFS_FSCACHE
1227 u64 resource_id;
1228 struct fscache_volume *fscache;
1229 #endif
1230 struct list_head pending_opens;
1231 struct cached_fid *cfid;
1232
1233 #ifdef CONFIG_CIFS_DFS_UPCALL
1234 struct list_head ulist;
1235 #endif
1236 struct delayed_work query_interfaces;
1237 };
1238
1239
1240
1241
1242
1243
1244
1245 struct tcon_link {
1246 struct rb_node tl_rbnode;
1247 kuid_t tl_uid;
1248 unsigned long tl_flags;
1249 #define TCON_LINK_MASTER 0
1250 #define TCON_LINK_PENDING 1
1251 #define TCON_LINK_IN_TREE 2
1252 unsigned long tl_time;
1253 atomic_t tl_count;
1254 struct cifs_tcon *tl_tcon;
1255 };
1256
1257 extern struct tcon_link *cifs_sb_tlink(struct cifs_sb_info *cifs_sb);
1258 extern void smb3_free_compound_rqst(int num_rqst, struct smb_rqst *rqst);
1259
1260 static inline struct cifs_tcon *
1261 tlink_tcon(struct tcon_link *tlink)
1262 {
1263 return tlink->tl_tcon;
1264 }
1265
1266 static inline struct tcon_link *
1267 cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb)
1268 {
1269 return cifs_sb->master_tlink;
1270 }
1271
1272 extern void cifs_put_tlink(struct tcon_link *tlink);
1273
1274 static inline struct tcon_link *
1275 cifs_get_tlink(struct tcon_link *tlink)
1276 {
1277 if (tlink && !IS_ERR(tlink))
1278 atomic_inc(&tlink->tl_count);
1279 return tlink;
1280 }
1281
1282
1283 extern struct cifs_tcon *cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb);
1284
1285 #define CIFS_OPLOCK_NO_CHANGE 0xfe
1286
1287 struct cifs_pending_open {
1288 struct list_head olist;
1289 struct tcon_link *tlink;
1290 __u8 lease_key[16];
1291 __u32 oplock;
1292 };
1293
1294 struct cifs_deferred_close {
1295 struct list_head dlist;
1296 struct tcon_link *tlink;
1297 __u16 netfid;
1298 __u64 persistent_fid;
1299 __u64 volatile_fid;
1300 };
1301
1302
1303
1304
1305
1306 struct cifsLockInfo {
1307 struct list_head llist;
1308 struct list_head blist;
1309 wait_queue_head_t block_q;
1310 __u64 offset;
1311 __u64 length;
1312 __u32 pid;
1313 __u16 type;
1314 __u16 flags;
1315 };
1316
1317
1318
1319
1320 struct cifs_search_info {
1321 loff_t index_of_last_entry;
1322 __u16 entries_in_buffer;
1323 __u16 info_level;
1324 __u32 resume_key;
1325 char *ntwrk_buf_start;
1326 char *srch_entries_start;
1327 char *last_entry;
1328 const char *presume_name;
1329 unsigned int resume_name_len;
1330 bool endOfSearch:1;
1331 bool emptyDir:1;
1332 bool unicode:1;
1333 bool smallBuf:1;
1334 };
1335
1336 #define ACL_NO_MODE ((umode_t)(-1))
1337 struct cifs_open_parms {
1338 struct cifs_tcon *tcon;
1339 struct cifs_sb_info *cifs_sb;
1340 int disposition;
1341 int desired_access;
1342 int create_options;
1343 const char *path;
1344 struct cifs_fid *fid;
1345 umode_t mode;
1346 bool reconnect:1;
1347 };
1348
1349 struct cifs_fid {
1350 __u16 netfid;
1351 __u64 persistent_fid;
1352 __u64 volatile_fid;
1353 __u8 lease_key[SMB2_LEASE_KEY_SIZE];
1354 __u8 create_guid[16];
1355 __u32 access;
1356 struct cifs_pending_open *pending_open;
1357 unsigned int epoch;
1358 #ifdef CONFIG_CIFS_DEBUG2
1359 __u64 mid;
1360 #endif
1361 bool purge_cache;
1362 };
1363
1364 struct cifs_fid_locks {
1365 struct list_head llist;
1366 struct cifsFileInfo *cfile;
1367 struct list_head locks;
1368 };
1369
1370 struct cifsFileInfo {
1371
1372 struct list_head tlist;
1373 struct list_head flist;
1374
1375 struct cifs_fid_locks *llist;
1376 kuid_t uid;
1377 __u32 pid;
1378 struct cifs_fid fid;
1379 struct list_head rlist;
1380 ;
1381
1382 struct dentry *dentry;
1383 struct tcon_link *tlink;
1384 unsigned int f_flags;
1385 bool invalidHandle:1;
1386 bool swapfile:1;
1387 bool oplock_break_cancelled:1;
1388 unsigned int oplock_epoch;
1389 __u32 oplock_level;
1390 int count;
1391 spinlock_t file_info_lock;
1392 struct mutex fh_mutex;
1393 struct cifs_search_info srch_inf;
1394 struct work_struct oplock_break;
1395 struct work_struct put;
1396 struct delayed_work deferred;
1397 bool deferred_close_scheduled;
1398 };
1399
1400 struct cifs_io_parms {
1401 __u16 netfid;
1402 __u64 persistent_fid;
1403 __u64 volatile_fid;
1404 __u32 pid;
1405 __u64 offset;
1406 unsigned int length;
1407 struct cifs_tcon *tcon;
1408 struct TCP_Server_Info *server;
1409 };
1410
1411 struct cifs_aio_ctx {
1412 struct kref refcount;
1413 struct list_head list;
1414 struct mutex aio_mutex;
1415 struct completion done;
1416 struct iov_iter iter;
1417 struct kiocb *iocb;
1418 struct cifsFileInfo *cfile;
1419 struct bio_vec *bv;
1420 loff_t pos;
1421 unsigned int npages;
1422 ssize_t rc;
1423 unsigned int len;
1424 unsigned int total_len;
1425 bool should_dirty;
1426
1427
1428
1429
1430 bool direct_io;
1431 };
1432
1433
1434 struct cifs_readdata {
1435 struct kref refcount;
1436 struct list_head list;
1437 struct completion done;
1438 struct cifsFileInfo *cfile;
1439 struct address_space *mapping;
1440 struct cifs_aio_ctx *ctx;
1441 __u64 offset;
1442 unsigned int bytes;
1443 unsigned int got_bytes;
1444 pid_t pid;
1445 int result;
1446 struct work_struct work;
1447 int (*read_into_pages)(struct TCP_Server_Info *server,
1448 struct cifs_readdata *rdata,
1449 unsigned int len);
1450 int (*copy_into_pages)(struct TCP_Server_Info *server,
1451 struct cifs_readdata *rdata,
1452 struct iov_iter *iter);
1453 struct kvec iov[2];
1454 struct TCP_Server_Info *server;
1455 #ifdef CONFIG_CIFS_SMB_DIRECT
1456 struct smbd_mr *mr;
1457 #endif
1458 unsigned int pagesz;
1459 unsigned int page_offset;
1460 unsigned int tailsz;
1461 struct cifs_credits credits;
1462 unsigned int nr_pages;
1463 struct page **pages;
1464 };
1465
1466
1467 struct cifs_writedata {
1468 struct kref refcount;
1469 struct list_head list;
1470 struct completion done;
1471 enum writeback_sync_modes sync_mode;
1472 struct work_struct work;
1473 struct cifsFileInfo *cfile;
1474 struct cifs_aio_ctx *ctx;
1475 __u64 offset;
1476 pid_t pid;
1477 unsigned int bytes;
1478 int result;
1479 struct TCP_Server_Info *server;
1480 #ifdef CONFIG_CIFS_SMB_DIRECT
1481 struct smbd_mr *mr;
1482 #endif
1483 unsigned int pagesz;
1484 unsigned int page_offset;
1485 unsigned int tailsz;
1486 struct cifs_credits credits;
1487 unsigned int nr_pages;
1488 struct page **pages;
1489 };
1490
1491
1492
1493
1494
1495 static inline void
1496 cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file)
1497 {
1498 ++cifs_file->count;
1499 }
1500
1501 struct cifsFileInfo *cifsFileInfo_get(struct cifsFileInfo *cifs_file);
1502 void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_hdlr,
1503 bool offload);
1504 void cifsFileInfo_put(struct cifsFileInfo *cifs_file);
1505
1506 #define CIFS_CACHE_READ_FLG 1
1507 #define CIFS_CACHE_HANDLE_FLG 2
1508 #define CIFS_CACHE_RH_FLG (CIFS_CACHE_READ_FLG | CIFS_CACHE_HANDLE_FLG)
1509 #define CIFS_CACHE_WRITE_FLG 4
1510 #define CIFS_CACHE_RW_FLG (CIFS_CACHE_READ_FLG | CIFS_CACHE_WRITE_FLG)
1511 #define CIFS_CACHE_RHW_FLG (CIFS_CACHE_RW_FLG | CIFS_CACHE_HANDLE_FLG)
1512
1513 #define CIFS_CACHE_READ(cinode) ((cinode->oplock & CIFS_CACHE_READ_FLG) || (CIFS_SB(cinode->netfs.inode.i_sb)->mnt_cifs_flags & CIFS_MOUNT_RO_CACHE))
1514 #define CIFS_CACHE_HANDLE(cinode) (cinode->oplock & CIFS_CACHE_HANDLE_FLG)
1515 #define CIFS_CACHE_WRITE(cinode) ((cinode->oplock & CIFS_CACHE_WRITE_FLG) || (CIFS_SB(cinode->netfs.inode.i_sb)->mnt_cifs_flags & CIFS_MOUNT_RW_CACHE))
1516
1517
1518
1519
1520
1521 struct cifsInodeInfo {
1522 struct netfs_inode netfs;
1523 bool can_cache_brlcks;
1524 struct list_head llist;
1525
1526
1527
1528
1529
1530 struct rw_semaphore lock_sem;
1531
1532 struct list_head openFileList;
1533 spinlock_t open_file_lock;
1534 __u32 cifsAttrs;
1535 unsigned int oplock;
1536 unsigned int epoch;
1537 #define CIFS_INODE_PENDING_OPLOCK_BREAK (0)
1538 #define CIFS_INODE_PENDING_WRITERS (1)
1539 #define CIFS_INODE_FLAG_UNUSED (2)
1540 #define CIFS_INO_DELETE_PENDING (3)
1541 #define CIFS_INO_INVALID_MAPPING (4)
1542 #define CIFS_INO_LOCK (5)
1543 #define CIFS_INO_MODIFIED_ATTR (6)
1544 #define CIFS_INO_CLOSE_ON_LOCK (7)
1545 unsigned long flags;
1546 spinlock_t writers_lock;
1547 unsigned int writers;
1548 unsigned long time;
1549 u64 server_eof;
1550 u64 uniqueid;
1551 u64 createtime;
1552 __u8 lease_key[SMB2_LEASE_KEY_SIZE];
1553 struct list_head deferred_closes;
1554 spinlock_t deferred_lock;
1555 bool lease_granted;
1556 };
1557
1558 static inline struct cifsInodeInfo *
1559 CIFS_I(struct inode *inode)
1560 {
1561 return container_of(inode, struct cifsInodeInfo, netfs.inode);
1562 }
1563
1564 static inline struct cifs_sb_info *
1565 CIFS_SB(struct super_block *sb)
1566 {
1567 return sb->s_fs_info;
1568 }
1569
1570 static inline struct cifs_sb_info *
1571 CIFS_FILE_SB(struct file *file)
1572 {
1573 return CIFS_SB(file_inode(file)->i_sb);
1574 }
1575
1576 static inline char CIFS_DIR_SEP(const struct cifs_sb_info *cifs_sb)
1577 {
1578 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
1579 return '/';
1580 else
1581 return '\\';
1582 }
1583
1584 static inline void
1585 convert_delimiter(char *path, char delim)
1586 {
1587 char old_delim, *pos;
1588
1589 if (delim == '/')
1590 old_delim = '\\';
1591 else
1592 old_delim = '/';
1593
1594 pos = path;
1595 while ((pos = strchr(pos, old_delim)))
1596 *pos = delim;
1597 }
1598
1599 #define cifs_stats_inc atomic_inc
1600
1601 static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
1602 unsigned int bytes)
1603 {
1604 if (bytes) {
1605 spin_lock(&tcon->stat_lock);
1606 tcon->bytes_written += bytes;
1607 spin_unlock(&tcon->stat_lock);
1608 }
1609 }
1610
1611 static inline void cifs_stats_bytes_read(struct cifs_tcon *tcon,
1612 unsigned int bytes)
1613 {
1614 spin_lock(&tcon->stat_lock);
1615 tcon->bytes_read += bytes;
1616 spin_unlock(&tcon->stat_lock);
1617 }
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632 typedef int (mid_receive_t)(struct TCP_Server_Info *server,
1633 struct mid_q_entry *mid);
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643 typedef void (mid_callback_t)(struct mid_q_entry *mid);
1644
1645
1646
1647
1648
1649 typedef int (mid_handle_t)(struct TCP_Server_Info *server,
1650 struct mid_q_entry *mid);
1651
1652
1653 struct mid_q_entry {
1654 struct list_head qhead;
1655 struct kref refcount;
1656 struct TCP_Server_Info *server;
1657 __u64 mid;
1658 __u16 credits;
1659 __u16 credits_received;
1660 __u32 pid;
1661 __u32 sequence_number;
1662 unsigned long when_alloc;
1663 #ifdef CONFIG_CIFS_STATS2
1664 unsigned long when_sent;
1665 unsigned long when_received;
1666 #endif
1667 mid_receive_t *receive;
1668 mid_callback_t *callback;
1669 mid_handle_t *handle;
1670 void *callback_data;
1671 struct task_struct *creator;
1672 void *resp_buf;
1673 unsigned int resp_buf_size;
1674 int mid_state;
1675 unsigned int mid_flags;
1676 __le16 command;
1677 unsigned int optype;
1678 bool large_buf:1;
1679 bool multiRsp:1;
1680 bool multiEnd:1;
1681 bool decrypted:1;
1682 };
1683
1684 struct close_cancelled_open {
1685 struct cifs_fid fid;
1686 struct cifs_tcon *tcon;
1687 struct work_struct work;
1688 __u64 mid;
1689 __u16 cmd;
1690 };
1691
1692
1693
1694 static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
1695 {
1696 atomic_inc(&server->in_send);
1697 }
1698
1699 static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
1700 {
1701 atomic_dec(&server->in_send);
1702 }
1703
1704 static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
1705 {
1706 atomic_inc(&server->num_waiters);
1707 }
1708
1709 static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
1710 {
1711 atomic_dec(&server->num_waiters);
1712 }
1713
1714 #ifdef CONFIG_CIFS_STATS2
1715 static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1716 {
1717 mid->when_sent = jiffies;
1718 }
1719 #else
1720 static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1721 {
1722 }
1723 #endif
1724
1725
1726 struct dir_notify_req {
1727 struct list_head lhead;
1728 __le16 Pid;
1729 __le16 PidHigh;
1730 __u16 Mid;
1731 __u16 Tid;
1732 __u16 Uid;
1733 __u16 netfid;
1734 __u32 filter;
1735 int multishot;
1736 struct file *pfile;
1737 };
1738
1739 struct dfs_info3_param {
1740 int flags;
1741 int path_consumed;
1742 int server_type;
1743 int ref_flag;
1744 char *path_name;
1745 char *node_name;
1746 int ttl;
1747 };
1748
1749 struct file_list {
1750 struct list_head list;
1751 struct cifsFileInfo *cfile;
1752 };
1753
1754 static inline void free_dfs_info_param(struct dfs_info3_param *param)
1755 {
1756 if (param) {
1757 kfree(param->path_name);
1758 kfree(param->node_name);
1759 }
1760 }
1761
1762 static inline void free_dfs_info_array(struct dfs_info3_param *param,
1763 int number_of_items)
1764 {
1765 int i;
1766 if ((number_of_items == 0) || (param == NULL))
1767 return;
1768 for (i = 0; i < number_of_items; i++) {
1769 kfree(param[i].path_name);
1770 kfree(param[i].node_name);
1771 }
1772 kfree(param);
1773 }
1774
1775 static inline bool is_interrupt_error(int error)
1776 {
1777 switch (error) {
1778 case -EINTR:
1779 case -ERESTARTSYS:
1780 case -ERESTARTNOHAND:
1781 case -ERESTARTNOINTR:
1782 return true;
1783 }
1784 return false;
1785 }
1786
1787 static inline bool is_retryable_error(int error)
1788 {
1789 if (is_interrupt_error(error) || error == -EAGAIN)
1790 return true;
1791 return false;
1792 }
1793
1794
1795
1796 #define FIND_WR_ANY 0
1797 #define FIND_WR_FSUID_ONLY 1
1798 #define FIND_WR_WITH_DELETE 2
1799
1800 #define MID_FREE 0
1801 #define MID_REQUEST_ALLOCATED 1
1802 #define MID_REQUEST_SUBMITTED 2
1803 #define MID_RESPONSE_RECEIVED 4
1804 #define MID_RETRY_NEEDED 8
1805 #define MID_RESPONSE_MALFORMED 0x10
1806 #define MID_SHUTDOWN 0x20
1807
1808
1809 #define MID_WAIT_CANCELLED 1
1810 #define MID_DELETED 2
1811
1812
1813 #define CIFS_NO_BUFFER 0
1814 #define CIFS_SMALL_BUFFER 1
1815 #define CIFS_LARGE_BUFFER 2
1816 #define CIFS_IOVEC 4
1817
1818
1819 #define CIFS_BLOCKING_OP 1
1820 #define CIFS_NON_BLOCKING 2
1821 #define CIFS_TIMEOUT_MASK 0x003
1822 #define CIFS_LOG_ERROR 0x010
1823 #define CIFS_LARGE_BUF_OP 0x020
1824 #define CIFS_NO_RSP_BUF 0x040
1825
1826
1827 #define CIFS_ECHO_OP 0x080
1828 #define CIFS_OBREAK_OP 0x0100
1829 #define CIFS_NEG_OP 0x0200
1830 #define CIFS_CP_CREATE_CLOSE_OP 0x0400
1831
1832 #define CIFS_SESS_OP 0x2000
1833 #define CIFS_OP_MASK 0x2780
1834
1835 #define CIFS_HAS_CREDITS 0x0400
1836 #define CIFS_TRANSFORM_REQ 0x0800
1837 #define CIFS_NO_SRV_RSP 0x1000
1838
1839
1840 #define CIFSSEC_MAY_SIGN 0x00001
1841 #define CIFSSEC_MAY_NTLMV2 0x00004
1842 #define CIFSSEC_MAY_KRB5 0x00008
1843 #define CIFSSEC_MAY_SEAL 0x00040
1844 #define CIFSSEC_MAY_NTLMSSP 0x00080
1845
1846 #define CIFSSEC_MUST_SIGN 0x01001
1847
1848
1849
1850 #define CIFSSEC_MUST_NTLMV2 0x04004
1851 #define CIFSSEC_MUST_KRB5 0x08008
1852 #ifdef CONFIG_CIFS_UPCALL
1853 #define CIFSSEC_MASK 0x8F08F
1854 #else
1855 #define CIFSSEC_MASK 0x87087
1856 #endif
1857 #define CIFSSEC_MUST_SEAL 0x40040
1858 #define CIFSSEC_MUST_NTLMSSP 0x80080
1859
1860 #define CIFSSEC_DEF (CIFSSEC_MAY_SIGN | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_NTLMSSP)
1861 #define CIFSSEC_MAX (CIFSSEC_MUST_NTLMV2)
1862 #define CIFSSEC_AUTH_MASK (CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_NTLMSSP)
1863
1864
1865
1866
1867
1868
1869 #define UID_HASH (16)
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951 #ifdef DECLARE_GLOBALS_HERE
1952 #define GLOBAL_EXTERN
1953 #else
1954 #define GLOBAL_EXTERN extern
1955 #endif
1956
1957
1958
1959
1960
1961
1962
1963
1964 extern struct list_head cifs_tcp_ses_list;
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974 extern spinlock_t cifs_tcp_ses_lock;
1975
1976
1977
1978
1979 extern unsigned int GlobalCurrentXid;
1980 extern unsigned int GlobalTotalActiveXid;
1981 extern unsigned int GlobalMaxActiveXid;
1982 extern spinlock_t GlobalMid_Lock;
1983
1984
1985
1986
1987 extern atomic_t sesInfoAllocCount;
1988 extern atomic_t tconInfoAllocCount;
1989 extern atomic_t tcpSesNextId;
1990 extern atomic_t tcpSesAllocCount;
1991 extern atomic_t tcpSesReconnectCount;
1992 extern atomic_t tconInfoReconnectCount;
1993
1994
1995 extern atomic_t buf_alloc_count;
1996 extern atomic_t small_buf_alloc_count;
1997 #ifdef CONFIG_CIFS_STATS2
1998 extern atomic_t total_buf_alloc_count;
1999 extern atomic_t total_small_buf_alloc_count;
2000 extern unsigned int slow_rsp_threshold;
2001 #endif
2002
2003
2004 extern bool enable_oplocks;
2005 extern bool lookupCacheEnabled;
2006 extern unsigned int global_secflags;
2007
2008 extern unsigned int sign_CIFS_PDUs;
2009 extern bool enable_gcm_256;
2010 extern bool require_gcm_256;
2011 extern bool enable_negotiate_signing;
2012 extern bool linuxExtEnabled;
2013 extern unsigned int CIFSMaxBufSize;
2014 extern unsigned int cifs_min_rcv;
2015 extern unsigned int cifs_min_small;
2016 extern unsigned int cifs_max_pending;
2017 extern bool disable_legacy_dialects;
2018 extern atomic_t mid_count;
2019
2020 void cifs_oplock_break(struct work_struct *work);
2021 void cifs_queue_oplock_break(struct cifsFileInfo *cfile);
2022 void smb2_deferred_work_close(struct work_struct *work);
2023
2024 extern const struct slow_work_ops cifs_oplock_break_ops;
2025 extern struct workqueue_struct *cifsiod_wq;
2026 extern struct workqueue_struct *decrypt_wq;
2027 extern struct workqueue_struct *fileinfo_put_wq;
2028 extern struct workqueue_struct *cifsoplockd_wq;
2029 extern struct workqueue_struct *deferredclose_wq;
2030 extern __u32 cifs_lock_secret;
2031
2032 extern mempool_t *cifs_mid_poolp;
2033
2034
2035 #define SMB1_VERSION_STRING "1.0"
2036 #define SMB20_VERSION_STRING "2.0"
2037 #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
2038 extern struct smb_version_operations smb1_operations;
2039 extern struct smb_version_values smb1_values;
2040 extern struct smb_version_operations smb20_operations;
2041 extern struct smb_version_values smb20_values;
2042 #endif
2043 #define SMB21_VERSION_STRING "2.1"
2044 extern struct smb_version_operations smb21_operations;
2045 extern struct smb_version_values smb21_values;
2046 #define SMBDEFAULT_VERSION_STRING "default"
2047 extern struct smb_version_values smbdefault_values;
2048 #define SMB3ANY_VERSION_STRING "3"
2049 extern struct smb_version_values smb3any_values;
2050 #define SMB30_VERSION_STRING "3.0"
2051 extern struct smb_version_operations smb30_operations;
2052 extern struct smb_version_values smb30_values;
2053 #define SMB302_VERSION_STRING "3.02"
2054 #define ALT_SMB302_VERSION_STRING "3.0.2"
2055
2056 extern struct smb_version_values smb302_values;
2057 #define SMB311_VERSION_STRING "3.1.1"
2058 #define ALT_SMB311_VERSION_STRING "3.11"
2059 extern struct smb_version_operations smb311_operations;
2060 extern struct smb_version_values smb311_values;
2061
2062 static inline char *get_security_type_str(enum securityEnum sectype)
2063 {
2064 switch (sectype) {
2065 case RawNTLMSSP:
2066 return "RawNTLMSSP";
2067 case Kerberos:
2068 return "Kerberos";
2069 case NTLMv2:
2070 return "NTLMv2";
2071 default:
2072 return "Unknown";
2073 }
2074 }
2075
2076 static inline bool is_smb1_server(struct TCP_Server_Info *server)
2077 {
2078 return strcmp(server->vals->version_string, SMB1_VERSION_STRING) == 0;
2079 }
2080
2081 static inline bool is_tcon_dfs(struct cifs_tcon *tcon)
2082 {
2083
2084
2085
2086
2087
2088
2089
2090 if (!tcon || !tcon->ses || !tcon->ses->server)
2091 return false;
2092 return is_smb1_server(tcon->ses->server) ? tcon->Flags & SMB_SHARE_IS_IN_DFS :
2093 tcon->share_flags & (SHI1005_FLAGS_DFS | SHI1005_FLAGS_DFS_ROOT);
2094 }
2095
2096 static inline bool cifs_is_referral_server(struct cifs_tcon *tcon,
2097 const struct dfs_info3_param *ref)
2098 {
2099
2100
2101
2102
2103 return is_tcon_dfs(tcon) || (ref && (ref->flags & DFSREF_REFERRAL_SERVER));
2104 }
2105
2106 static inline u64 cifs_flock_len(const struct file_lock *fl)
2107 {
2108 return (u64)fl->fl_end - fl->fl_start + 1;
2109 }
2110
2111 static inline size_t ntlmssp_workstation_name_size(const struct cifs_ses *ses)
2112 {
2113 if (WARN_ON_ONCE(!ses || !ses->server))
2114 return 0;
2115
2116
2117
2118
2119 if (ses->server->dialect <= SMB20_PROT_ID)
2120 return min_t(size_t, sizeof(ses->workstation_name), RFC1001_NAME_LEN_WITH_NULL);
2121 return sizeof(ses->workstation_name);
2122 }
2123
2124 #endif