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