1
2
3
4
5
6
7
8
9
10#ifndef _CIFS_GLOB_H
11#define _CIFS_GLOB_H
12
13#include <linux/in.h>
14#include <linux/in6.h>
15#include <linux/inet.h>
16#include <linux/slab.h>
17#include <linux/mempool.h>
18#include <linux/workqueue.h>
19#include "cifs_fs_sb.h"
20#include "cifsacl.h"
21#include <crypto/internal/hash.h>
22#include <linux/scatterlist.h>
23#include <uapi/linux/cifs/cifs_mount.h>
24#include "smb2pdu.h"
25
26#define CIFS_MAGIC_NUMBER 0xFF534D42
27
28#define SMB_PATH_MAX 260
29#define CIFS_PORT 445
30#define RFC1001_PORT 139
31
32
33
34
35#define MAX_UID_INFO 16
36#define MAX_SES_INFO 2
37#define MAX_TCON_INFO 4
38
39#define MAX_TREE_SIZE (2 + CIFS_NI_MAXHOST + 1 + CIFS_MAX_SHARE_LEN + 1)
40
41#define CIFS_MIN_RCV_POOL 4
42
43#define MAX_REOPEN_ATT 5
44
45
46
47#define CIFS_DEF_ACTIMEO (1 * HZ)
48
49
50
51
52#define CIFS_MAX_ACTIMEO (1 << 30)
53
54
55
56
57
58#define SMB3_MAX_HANDLE_TIMEOUT 960000
59
60
61
62
63
64#define CIFS_MAX_REQ 32767
65
66#define RFC1001_NAME_LEN 15
67#define RFC1001_NAME_LEN_WITH_NULL (RFC1001_NAME_LEN + 1)
68
69
70#define SERVER_NAME_LENGTH 80
71#define SERVER_NAME_LEN_WITH_NULL (SERVER_NAME_LENGTH + 1)
72
73
74#define SMB_ECHO_INTERVAL_MIN 1
75#define SMB_ECHO_INTERVAL_MAX 600
76#define SMB_ECHO_INTERVAL_DEFAULT 60
77
78
79#define SMB_DNS_RESOLVE_INTERVAL_DEFAULT 600
80
81
82#define MAX_COMPOUND 5
83
84
85
86
87
88
89
90
91
92
93
94#define SMB2_MAX_CREDITS_AVAILABLE 32000
95
96#include "cifspdu.h"
97
98#ifndef XATTR_DOS_ATTRIB
99#define XATTR_DOS_ATTRIB "user.DOSATTRIB"
100#endif
101
102
103
104
105
106
107enum statusEnum {
108 CifsNew = 0,
109 CifsGood,
110 CifsExiting,
111 CifsNeedReconnect,
112 CifsNeedNegotiate
113};
114
115enum securityEnum {
116 Unspecified = 0,
117 LANMAN,
118 NTLM,
119 NTLMv2,
120 RawNTLMSSP,
121 Kerberos,
122};
123
124struct session_key {
125 unsigned int len;
126 char *response;
127};
128
129
130struct sdesc {
131 struct shash_desc shash;
132 char ctx[];
133};
134
135
136struct cifs_secmech {
137 struct crypto_shash *hmacmd5;
138 struct crypto_shash *md5;
139 struct crypto_shash *hmacsha256;
140 struct crypto_shash *cmacaes;
141 struct crypto_shash *sha512;
142 struct sdesc *sdeschmacmd5;
143 struct sdesc *sdescmd5;
144 struct sdesc *sdeschmacsha256;
145 struct sdesc *sdesccmacaes;
146 struct sdesc *sdescsha512;
147 struct crypto_aead *ccmaesencrypt;
148 struct crypto_aead *ccmaesdecrypt;
149};
150
151
152struct ntlmssp_auth {
153 bool sesskey_per_smbsess;
154 __u32 client_flags;
155 __u32 server_flags;
156 unsigned char ciphertext[CIFS_CPHTXT_SIZE];
157 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
158};
159
160struct cifs_cred {
161 int uid;
162 int gid;
163 int mode;
164 int cecount;
165 struct cifs_sid osid;
166 struct cifs_sid gsid;
167 struct cifs_ntace *ntaces;
168 struct cifs_ace *aces;
169};
170
171
172
173
174
175
176
177
178
179
180
181
182
183struct smb_rqst {
184 struct kvec *rq_iov;
185 unsigned int rq_nvec;
186 struct page **rq_pages;
187 unsigned int rq_offset;
188 unsigned int rq_npages;
189 unsigned int rq_pagesz;
190 unsigned int rq_tailsz;
191};
192
193struct mid_q_entry;
194struct TCP_Server_Info;
195struct cifsFileInfo;
196struct cifs_ses;
197struct cifs_tcon;
198struct dfs_info3_param;
199struct cifs_fattr;
200struct smb3_fs_context;
201struct cifs_fid;
202struct cifs_readdata;
203struct cifs_writedata;
204struct cifs_io_parms;
205struct cifs_search_info;
206struct cifsInodeInfo;
207struct cifs_open_parms;
208struct cifs_credits;
209
210struct smb_version_operations {
211 int (*send_cancel)(struct TCP_Server_Info *, struct smb_rqst *,
212 struct mid_q_entry *);
213 bool (*compare_fids)(struct cifsFileInfo *, struct cifsFileInfo *);
214
215 struct mid_q_entry *(*setup_request)(struct cifs_ses *,
216 struct TCP_Server_Info *,
217 struct smb_rqst *);
218
219 struct mid_q_entry *(*setup_async_request)(struct TCP_Server_Info *,
220 struct smb_rqst *);
221
222 int (*check_receive)(struct mid_q_entry *, struct TCP_Server_Info *,
223 bool);
224 void (*add_credits)(struct TCP_Server_Info *server,
225 const struct cifs_credits *credits,
226 const int optype);
227 void (*set_credits)(struct TCP_Server_Info *, const int);
228 int * (*get_credits_field)(struct TCP_Server_Info *, const int);
229 unsigned int (*get_credits)(struct mid_q_entry *);
230 __u64 (*get_next_mid)(struct TCP_Server_Info *);
231 void (*revert_current_mid)(struct TCP_Server_Info *server,
232 const unsigned int val);
233
234 unsigned int (*read_data_offset)(char *);
235
236
237
238
239
240
241
242 unsigned int (*read_data_length)(char *, bool in_remaining);
243
244 int (*map_error)(char *, bool);
245
246 struct mid_q_entry * (*find_mid)(struct TCP_Server_Info *, char *);
247 void (*dump_detail)(void *buf, struct TCP_Server_Info *ptcp_info);
248 void (*clear_stats)(struct cifs_tcon *);
249 void (*print_stats)(struct seq_file *m, struct cifs_tcon *);
250 void (*dump_share_caps)(struct seq_file *, struct cifs_tcon *);
251
252 int (*check_message)(char *, unsigned int, struct TCP_Server_Info *);
253 bool (*is_oplock_break)(char *, struct TCP_Server_Info *);
254 int (*handle_cancelled_mid)(struct mid_q_entry *, struct TCP_Server_Info *);
255 void (*downgrade_oplock)(struct TCP_Server_Info *server,
256 struct cifsInodeInfo *cinode, __u32 oplock,
257 unsigned int epoch, bool *purge_cache);
258
259 bool (*check_trans2)(struct mid_q_entry *, struct TCP_Server_Info *,
260 char *, int);
261
262 bool (*need_neg)(struct TCP_Server_Info *);
263
264 int (*negotiate)(const unsigned int, struct cifs_ses *);
265
266 unsigned int (*negotiate_wsize)(struct cifs_tcon *tcon, struct smb3_fs_context *ctx);
267
268 unsigned int (*negotiate_rsize)(struct cifs_tcon *tcon, struct smb3_fs_context *ctx);
269
270 int (*sess_setup)(const unsigned int, struct cifs_ses *,
271 const struct nls_table *);
272
273 int (*logoff)(const unsigned int, struct cifs_ses *);
274
275 int (*tree_connect)(const unsigned int, struct cifs_ses *, const char *,
276 struct cifs_tcon *, const struct nls_table *);
277
278 int (*tree_disconnect)(const unsigned int, struct cifs_tcon *);
279
280 int (*get_dfs_refer)(const unsigned int, struct cifs_ses *,
281 const char *, struct dfs_info3_param **,
282 unsigned int *, const struct nls_table *, int);
283
284 void (*qfs_tcon)(const unsigned int, struct cifs_tcon *,
285 struct cifs_sb_info *);
286
287 int (*is_path_accessible)(const unsigned int, struct cifs_tcon *,
288 struct cifs_sb_info *, const char *);
289
290 int (*query_path_info)(const unsigned int, struct cifs_tcon *,
291 struct cifs_sb_info *, const char *,
292 FILE_ALL_INFO *, bool *, bool *);
293
294 int (*query_file_info)(const unsigned int, struct cifs_tcon *,
295 struct cifs_fid *, FILE_ALL_INFO *);
296
297 int (*query_reparse_tag)(const unsigned int xid, struct cifs_tcon *tcon,
298 struct cifs_sb_info *cifs_sb, const char *path,
299 __u32 *reparse_tag);
300
301 int (*get_srv_inum)(const unsigned int, struct cifs_tcon *,
302 struct cifs_sb_info *, const char *,
303 u64 *uniqueid, FILE_ALL_INFO *);
304
305 int (*set_path_size)(const unsigned int, struct cifs_tcon *,
306 const char *, __u64, struct cifs_sb_info *, bool);
307
308 int (*set_file_size)(const unsigned int, struct cifs_tcon *,
309 struct cifsFileInfo *, __u64, bool);
310
311 int (*set_file_info)(struct inode *, const char *, FILE_BASIC_INFO *,
312 const unsigned int);
313 int (*set_compression)(const unsigned int, struct cifs_tcon *,
314 struct cifsFileInfo *);
315
316 bool (*can_echo)(struct TCP_Server_Info *);
317
318 int (*echo)(struct TCP_Server_Info *);
319
320 int (*posix_mkdir)(const unsigned int xid, struct inode *inode,
321 umode_t mode, struct cifs_tcon *tcon,
322 const char *full_path,
323 struct cifs_sb_info *cifs_sb);
324 int (*mkdir)(const unsigned int xid, struct inode *inode, umode_t mode,
325 struct cifs_tcon *tcon, const char *name,
326 struct cifs_sb_info *sb);
327
328 void (*mkdir_setinfo)(struct inode *, const char *,
329 struct cifs_sb_info *, struct cifs_tcon *,
330 const unsigned int);
331
332 int (*rmdir)(const unsigned int, struct cifs_tcon *, const char *,
333 struct cifs_sb_info *);
334
335 int (*unlink)(const unsigned int, struct cifs_tcon *, const char *,
336 struct cifs_sb_info *);
337
338 int (*rename_pending_delete)(const char *, struct dentry *,
339 const unsigned int);
340
341 int (*rename)(const unsigned int, struct cifs_tcon *, const char *,
342 const char *, struct cifs_sb_info *);
343
344 int (*create_hardlink)(const unsigned int, struct cifs_tcon *,
345 const char *, const char *,
346 struct cifs_sb_info *);
347
348 int (*query_symlink)(const unsigned int, struct cifs_tcon *,
349 struct cifs_sb_info *, const char *,
350 char **, bool);
351
352 int (*open)(const unsigned int, struct cifs_open_parms *,
353 __u32 *, FILE_ALL_INFO *);
354
355 void (*set_fid)(struct cifsFileInfo *, struct cifs_fid *, __u32);
356
357 void (*close)(const unsigned int, struct cifs_tcon *,
358 struct cifs_fid *);
359
360 void (*close_getattr)(const unsigned int xid, struct cifs_tcon *tcon,
361 struct cifsFileInfo *pfile_info);
362
363 int (*flush)(const unsigned int, struct cifs_tcon *, struct cifs_fid *);
364
365 int (*async_readv)(struct cifs_readdata *);
366
367 int (*async_writev)(struct cifs_writedata *,
368 void (*release)(struct kref *));
369
370 int (*sync_read)(const unsigned int, struct cifs_fid *,
371 struct cifs_io_parms *, unsigned int *, char **,
372 int *);
373
374 int (*sync_write)(const unsigned int, struct cifs_fid *,
375 struct cifs_io_parms *, unsigned int *, struct kvec *,
376 unsigned long);
377
378 int (*query_dir_first)(const unsigned int, struct cifs_tcon *,
379 const char *, struct cifs_sb_info *,
380 struct cifs_fid *, __u16,
381 struct cifs_search_info *);
382
383 int (*query_dir_next)(const unsigned int, struct cifs_tcon *,
384 struct cifs_fid *,
385 __u16, struct cifs_search_info *srch_inf);
386
387 int (*close_dir)(const unsigned int, struct cifs_tcon *,
388 struct cifs_fid *);
389
390 unsigned int (*calc_smb_size)(void *buf, struct TCP_Server_Info *ptcpi);
391
392 bool (*is_status_pending)(char *buf, struct TCP_Server_Info *server);
393
394 bool (*is_session_expired)(char *);
395
396 int (*oplock_response)(struct cifs_tcon *, struct cifs_fid *,
397 struct cifsInodeInfo *);
398
399 int (*queryfs)(const unsigned int, struct cifs_tcon *,
400 struct cifs_sb_info *, struct kstatfs *);
401
402 int (*mand_lock)(const unsigned int, struct cifsFileInfo *, __u64,
403 __u64, __u32, int, int, bool);
404
405 int (*mand_unlock_range)(struct cifsFileInfo *, struct file_lock *,
406 const unsigned int);
407
408 int (*push_mand_locks)(struct cifsFileInfo *);
409
410 void (*get_lease_key)(struct inode *, struct cifs_fid *);
411
412 void (*set_lease_key)(struct inode *, struct cifs_fid *);
413
414 void (*new_lease_key)(struct cifs_fid *);
415 int (*generate_signingkey)(struct cifs_ses *);
416 int (*calc_signature)(struct smb_rqst *, struct TCP_Server_Info *,
417 bool allocate_crypto);
418 int (*set_integrity)(const unsigned int, struct cifs_tcon *tcon,
419 struct cifsFileInfo *src_file);
420 int (*enum_snapshots)(const unsigned int xid, struct cifs_tcon *tcon,
421 struct cifsFileInfo *src_file, void __user *);
422 int (*notify)(const unsigned int xid, struct file *pfile,
423 void __user *pbuf);
424 int (*query_mf_symlink)(unsigned int, struct cifs_tcon *,
425 struct cifs_sb_info *, const unsigned char *,
426 char *, unsigned int *);
427 int (*create_mf_symlink)(unsigned int, struct cifs_tcon *,
428 struct cifs_sb_info *, const unsigned char *,
429 char *, unsigned int *);
430
431 bool (*is_read_op)(__u32);
432
433 void (*set_oplock_level)(struct cifsInodeInfo *, __u32, unsigned int,
434 bool *);
435
436 char * (*create_lease_buf)(u8 *lease_key, u8 oplock);
437
438 __u8 (*parse_lease_buf)(void *buf, unsigned int *epoch, char *lkey);
439 ssize_t (*copychunk_range)(const unsigned int,
440 struct cifsFileInfo *src_file,
441 struct cifsFileInfo *target_file,
442 u64 src_off, u64 len, u64 dest_off);
443 int (*duplicate_extents)(const unsigned int, struct cifsFileInfo *src,
444 struct cifsFileInfo *target_file, u64 src_off, u64 len,
445 u64 dest_off);
446 int (*validate_negotiate)(const unsigned int, struct cifs_tcon *);
447 ssize_t (*query_all_EAs)(const unsigned int, struct cifs_tcon *,
448 const unsigned char *, const unsigned char *, char *,
449 size_t, struct cifs_sb_info *);
450 int (*set_EA)(const unsigned int, struct cifs_tcon *, const char *,
451 const char *, const void *, const __u16,
452 const struct nls_table *, struct cifs_sb_info *);
453 struct cifs_ntsd * (*get_acl)(struct cifs_sb_info *, struct inode *,
454 const char *, u32 *, u32);
455 struct cifs_ntsd * (*get_acl_by_fid)(struct cifs_sb_info *,
456 const struct cifs_fid *, u32 *, u32);
457 int (*set_acl)(struct cifs_ntsd *, __u32, struct inode *, const char *,
458 int);
459
460 unsigned int (*wp_retry_size)(struct inode *);
461
462 int (*wait_mtu_credits)(struct TCP_Server_Info *, unsigned int,
463 unsigned int *, struct cifs_credits *);
464
465 int (*adjust_credits)(struct TCP_Server_Info *server,
466 struct cifs_credits *credits,
467 const unsigned int payload_size);
468
469 bool (*dir_needs_close)(struct cifsFileInfo *);
470 long (*fallocate)(struct file *, struct cifs_tcon *, int, loff_t,
471 loff_t);
472
473 int (*init_transform_rq)(struct TCP_Server_Info *, int num_rqst,
474 struct smb_rqst *, struct smb_rqst *);
475 int (*is_transform_hdr)(void *buf);
476 int (*receive_transform)(struct TCP_Server_Info *,
477 struct mid_q_entry **, char **, int *);
478 enum securityEnum (*select_sectype)(struct TCP_Server_Info *,
479 enum securityEnum);
480 int (*next_header)(char *);
481
482 int (*ioctl_query_info)(const unsigned int xid,
483 struct cifs_tcon *tcon,
484 struct cifs_sb_info *cifs_sb,
485 __le16 *path, int is_dir,
486 unsigned long p);
487
488 int (*make_node)(unsigned int xid,
489 struct inode *inode,
490 struct dentry *dentry,
491 struct cifs_tcon *tcon,
492 const char *full_path,
493 umode_t mode,
494 dev_t device_number);
495
496 int (*fiemap)(struct cifs_tcon *tcon, struct cifsFileInfo *,
497 struct fiemap_extent_info *, u64, u64);
498
499 loff_t (*llseek)(struct file *, struct cifs_tcon *, loff_t, int);
500
501 bool (*is_status_io_timeout)(char *buf);
502
503 void (*is_network_name_deleted)(char *buf, struct TCP_Server_Info *srv);
504};
505
506struct smb_version_values {
507 char *version_string;
508 __u16 protocol_id;
509 __u32 req_capabilities;
510 __u32 large_lock_type;
511 __u32 exclusive_lock_type;
512 __u32 shared_lock_type;
513 __u32 unlock_lock_type;
514 size_t header_preamble_size;
515 size_t header_size;
516 size_t max_header_size;
517 size_t read_rsp_size;
518 __le16 lock_cmd;
519 unsigned int cap_unix;
520 unsigned int cap_nt_find;
521 unsigned int cap_large_files;
522 __u16 signing_enabled;
523 __u16 signing_required;
524 size_t create_lease_size;
525};
526
527#define HEADER_SIZE(server) (server->vals->header_size)
528#define MAX_HEADER_SIZE(server) (server->vals->max_header_size)
529
530
531
532
533
534#define CIFS_MOUNT_MASK (CIFS_MOUNT_NO_PERM | CIFS_MOUNT_SET_UID | \
535 CIFS_MOUNT_SERVER_INUM | CIFS_MOUNT_DIRECT_IO | \
536 CIFS_MOUNT_NO_XATTR | CIFS_MOUNT_MAP_SPECIAL_CHR | \
537 CIFS_MOUNT_MAP_SFM_CHR | \
538 CIFS_MOUNT_UNX_EMUL | CIFS_MOUNT_NO_BRL | \
539 CIFS_MOUNT_CIFS_ACL | CIFS_MOUNT_OVERR_UID | \
540 CIFS_MOUNT_OVERR_GID | CIFS_MOUNT_DYNPERM | \
541 CIFS_MOUNT_NOPOSIXBRL | CIFS_MOUNT_NOSSYNC | \
542 CIFS_MOUNT_FSCACHE | CIFS_MOUNT_MF_SYMLINKS | \
543 CIFS_MOUNT_MULTIUSER | CIFS_MOUNT_STRICT_IO | \
544 CIFS_MOUNT_CIFS_BACKUPUID | CIFS_MOUNT_CIFS_BACKUPGID | \
545 CIFS_MOUNT_UID_FROM_ACL | CIFS_MOUNT_NO_HANDLE_CACHE | \
546 CIFS_MOUNT_NO_DFS | CIFS_MOUNT_MODE_FROM_SID | \
547 CIFS_MOUNT_RO_CACHE | CIFS_MOUNT_RW_CACHE)
548
549
550
551
552
553#define CIFS_MS_MASK (SB_RDONLY | SB_MANDLOCK | SB_NOEXEC | SB_NOSUID | \
554 SB_NODEV | SB_SYNCHRONOUS)
555
556struct cifs_mnt_data {
557 struct cifs_sb_info *cifs_sb;
558 struct smb3_fs_context *ctx;
559 int flags;
560};
561
562static inline unsigned int
563get_rfc1002_length(void *buf)
564{
565 return be32_to_cpu(*((__be32 *)buf)) & 0xffffff;
566}
567
568static inline void
569inc_rfc1001_len(void *buf, int count)
570{
571 be32_add_cpu((__be32 *)buf, count);
572}
573
574struct TCP_Server_Info {
575 struct list_head tcp_ses_list;
576 struct list_head smb_ses_list;
577 __u64 conn_id;
578 int srv_count;
579
580 char server_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
581 struct smb_version_operations *ops;
582 struct smb_version_values *vals;
583
584 enum statusEnum tcpStatus;
585 char *hostname;
586 struct socket *ssocket;
587 struct sockaddr_storage dstaddr;
588 struct sockaddr_storage srcaddr;
589#ifdef CONFIG_NET_NS
590 struct net *net;
591#endif
592 wait_queue_head_t response_q;
593 wait_queue_head_t request_q;
594 struct list_head pending_mid_q;
595 bool noblocksnd;
596 bool noautotune;
597 bool tcp_nodelay;
598 unsigned int credits;
599 unsigned int max_credits;
600 unsigned int in_flight;
601 unsigned int max_in_flight;
602 spinlock_t req_lock;
603 struct mutex srv_mutex;
604 struct task_struct *tsk;
605 char server_GUID[16];
606 __u16 sec_mode;
607 bool sign;
608 bool ignore_signature:1;
609 bool session_estab;
610 int echo_credits;
611 int oplock_credits;
612 bool echoes:1;
613 __u8 client_guid[SMB2_CLIENT_GUID_SIZE];
614 u16 dialect;
615 bool oplocks:1;
616 unsigned int maxReq;
617
618
619 unsigned int maxBuf;
620
621
622
623 unsigned int max_rw;
624
625
626 unsigned int capabilities;
627 int timeAdj;
628 __u64 CurrentMid;
629 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
630
631 char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
632 __u32 sequence_number;
633 __u32 reconnect_instance;
634 struct session_key session_key;
635 unsigned long lstrp;
636 struct cifs_secmech secmech;
637#define CIFS_NEGFLAVOR_LANMAN 0
638#define CIFS_NEGFLAVOR_UNENCAP 1
639#define CIFS_NEGFLAVOR_EXTENDED 2
640 char negflavor;
641
642 bool sec_ntlmssp;
643 bool sec_kerberosu2u;
644 bool sec_kerberos;
645 bool sec_mskerberos;
646 bool large_buf;
647
648 bool rdma;
649
650 struct smbd_connection *smbd_conn;
651 struct delayed_work echo;
652 struct delayed_work resolve;
653 char *smallbuf;
654 char *bigbuf;
655
656 unsigned int pdu_size;
657 unsigned int total_read;
658 atomic_t in_send;
659 atomic_t num_waiters;
660#ifdef CONFIG_CIFS_FSCACHE
661 struct fscache_cookie *fscache;
662#endif
663#ifdef CONFIG_CIFS_STATS2
664 atomic_t num_cmds[NUMBER_OF_SMB2_COMMANDS];
665 atomic_t smb2slowcmd[NUMBER_OF_SMB2_COMMANDS];
666 __u64 time_per_cmd[NUMBER_OF_SMB2_COMMANDS];
667 __u32 slowest_cmd[NUMBER_OF_SMB2_COMMANDS];
668 __u32 fastest_cmd[NUMBER_OF_SMB2_COMMANDS];
669#endif
670 unsigned int max_read;
671 unsigned int max_write;
672 unsigned int min_offload;
673 __le16 compress_algorithm;
674 __u16 signing_algorithm;
675 __le16 cipher_type;
676
677 __u8 preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
678 bool signing_negotiated;
679 bool posix_ext_supported;
680 struct delayed_work reconnect;
681 struct mutex reconnect_mutex;
682 unsigned long echo_interval;
683
684
685
686
687
688
689 int nr_targets;
690 bool noblockcnt;
691 bool is_channel;
692#ifdef CONFIG_CIFS_SWN_UPCALL
693 bool use_swn_dstaddr;
694 struct sockaddr_storage swn_dstaddr;
695#endif
696#ifdef CONFIG_CIFS_DFS_UPCALL
697 bool is_dfs_conn;
698#endif
699};
700
701struct cifs_credits {
702 unsigned int value;
703 unsigned int instance;
704};
705
706static inline unsigned int
707in_flight(struct TCP_Server_Info *server)
708{
709 unsigned int num;
710 spin_lock(&server->req_lock);
711 num = server->in_flight;
712 spin_unlock(&server->req_lock);
713 return num;
714}
715
716static inline bool
717has_credits(struct TCP_Server_Info *server, int *credits, int num_credits)
718{
719 int num;
720 spin_lock(&server->req_lock);
721 num = *credits;
722 spin_unlock(&server->req_lock);
723 return num >= num_credits;
724}
725
726static inline void
727add_credits(struct TCP_Server_Info *server, const struct cifs_credits *credits,
728 const int optype)
729{
730 server->ops->add_credits(server, credits, optype);
731}
732
733static inline void
734add_credits_and_wake_if(struct TCP_Server_Info *server,
735 const struct cifs_credits *credits, const int optype)
736{
737 if (credits->value) {
738 server->ops->add_credits(server, credits, optype);
739 wake_up(&server->request_q);
740 }
741}
742
743static inline void
744set_credits(struct TCP_Server_Info *server, const int val)
745{
746 server->ops->set_credits(server, val);
747}
748
749static inline int
750adjust_credits(struct TCP_Server_Info *server, struct cifs_credits *credits,
751 const unsigned int payload_size)
752{
753 return server->ops->adjust_credits ?
754 server->ops->adjust_credits(server, credits, payload_size) : 0;
755}
756
757static inline __le64
758get_next_mid64(struct TCP_Server_Info *server)
759{
760 return cpu_to_le64(server->ops->get_next_mid(server));
761}
762
763static inline __le16
764get_next_mid(struct TCP_Server_Info *server)
765{
766 __u16 mid = server->ops->get_next_mid(server);
767
768
769
770
771 return cpu_to_le16(mid);
772}
773
774static inline void
775revert_current_mid(struct TCP_Server_Info *server, const unsigned int val)
776{
777 if (server->ops->revert_current_mid)
778 server->ops->revert_current_mid(server, val);
779}
780
781static inline void
782revert_current_mid_from_hdr(struct TCP_Server_Info *server,
783 const struct smb2_sync_hdr *shdr)
784{
785 unsigned int num = le16_to_cpu(shdr->CreditCharge);
786
787 return revert_current_mid(server, num > 0 ? num : 1);
788}
789
790static inline __u16
791get_mid(const struct smb_hdr *smb)
792{
793 return le16_to_cpu(smb->Mid);
794}
795
796static inline bool
797compare_mid(__u16 mid, const struct smb_hdr *smb)
798{
799 return mid == le16_to_cpu(smb->Mid);
800}
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815#define CIFS_MAX_WSIZE ((1<<24) - 1 - sizeof(WRITE_REQ) + 4)
816#define CIFS_MAX_RSIZE ((1<<24) - sizeof(READ_RSP) + 4)
817
818
819
820
821
822
823#define CIFS_MAX_RFC1002_WSIZE ((1<<17) - 1 - sizeof(WRITE_REQ) + 4)
824#define CIFS_MAX_RFC1002_RSIZE ((1<<17) - 1 - sizeof(READ_RSP) + 4)
825
826
827
828
829
830
831#define CIFS_DEFAULT_IOSIZE (1024 * 1024)
832#define SMB3_DEFAULT_IOSIZE (4 * 1024 * 1024)
833
834
835
836
837
838
839
840
841
842
843
844
845#define CIFS_DEFAULT_NON_POSIX_RSIZE (60 * 1024)
846#define CIFS_DEFAULT_NON_POSIX_WSIZE (65536)
847
848
849
850
851
852
853#ifdef CONFIG_NET_NS
854
855static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
856{
857 return srv->net;
858}
859
860static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
861{
862 srv->net = net;
863}
864
865#else
866
867static inline struct net *cifs_net_ns(struct TCP_Server_Info *srv)
868{
869 return &init_net;
870}
871
872static inline void cifs_set_net_ns(struct TCP_Server_Info *srv, struct net *net)
873{
874}
875
876#endif
877
878struct cifs_server_iface {
879 size_t speed;
880 unsigned int rdma_capable : 1;
881 unsigned int rss_capable : 1;
882 struct sockaddr_storage sockaddr;
883};
884
885struct cifs_chan {
886 struct TCP_Server_Info *server;
887 __u8 signkey[SMB3_SIGN_KEY_SIZE];
888};
889
890
891
892
893struct cifs_ses {
894 struct list_head smb_ses_list;
895 struct list_head tcon_list;
896 struct cifs_tcon *tcon_ipc;
897 struct mutex session_mutex;
898 struct TCP_Server_Info *server;
899 int ses_count;
900 enum statusEnum status;
901 unsigned overrideSecFlg;
902 char *serverOS;
903 char *serverNOS;
904 char *serverDomain;
905 __u64 Suid;
906 kuid_t linux_uid;
907 kuid_t cred_uid;
908 unsigned int capabilities;
909 char ip_addr[INET6_ADDRSTRLEN + 1];
910 char *user_name;
911
912 char *domainName;
913 char *password;
914 struct session_key auth_key;
915 struct ntlmssp_auth *ntlmssp;
916 enum securityEnum sectype;
917 bool sign;
918 bool need_reconnect:1;
919 bool domainAuto:1;
920 bool binding:1;
921 __u16 session_flags;
922 __u8 smb3signingkey[SMB3_SIGN_KEY_SIZE];
923 __u8 smb3encryptionkey[SMB3_ENC_DEC_KEY_SIZE];
924 __u8 smb3decryptionkey[SMB3_ENC_DEC_KEY_SIZE];
925 __u8 preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
926
927 __u8 binding_preauth_sha_hash[SMB2_PREAUTH_HASH_SIZE];
928
929
930
931
932
933
934
935
936
937
938 spinlock_t iface_lock;
939 struct cifs_server_iface *iface_list;
940 size_t iface_count;
941 unsigned long iface_last_update;
942
943#define CIFS_MAX_CHANNELS 16
944 struct cifs_chan chans[CIFS_MAX_CHANNELS];
945 struct cifs_chan *binding_chan;
946 size_t chan_count;
947 size_t chan_max;
948 atomic_t chan_seq;
949};
950
951
952
953
954
955
956static inline
957struct cifs_chan *cifs_ses_binding_channel(struct cifs_ses *ses)
958{
959 if (ses->binding)
960 return ses->binding_chan;
961 else
962 return NULL;
963}
964
965
966
967
968
969
970
971
972
973static inline
974struct TCP_Server_Info *cifs_ses_server(struct cifs_ses *ses)
975{
976 if (ses->binding)
977 return ses->binding_chan->server;
978 else
979 return ses->server;
980}
981
982static inline bool
983cap_unix(struct cifs_ses *ses)
984{
985 return ses->server->vals->cap_unix & ses->capabilities;
986}
987
988struct cached_fid {
989 bool is_valid:1;
990 bool file_all_info_is_valid:1;
991 bool has_lease:1;
992 unsigned long time;
993 struct kref refcount;
994 struct cifs_fid *fid;
995 struct mutex fid_mutex;
996 struct cifs_tcon *tcon;
997 struct dentry *dentry;
998 struct work_struct lease_break;
999 struct smb2_file_all_info file_all_info;
1000};
1001
1002
1003
1004
1005
1006struct cifs_tcon {
1007 struct list_head tcon_list;
1008 int tc_count;
1009 struct list_head rlist;
1010 atomic_t num_local_opens;
1011 atomic_t num_remote_opens;
1012 struct list_head openFileList;
1013 spinlock_t open_file_lock;
1014 struct cifs_ses *ses;
1015 char treeName[MAX_TREE_SIZE + 1];
1016 char *nativeFileSystem;
1017 char *password;
1018 __u32 tid;
1019 __u16 Flags;
1020 enum statusEnum tidStatus;
1021 atomic_t num_smbs_sent;
1022 union {
1023 struct {
1024 atomic_t num_writes;
1025 atomic_t num_reads;
1026 atomic_t num_flushes;
1027 atomic_t num_oplock_brks;
1028 atomic_t num_opens;
1029 atomic_t num_closes;
1030 atomic_t num_deletes;
1031 atomic_t num_mkdirs;
1032 atomic_t num_posixopens;
1033 atomic_t num_posixmkdirs;
1034 atomic_t num_rmdirs;
1035 atomic_t num_renames;
1036 atomic_t num_t2renames;
1037 atomic_t num_ffirst;
1038 atomic_t num_fnext;
1039 atomic_t num_fclose;
1040 atomic_t num_hardlinks;
1041 atomic_t num_symlinks;
1042 atomic_t num_locks;
1043 atomic_t num_acl_get;
1044 atomic_t num_acl_set;
1045 } cifs_stats;
1046 struct {
1047 atomic_t smb2_com_sent[NUMBER_OF_SMB2_COMMANDS];
1048 atomic_t smb2_com_failed[NUMBER_OF_SMB2_COMMANDS];
1049 } smb2_stats;
1050 } stats;
1051 __u64 bytes_read;
1052 __u64 bytes_written;
1053 spinlock_t stat_lock;
1054 FILE_SYSTEM_DEVICE_INFO fsDevInfo;
1055 FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo;
1056 FILE_SYSTEM_UNIX_INFO fsUnixInfo;
1057 bool ipc:1;
1058 bool pipe:1;
1059 bool print:1;
1060 bool retry:1;
1061 bool nocase:1;
1062 bool nohandlecache:1;
1063 bool nodelete:1;
1064 bool seal:1;
1065 bool unix_ext:1;
1066
1067 bool posix_extensions;
1068 bool local_lease:1;
1069 bool broken_posix_open;
1070 bool broken_sparse_sup;
1071 bool need_reconnect:1;
1072 bool need_reopen_files:1;
1073 bool use_resilient:1;
1074 bool use_persistent:1;
1075 bool no_lease:1;
1076 bool use_witness:1;
1077 __le32 capabilities;
1078 __u32 share_flags;
1079 __u32 maximal_access;
1080 __u32 vol_serial_number;
1081 __le64 vol_create_time;
1082 __u64 snapshot_time;
1083 __u32 handle_timeout;
1084 __u32 ss_flags;
1085 __u32 perf_sector_size;
1086 __u32 max_chunks;
1087 __u32 max_bytes_chunk;
1088 __u32 max_bytes_copy;
1089#ifdef CONFIG_CIFS_FSCACHE
1090 u64 resource_id;
1091 struct fscache_cookie *fscache;
1092#endif
1093 struct list_head pending_opens;
1094 struct cached_fid crfid;
1095
1096#ifdef CONFIG_CIFS_DFS_UPCALL
1097 char *dfs_path;
1098 struct list_head ulist;
1099#endif
1100};
1101
1102
1103
1104
1105
1106
1107
1108struct tcon_link {
1109 struct rb_node tl_rbnode;
1110 kuid_t tl_uid;
1111 unsigned long tl_flags;
1112#define TCON_LINK_MASTER 0
1113#define TCON_LINK_PENDING 1
1114#define TCON_LINK_IN_TREE 2
1115 unsigned long tl_time;
1116 atomic_t tl_count;
1117 struct cifs_tcon *tl_tcon;
1118};
1119
1120extern struct tcon_link *cifs_sb_tlink(struct cifs_sb_info *cifs_sb);
1121extern void smb3_free_compound_rqst(int num_rqst, struct smb_rqst *rqst);
1122
1123static inline struct cifs_tcon *
1124tlink_tcon(struct tcon_link *tlink)
1125{
1126 return tlink->tl_tcon;
1127}
1128
1129static inline struct tcon_link *
1130cifs_sb_master_tlink(struct cifs_sb_info *cifs_sb)
1131{
1132 return cifs_sb->master_tlink;
1133}
1134
1135extern void cifs_put_tlink(struct tcon_link *tlink);
1136
1137static inline struct tcon_link *
1138cifs_get_tlink(struct tcon_link *tlink)
1139{
1140 if (tlink && !IS_ERR(tlink))
1141 atomic_inc(&tlink->tl_count);
1142 return tlink;
1143}
1144
1145
1146extern struct cifs_tcon *cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb);
1147
1148#define CIFS_OPLOCK_NO_CHANGE 0xfe
1149
1150struct cifs_pending_open {
1151 struct list_head olist;
1152 struct tcon_link *tlink;
1153 __u8 lease_key[16];
1154 __u32 oplock;
1155};
1156
1157struct cifs_deferred_close {
1158 struct list_head dlist;
1159 struct tcon_link *tlink;
1160 __u16 netfid;
1161 __u64 persistent_fid;
1162 __u64 volatile_fid;
1163};
1164
1165
1166
1167
1168
1169struct cifsLockInfo {
1170 struct list_head llist;
1171 struct list_head blist;
1172 wait_queue_head_t block_q;
1173 __u64 offset;
1174 __u64 length;
1175 __u32 pid;
1176 __u16 type;
1177 __u16 flags;
1178};
1179
1180
1181
1182
1183struct cifs_search_info {
1184 loff_t index_of_last_entry;
1185 __u16 entries_in_buffer;
1186 __u16 info_level;
1187 __u32 resume_key;
1188 char *ntwrk_buf_start;
1189 char *srch_entries_start;
1190 char *last_entry;
1191 const char *presume_name;
1192 unsigned int resume_name_len;
1193 bool endOfSearch:1;
1194 bool emptyDir:1;
1195 bool unicode:1;
1196 bool smallBuf:1;
1197};
1198
1199#define ACL_NO_MODE ((umode_t)(-1))
1200struct cifs_open_parms {
1201 struct cifs_tcon *tcon;
1202 struct cifs_sb_info *cifs_sb;
1203 int disposition;
1204 int desired_access;
1205 int create_options;
1206 const char *path;
1207 struct cifs_fid *fid;
1208 umode_t mode;
1209 bool reconnect:1;
1210};
1211
1212struct cifs_fid {
1213 __u16 netfid;
1214 __u64 persistent_fid;
1215 __u64 volatile_fid;
1216 __u8 lease_key[SMB2_LEASE_KEY_SIZE];
1217 __u8 create_guid[16];
1218 __u32 access;
1219 struct cifs_pending_open *pending_open;
1220 unsigned int epoch;
1221#ifdef CONFIG_CIFS_DEBUG2
1222 __u64 mid;
1223#endif
1224 bool purge_cache;
1225};
1226
1227struct cifs_fid_locks {
1228 struct list_head llist;
1229 struct cifsFileInfo *cfile;
1230 struct list_head locks;
1231};
1232
1233struct cifsFileInfo {
1234
1235 struct list_head tlist;
1236 struct list_head flist;
1237
1238 struct cifs_fid_locks *llist;
1239 kuid_t uid;
1240 __u32 pid;
1241 struct cifs_fid fid;
1242 struct list_head rlist;
1243 ;
1244
1245 struct dentry *dentry;
1246 struct tcon_link *tlink;
1247 unsigned int f_flags;
1248 bool invalidHandle:1;
1249 bool swapfile:1;
1250 bool oplock_break_cancelled:1;
1251 unsigned int oplock_epoch;
1252 __u32 oplock_level;
1253 int count;
1254 spinlock_t file_info_lock;
1255 struct mutex fh_mutex;
1256 struct cifs_search_info srch_inf;
1257 struct work_struct oplock_break;
1258 struct work_struct put;
1259 struct delayed_work deferred;
1260 bool deferred_close_scheduled;
1261};
1262
1263struct cifs_io_parms {
1264 __u16 netfid;
1265 __u64 persistent_fid;
1266 __u64 volatile_fid;
1267 __u32 pid;
1268 __u64 offset;
1269 unsigned int length;
1270 struct cifs_tcon *tcon;
1271 struct TCP_Server_Info *server;
1272};
1273
1274struct cifs_aio_ctx {
1275 struct kref refcount;
1276 struct list_head list;
1277 struct mutex aio_mutex;
1278 struct completion done;
1279 struct iov_iter iter;
1280 struct kiocb *iocb;
1281 struct cifsFileInfo *cfile;
1282 struct bio_vec *bv;
1283 loff_t pos;
1284 unsigned int npages;
1285 ssize_t rc;
1286 unsigned int len;
1287 unsigned int total_len;
1288 bool should_dirty;
1289
1290
1291
1292
1293 bool direct_io;
1294};
1295
1296
1297struct cifs_readdata {
1298 struct kref refcount;
1299 struct list_head list;
1300 struct completion done;
1301 struct cifsFileInfo *cfile;
1302 struct address_space *mapping;
1303 struct cifs_aio_ctx *ctx;
1304 __u64 offset;
1305 unsigned int bytes;
1306 unsigned int got_bytes;
1307 pid_t pid;
1308 int result;
1309 struct work_struct work;
1310 int (*read_into_pages)(struct TCP_Server_Info *server,
1311 struct cifs_readdata *rdata,
1312 unsigned int len);
1313 int (*copy_into_pages)(struct TCP_Server_Info *server,
1314 struct cifs_readdata *rdata,
1315 struct iov_iter *iter);
1316 struct kvec iov[2];
1317 struct TCP_Server_Info *server;
1318#ifdef CONFIG_CIFS_SMB_DIRECT
1319 struct smbd_mr *mr;
1320#endif
1321 unsigned int pagesz;
1322 unsigned int page_offset;
1323 unsigned int tailsz;
1324 struct cifs_credits credits;
1325 unsigned int nr_pages;
1326 struct page **pages;
1327};
1328
1329
1330struct cifs_writedata {
1331 struct kref refcount;
1332 struct list_head list;
1333 struct completion done;
1334 enum writeback_sync_modes sync_mode;
1335 struct work_struct work;
1336 struct cifsFileInfo *cfile;
1337 struct cifs_aio_ctx *ctx;
1338 __u64 offset;
1339 pid_t pid;
1340 unsigned int bytes;
1341 int result;
1342 struct TCP_Server_Info *server;
1343#ifdef CONFIG_CIFS_SMB_DIRECT
1344 struct smbd_mr *mr;
1345#endif
1346 unsigned int pagesz;
1347 unsigned int page_offset;
1348 unsigned int tailsz;
1349 struct cifs_credits credits;
1350 unsigned int nr_pages;
1351 struct page **pages;
1352};
1353
1354
1355
1356
1357
1358static inline void
1359cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file)
1360{
1361 ++cifs_file->count;
1362}
1363
1364struct cifsFileInfo *cifsFileInfo_get(struct cifsFileInfo *cifs_file);
1365void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_hdlr,
1366 bool offload);
1367void cifsFileInfo_put(struct cifsFileInfo *cifs_file);
1368
1369#define CIFS_CACHE_READ_FLG 1
1370#define CIFS_CACHE_HANDLE_FLG 2
1371#define CIFS_CACHE_RH_FLG (CIFS_CACHE_READ_FLG | CIFS_CACHE_HANDLE_FLG)
1372#define CIFS_CACHE_WRITE_FLG 4
1373#define CIFS_CACHE_RW_FLG (CIFS_CACHE_READ_FLG | CIFS_CACHE_WRITE_FLG)
1374#define CIFS_CACHE_RHW_FLG (CIFS_CACHE_RW_FLG | CIFS_CACHE_HANDLE_FLG)
1375
1376#define CIFS_CACHE_READ(cinode) ((cinode->oplock & CIFS_CACHE_READ_FLG) || (CIFS_SB(cinode->vfs_inode.i_sb)->mnt_cifs_flags & CIFS_MOUNT_RO_CACHE))
1377#define CIFS_CACHE_HANDLE(cinode) (cinode->oplock & CIFS_CACHE_HANDLE_FLG)
1378#define CIFS_CACHE_WRITE(cinode) ((cinode->oplock & CIFS_CACHE_WRITE_FLG) || (CIFS_SB(cinode->vfs_inode.i_sb)->mnt_cifs_flags & CIFS_MOUNT_RW_CACHE))
1379
1380
1381
1382
1383
1384struct cifsInodeInfo {
1385 bool can_cache_brlcks;
1386 struct list_head llist;
1387
1388
1389
1390
1391
1392 struct rw_semaphore lock_sem;
1393
1394 struct list_head openFileList;
1395 spinlock_t open_file_lock;
1396 __u32 cifsAttrs;
1397 unsigned int oplock;
1398 unsigned int epoch;
1399#define CIFS_INODE_PENDING_OPLOCK_BREAK (0)
1400#define CIFS_INODE_PENDING_WRITERS (1)
1401#define CIFS_INODE_FLAG_UNUSED (2)
1402#define CIFS_INO_DELETE_PENDING (3)
1403#define CIFS_INO_INVALID_MAPPING (4)
1404#define CIFS_INO_LOCK (5)
1405#define CIFS_INO_MODIFIED_ATTR (6)
1406 unsigned long flags;
1407 spinlock_t writers_lock;
1408 unsigned int writers;
1409 unsigned long time;
1410 u64 server_eof;
1411 u64 uniqueid;
1412 u64 createtime;
1413 __u8 lease_key[SMB2_LEASE_KEY_SIZE];
1414#ifdef CONFIG_CIFS_FSCACHE
1415 struct fscache_cookie *fscache;
1416#endif
1417 struct inode vfs_inode;
1418 struct list_head deferred_closes;
1419 spinlock_t deferred_lock;
1420 bool lease_granted;
1421};
1422
1423static inline struct cifsInodeInfo *
1424CIFS_I(struct inode *inode)
1425{
1426 return container_of(inode, struct cifsInodeInfo, vfs_inode);
1427}
1428
1429static inline struct cifs_sb_info *
1430CIFS_SB(struct super_block *sb)
1431{
1432 return sb->s_fs_info;
1433}
1434
1435static inline struct cifs_sb_info *
1436CIFS_FILE_SB(struct file *file)
1437{
1438 return CIFS_SB(file_inode(file)->i_sb);
1439}
1440
1441static inline char CIFS_DIR_SEP(const struct cifs_sb_info *cifs_sb)
1442{
1443 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
1444 return '/';
1445 else
1446 return '\\';
1447}
1448
1449static inline void
1450convert_delimiter(char *path, char delim)
1451{
1452 char old_delim, *pos;
1453
1454 if (delim == '/')
1455 old_delim = '\\';
1456 else
1457 old_delim = '/';
1458
1459 pos = path;
1460 while ((pos = strchr(pos, old_delim)))
1461 *pos = delim;
1462}
1463
1464#define cifs_stats_inc atomic_inc
1465
1466static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
1467 unsigned int bytes)
1468{
1469 if (bytes) {
1470 spin_lock(&tcon->stat_lock);
1471 tcon->bytes_written += bytes;
1472 spin_unlock(&tcon->stat_lock);
1473 }
1474}
1475
1476static inline void cifs_stats_bytes_read(struct cifs_tcon *tcon,
1477 unsigned int bytes)
1478{
1479 spin_lock(&tcon->stat_lock);
1480 tcon->bytes_read += bytes;
1481 spin_unlock(&tcon->stat_lock);
1482}
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497typedef int (mid_receive_t)(struct TCP_Server_Info *server,
1498 struct mid_q_entry *mid);
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508typedef void (mid_callback_t)(struct mid_q_entry *mid);
1509
1510
1511
1512
1513
1514typedef int (mid_handle_t)(struct TCP_Server_Info *server,
1515 struct mid_q_entry *mid);
1516
1517
1518struct mid_q_entry {
1519 struct list_head qhead;
1520 struct kref refcount;
1521 struct TCP_Server_Info *server;
1522 __u64 mid;
1523 __u16 credits;
1524 __u16 credits_received;
1525 __u32 pid;
1526 __u32 sequence_number;
1527 unsigned long when_alloc;
1528#ifdef CONFIG_CIFS_STATS2
1529 unsigned long when_sent;
1530 unsigned long when_received;
1531#endif
1532 mid_receive_t *receive;
1533 mid_callback_t *callback;
1534 mid_handle_t *handle;
1535 void *callback_data;
1536 struct task_struct *creator;
1537 void *resp_buf;
1538 unsigned int resp_buf_size;
1539 int mid_state;
1540 unsigned int mid_flags;
1541 __le16 command;
1542 unsigned int optype;
1543 bool large_buf:1;
1544 bool multiRsp:1;
1545 bool multiEnd:1;
1546 bool decrypted:1;
1547};
1548
1549struct close_cancelled_open {
1550 struct cifs_fid fid;
1551 struct cifs_tcon *tcon;
1552 struct work_struct work;
1553 __u64 mid;
1554 __u16 cmd;
1555};
1556
1557
1558
1559static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
1560{
1561 atomic_inc(&server->in_send);
1562}
1563
1564static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
1565{
1566 atomic_dec(&server->in_send);
1567}
1568
1569static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
1570{
1571 atomic_inc(&server->num_waiters);
1572}
1573
1574static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
1575{
1576 atomic_dec(&server->num_waiters);
1577}
1578
1579#ifdef CONFIG_CIFS_STATS2
1580static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1581{
1582 mid->when_sent = jiffies;
1583}
1584#else
1585static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1586{
1587}
1588#endif
1589
1590
1591struct dir_notify_req {
1592 struct list_head lhead;
1593 __le16 Pid;
1594 __le16 PidHigh;
1595 __u16 Mid;
1596 __u16 Tid;
1597 __u16 Uid;
1598 __u16 netfid;
1599 __u32 filter;
1600 int multishot;
1601 struct file *pfile;
1602};
1603
1604struct dfs_info3_param {
1605 int flags;
1606 int path_consumed;
1607 int server_type;
1608 int ref_flag;
1609 char *path_name;
1610 char *node_name;
1611 int ttl;
1612};
1613
1614struct file_list {
1615 struct list_head list;
1616 struct cifsFileInfo *cfile;
1617};
1618
1619
1620
1621
1622
1623
1624#define CIFS_FATTR_DFS_REFERRAL 0x1
1625#define CIFS_FATTR_DELETE_PENDING 0x2
1626#define CIFS_FATTR_NEED_REVAL 0x4
1627#define CIFS_FATTR_INO_COLLISION 0x8
1628#define CIFS_FATTR_UNKNOWN_NLINK 0x10
1629#define CIFS_FATTR_FAKE_ROOT_INO 0x20
1630
1631struct cifs_fattr {
1632 u32 cf_flags;
1633 u32 cf_cifsattrs;
1634 u64 cf_uniqueid;
1635 u64 cf_eof;
1636 u64 cf_bytes;
1637 u64 cf_createtime;
1638 kuid_t cf_uid;
1639 kgid_t cf_gid;
1640 umode_t cf_mode;
1641 dev_t cf_rdev;
1642 unsigned int cf_nlink;
1643 unsigned int cf_dtype;
1644 struct timespec64 cf_atime;
1645 struct timespec64 cf_mtime;
1646 struct timespec64 cf_ctime;
1647 u32 cf_cifstag;
1648};
1649
1650static inline void free_dfs_info_param(struct dfs_info3_param *param)
1651{
1652 if (param) {
1653 kfree(param->path_name);
1654 kfree(param->node_name);
1655 }
1656}
1657
1658static inline void free_dfs_info_array(struct dfs_info3_param *param,
1659 int number_of_items)
1660{
1661 int i;
1662 if ((number_of_items == 0) || (param == NULL))
1663 return;
1664 for (i = 0; i < number_of_items; i++) {
1665 kfree(param[i].path_name);
1666 kfree(param[i].node_name);
1667 }
1668 kfree(param);
1669}
1670
1671static inline bool is_interrupt_error(int error)
1672{
1673 switch (error) {
1674 case -EINTR:
1675 case -ERESTARTSYS:
1676 case -ERESTARTNOHAND:
1677 case -ERESTARTNOINTR:
1678 return true;
1679 }
1680 return false;
1681}
1682
1683static inline bool is_retryable_error(int error)
1684{
1685 if (is_interrupt_error(error) || error == -EAGAIN)
1686 return true;
1687 return false;
1688}
1689
1690
1691
1692#define FIND_WR_ANY 0
1693#define FIND_WR_FSUID_ONLY 1
1694#define FIND_WR_WITH_DELETE 2
1695
1696#define MID_FREE 0
1697#define MID_REQUEST_ALLOCATED 1
1698#define MID_REQUEST_SUBMITTED 2
1699#define MID_RESPONSE_RECEIVED 4
1700#define MID_RETRY_NEEDED 8
1701#define MID_RESPONSE_MALFORMED 0x10
1702#define MID_SHUTDOWN 0x20
1703
1704
1705#define MID_WAIT_CANCELLED 1
1706#define MID_DELETED 2
1707
1708
1709#define CIFS_NO_BUFFER 0
1710#define CIFS_SMALL_BUFFER 1
1711#define CIFS_LARGE_BUFFER 2
1712#define CIFS_IOVEC 4
1713
1714
1715#define CIFS_BLOCKING_OP 1
1716#define CIFS_NON_BLOCKING 2
1717#define CIFS_TIMEOUT_MASK 0x003
1718#define CIFS_LOG_ERROR 0x010
1719#define CIFS_LARGE_BUF_OP 0x020
1720#define CIFS_NO_RSP_BUF 0x040
1721
1722
1723#define CIFS_ECHO_OP 0x080
1724#define CIFS_OBREAK_OP 0x0100
1725#define CIFS_NEG_OP 0x0200
1726#define CIFS_CP_CREATE_CLOSE_OP 0x0400
1727
1728#define CIFS_SESS_OP 0x2000
1729#define CIFS_OP_MASK 0x2780
1730
1731#define CIFS_HAS_CREDITS 0x0400
1732#define CIFS_TRANSFORM_REQ 0x0800
1733#define CIFS_NO_SRV_RSP 0x1000
1734
1735
1736#define CIFSSEC_MAY_SIGN 0x00001
1737#define CIFSSEC_MAY_NTLM 0x00002
1738#define CIFSSEC_MAY_NTLMV2 0x00004
1739#define CIFSSEC_MAY_KRB5 0x00008
1740#ifdef CONFIG_CIFS_WEAK_PW_HASH
1741#define CIFSSEC_MAY_LANMAN 0x00010
1742#define CIFSSEC_MAY_PLNTXT 0x00020
1743#else
1744#define CIFSSEC_MAY_LANMAN 0
1745#define CIFSSEC_MAY_PLNTXT 0
1746#endif
1747#define CIFSSEC_MAY_SEAL 0x00040
1748#define CIFSSEC_MAY_NTLMSSP 0x00080
1749
1750#define CIFSSEC_MUST_SIGN 0x01001
1751
1752
1753
1754#define CIFSSEC_MUST_NTLM 0x02002
1755#define CIFSSEC_MUST_NTLMV2 0x04004
1756#define CIFSSEC_MUST_KRB5 0x08008
1757#ifdef CONFIG_CIFS_WEAK_PW_HASH
1758#define CIFSSEC_MUST_LANMAN 0x10010
1759#define CIFSSEC_MUST_PLNTXT 0x20020
1760#ifdef CONFIG_CIFS_UPCALL
1761#define CIFSSEC_MASK 0xBF0BF
1762#else
1763#define CIFSSEC_MASK 0xB70B7
1764#endif
1765#else
1766#define CIFSSEC_MUST_LANMAN 0
1767#define CIFSSEC_MUST_PLNTXT 0
1768#ifdef CONFIG_CIFS_UPCALL
1769#define CIFSSEC_MASK 0x8F08F
1770#else
1771#define CIFSSEC_MASK 0x87087
1772#endif
1773#endif
1774#define CIFSSEC_MUST_SEAL 0x40040
1775#define CIFSSEC_MUST_NTLMSSP 0x80080
1776
1777#define CIFSSEC_DEF (CIFSSEC_MAY_SIGN | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_NTLMSSP)
1778#define CIFSSEC_MAX (CIFSSEC_MUST_SIGN | CIFSSEC_MUST_NTLMV2)
1779#define CIFSSEC_AUTH_MASK (CIFSSEC_MAY_NTLM | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_LANMAN | CIFSSEC_MAY_PLNTXT | CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_NTLMSSP)
1780
1781
1782
1783
1784
1785
1786#define UID_HASH (16)
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823#ifdef DECLARE_GLOBALS_HERE
1824#define GLOBAL_EXTERN
1825#else
1826#define GLOBAL_EXTERN extern
1827#endif
1828
1829
1830
1831
1832
1833
1834
1835
1836GLOBAL_EXTERN struct list_head cifs_tcp_ses_list;
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848GLOBAL_EXTERN spinlock_t cifs_tcp_ses_lock;
1849
1850
1851
1852
1853GLOBAL_EXTERN unsigned int GlobalCurrentXid;
1854GLOBAL_EXTERN unsigned int GlobalTotalActiveXid;
1855GLOBAL_EXTERN unsigned int GlobalMaxActiveXid;
1856GLOBAL_EXTERN spinlock_t GlobalMid_Lock;
1857
1858
1859
1860
1861GLOBAL_EXTERN atomic_t sesInfoAllocCount;
1862GLOBAL_EXTERN atomic_t tconInfoAllocCount;
1863GLOBAL_EXTERN atomic_t tcpSesNextId;
1864GLOBAL_EXTERN atomic_t tcpSesAllocCount;
1865GLOBAL_EXTERN atomic_t tcpSesReconnectCount;
1866GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
1867
1868
1869GLOBAL_EXTERN atomic_t bufAllocCount;
1870#ifdef CONFIG_CIFS_STATS2
1871GLOBAL_EXTERN atomic_t totBufAllocCount;
1872GLOBAL_EXTERN atomic_t totSmBufAllocCount;
1873extern unsigned int slow_rsp_threshold;
1874#endif
1875GLOBAL_EXTERN atomic_t smBufAllocCount;
1876GLOBAL_EXTERN atomic_t midCount;
1877
1878
1879extern bool enable_oplocks;
1880extern bool lookupCacheEnabled;
1881extern unsigned int global_secflags;
1882
1883extern unsigned int sign_CIFS_PDUs;
1884extern bool enable_gcm_256;
1885extern bool require_gcm_256;
1886extern bool enable_negotiate_signing;
1887extern bool linuxExtEnabled;
1888extern unsigned int CIFSMaxBufSize;
1889extern unsigned int cifs_min_rcv;
1890extern unsigned int cifs_min_small;
1891extern unsigned int cifs_max_pending;
1892extern bool disable_legacy_dialects;
1893
1894void cifs_oplock_break(struct work_struct *work);
1895void cifs_queue_oplock_break(struct cifsFileInfo *cfile);
1896void smb2_deferred_work_close(struct work_struct *work);
1897
1898extern const struct slow_work_ops cifs_oplock_break_ops;
1899extern struct workqueue_struct *cifsiod_wq;
1900extern struct workqueue_struct *decrypt_wq;
1901extern struct workqueue_struct *fileinfo_put_wq;
1902extern struct workqueue_struct *cifsoplockd_wq;
1903extern struct workqueue_struct *deferredclose_wq;
1904extern __u32 cifs_lock_secret;
1905
1906extern mempool_t *cifs_mid_poolp;
1907
1908
1909#define SMB1_VERSION_STRING "1.0"
1910extern struct smb_version_operations smb1_operations;
1911extern struct smb_version_values smb1_values;
1912#define SMB20_VERSION_STRING "2.0"
1913extern struct smb_version_operations smb20_operations;
1914extern struct smb_version_values smb20_values;
1915#define SMB21_VERSION_STRING "2.1"
1916extern struct smb_version_operations smb21_operations;
1917extern struct smb_version_values smb21_values;
1918#define SMBDEFAULT_VERSION_STRING "default"
1919extern struct smb_version_values smbdefault_values;
1920#define SMB3ANY_VERSION_STRING "3"
1921extern struct smb_version_values smb3any_values;
1922#define SMB30_VERSION_STRING "3.0"
1923extern struct smb_version_operations smb30_operations;
1924extern struct smb_version_values smb30_values;
1925#define SMB302_VERSION_STRING "3.02"
1926#define ALT_SMB302_VERSION_STRING "3.0.2"
1927
1928extern struct smb_version_values smb302_values;
1929#define SMB311_VERSION_STRING "3.1.1"
1930#define ALT_SMB311_VERSION_STRING "3.11"
1931extern struct smb_version_operations smb311_operations;
1932extern struct smb_version_values smb311_values;
1933
1934static inline char *get_security_type_str(enum securityEnum sectype)
1935{
1936 switch (sectype) {
1937 case RawNTLMSSP:
1938 return "RawNTLMSSP";
1939 case Kerberos:
1940 return "Kerberos";
1941 case NTLMv2:
1942 return "NTLMv2";
1943 case NTLM:
1944 return "NTLM";
1945 case LANMAN:
1946 return "LANMAN";
1947 default:
1948 return "Unknown";
1949 }
1950}
1951
1952static inline bool is_smb1_server(struct TCP_Server_Info *server)
1953{
1954 return strcmp(server->vals->version_string, SMB1_VERSION_STRING) == 0;
1955}
1956
1957static inline bool is_tcon_dfs(struct cifs_tcon *tcon)
1958{
1959
1960
1961
1962
1963
1964
1965
1966 if (!tcon || !tcon->ses || !tcon->ses->server)
1967 return false;
1968 return is_smb1_server(tcon->ses->server) ? tcon->Flags & SMB_SHARE_IS_IN_DFS :
1969 tcon->share_flags & (SHI1005_FLAGS_DFS | SHI1005_FLAGS_DFS_ROOT);
1970}
1971
1972#endif
1973