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#ifdef CONFIG_CIFS_SMB2
33#include "smb2pdu.h"
34#endif
35
36#define CIFS_MAGIC_NUMBER 0xFF534D42
37
38
39
40
41#define MAX_UID_INFO 16
42#define MAX_SES_INFO 2
43#define MAX_TCON_INFO 4
44
45#define MAX_TREE_SIZE (2 + CIFS_NI_MAXHOST + 1 + CIFS_MAX_SHARE_LEN + 1)
46
47#define CIFS_MIN_RCV_POOL 4
48
49#define MAX_REOPEN_ATT 5
50
51
52
53#define CIFS_DEF_ACTIMEO (1 * HZ)
54
55
56
57
58#define CIFS_MAX_ACTIMEO (1 << 30)
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 40
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
80
81
82
83
84
85
86
87
88#define SMB2_MAX_CREDITS_AVAILABLE 32000
89
90#include "cifspdu.h"
91
92#ifndef XATTR_DOS_ATTRIB
93#define XATTR_DOS_ATTRIB "user.DOSATTRIB"
94#endif
95
96
97
98
99
100
101enum statusEnum {
102 CifsNew = 0,
103 CifsGood,
104 CifsExiting,
105 CifsNeedReconnect,
106 CifsNeedNegotiate
107};
108
109enum securityEnum {
110 Unspecified = 0,
111 LANMAN,
112 NTLM,
113 NTLMv2,
114 RawNTLMSSP,
115 Kerberos,
116};
117
118struct session_key {
119 unsigned int len;
120 char *response;
121};
122
123
124struct sdesc {
125 struct shash_desc shash;
126 char ctx[];
127};
128
129
130struct cifs_secmech {
131 struct crypto_shash *hmacmd5;
132 struct crypto_shash *md5;
133 struct crypto_shash *hmacsha256;
134 struct crypto_shash *cmacaes;
135 struct sdesc *sdeschmacmd5;
136 struct sdesc *sdescmd5;
137 struct sdesc *sdeschmacsha256;
138 struct sdesc *sdesccmacaes;
139 struct crypto_aead *ccmaesencrypt;
140 struct crypto_aead *ccmaesdecrypt;
141};
142
143
144struct ntlmssp_auth {
145 bool sesskey_per_smbsess;
146 __u32 client_flags;
147 __u32 server_flags;
148 unsigned char ciphertext[CIFS_CPHTXT_SIZE];
149 char cryptkey[CIFS_CRYPTO_KEY_SIZE];
150};
151
152struct cifs_cred {
153 int uid;
154 int gid;
155 int mode;
156 int cecount;
157 struct cifs_sid osid;
158 struct cifs_sid gsid;
159 struct cifs_ntace *ntaces;
160 struct cifs_ace *aces;
161};
162
163
164
165
166
167
168
169
170
171
172
173
174
175struct smb_rqst {
176 struct kvec *rq_iov;
177 unsigned int rq_nvec;
178 struct page **rq_pages;
179 unsigned int rq_npages;
180 unsigned int rq_pagesz;
181 unsigned int rq_tailsz;
182};
183
184enum smb_version {
185 Smb_1 = 1,
186 Smb_20,
187 Smb_21,
188 Smb_30,
189 Smb_302,
190#ifdef CONFIG_CIFS_SMB311
191 Smb_311,
192#endif
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 int (*oplock_response)(struct cifs_tcon *, struct cifs_fid *,
372 struct cifsInodeInfo *);
373
374 int (*queryfs)(const unsigned int, struct cifs_tcon *,
375 struct kstatfs *);
376
377 int (*mand_lock)(const unsigned int, struct cifsFileInfo *, __u64,
378 __u64, __u32, int, int, bool);
379
380 int (*mand_unlock_range)(struct cifsFileInfo *, struct file_lock *,
381 const unsigned int);
382
383 int (*push_mand_locks)(struct cifsFileInfo *);
384
385 void (*get_lease_key)(struct inode *, struct cifs_fid *);
386
387 void (*set_lease_key)(struct inode *, struct cifs_fid *);
388
389 void (*new_lease_key)(struct cifs_fid *);
390 int (*generate_signingkey)(struct cifs_ses *);
391 int (*calc_signature)(struct smb_rqst *, struct TCP_Server_Info *);
392 int (*set_integrity)(const unsigned int, struct cifs_tcon *tcon,
393 struct cifsFileInfo *src_file);
394 int (*enum_snapshots)(const unsigned int xid, struct cifs_tcon *tcon,
395 struct cifsFileInfo *src_file, void __user *);
396 int (*query_mf_symlink)(unsigned int, struct cifs_tcon *,
397 struct cifs_sb_info *, const unsigned char *,
398 char *, unsigned int *);
399 int (*create_mf_symlink)(unsigned int, struct cifs_tcon *,
400 struct cifs_sb_info *, const unsigned char *,
401 char *, unsigned int *);
402
403 bool (*is_read_op)(__u32);
404
405 void (*set_oplock_level)(struct cifsInodeInfo *, __u32, unsigned int,
406 bool *);
407
408 char * (*create_lease_buf)(u8 *, u8);
409
410 __u8 (*parse_lease_buf)(void *, unsigned int *);
411 ssize_t (*copychunk_range)(const unsigned int,
412 struct cifsFileInfo *src_file,
413 struct cifsFileInfo *target_file,
414 u64 src_off, u64 len, u64 dest_off);
415 int (*duplicate_extents)(const unsigned int, struct cifsFileInfo *src,
416 struct cifsFileInfo *target_file, u64 src_off, u64 len,
417 u64 dest_off);
418 int (*validate_negotiate)(const unsigned int, struct cifs_tcon *);
419 ssize_t (*query_all_EAs)(const unsigned int, struct cifs_tcon *,
420 const unsigned char *, const unsigned char *, char *,
421 size_t, struct cifs_sb_info *);
422 int (*set_EA)(const unsigned int, struct cifs_tcon *, const char *,
423 const char *, const void *, const __u16,
424 const struct nls_table *, int);
425 struct cifs_ntsd * (*get_acl)(struct cifs_sb_info *, struct inode *,
426 const char *, u32 *);
427 struct cifs_ntsd * (*get_acl_by_fid)(struct cifs_sb_info *,
428 const struct cifs_fid *, u32 *);
429 int (*set_acl)(struct cifs_ntsd *, __u32, struct inode *, const char *,
430 int);
431
432 unsigned int (*wp_retry_size)(struct inode *);
433
434 int (*wait_mtu_credits)(struct TCP_Server_Info *, unsigned int,
435 unsigned int *, unsigned int *);
436
437 bool (*dir_needs_close)(struct cifsFileInfo *);
438 long (*fallocate)(struct file *, struct cifs_tcon *, int, loff_t,
439 loff_t);
440
441 int (*init_transform_rq)(struct TCP_Server_Info *, struct smb_rqst *,
442 struct smb_rqst *);
443
444 void (*free_transform_rq)(struct smb_rqst *);
445 int (*is_transform_hdr)(void *buf);
446 int (*receive_transform)(struct TCP_Server_Info *,
447 struct mid_q_entry **);
448 enum securityEnum (*select_sectype)(struct TCP_Server_Info *,
449 enum securityEnum);
450
451};
452
453struct smb_version_values {
454 char *version_string;
455 __u16 protocol_id;
456 __u32 req_capabilities;
457 __u32 large_lock_type;
458 __u32 exclusive_lock_type;
459 __u32 shared_lock_type;
460 __u32 unlock_lock_type;
461 size_t header_size;
462 size_t max_header_size;
463 size_t read_rsp_size;
464 __le16 lock_cmd;
465 unsigned int cap_unix;
466 unsigned int cap_nt_find;
467 unsigned int cap_large_files;
468 __u16 signing_enabled;
469 __u16 signing_required;
470 size_t create_lease_size;
471};
472
473#define HEADER_SIZE(server) (server->vals->header_size)
474#define MAX_HEADER_SIZE(server) (server->vals->max_header_size)
475
476struct smb_vol {
477 char *username;
478 char *password;
479 char *domainname;
480 char *UNC;
481 char *iocharset;
482 char source_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL];
483 char target_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL];
484 kuid_t cred_uid;
485 kuid_t linux_uid;
486 kgid_t linux_gid;
487 kuid_t backupuid;
488 kgid_t backupgid;
489 umode_t file_mode;
490 umode_t dir_mode;
491 enum securityEnum sectype;
492 bool sign;
493 bool retry:1;
494 bool intr:1;
495 bool setuids:1;
496 bool setuidfromacl:1;
497 bool override_uid:1;
498 bool override_gid:1;
499 bool dynperm:1;
500 bool noperm:1;
501 bool no_psx_acl:1;
502 bool cifs_acl:1;
503 bool backupuid_specified;
504 bool backupgid_specified;
505 bool no_xattr:1;
506 bool server_ino:1;
507 bool direct_io:1;
508 bool strict_io:1;
509 bool remap:1;
510 bool sfu_remap:1;
511 bool posix_paths:1;
512 bool no_linux_ext:1;
513 bool sfu_emul:1;
514 bool nullauth:1;
515 bool nocase:1;
516 bool nobrl:1;
517 bool mand_lock:1;
518 bool seal:1;
519 bool nodfs:1;
520 bool local_lease:1;
521 bool noblocksnd:1;
522 bool noautotune:1;
523 bool nostrictsync:1;
524 bool fsc:1;
525 bool mfsymlinks:1;
526 bool multiuser:1;
527 bool rwpidforward:1;
528 bool nosharesock:1;
529 bool persistent:1;
530 bool nopersistent:1;
531 bool resilient:1;
532 bool domainauto:1;
533 unsigned int rsize;
534 unsigned int wsize;
535 bool sockopt_tcp_nodelay:1;
536 unsigned long actimeo;
537 struct smb_version_operations *ops;
538 struct smb_version_values *vals;
539 char *prepath;
540 struct sockaddr_storage dstaddr;
541 struct sockaddr_storage srcaddr;
542 struct nls_table *local_nls;
543 unsigned int echo_interval;
544 __u64 snapshot_time;
545 unsigned int max_credits;
546};
547
548#define CIFS_MOUNT_MASK (CIFS_MOUNT_NO_PERM | CIFS_MOUNT_SET_UID | \
549 CIFS_MOUNT_SERVER_INUM | CIFS_MOUNT_DIRECT_IO | \
550 CIFS_MOUNT_NO_XATTR | CIFS_MOUNT_MAP_SPECIAL_CHR | \
551 CIFS_MOUNT_MAP_SFM_CHR | \
552 CIFS_MOUNT_UNX_EMUL | CIFS_MOUNT_NO_BRL | \
553 CIFS_MOUNT_CIFS_ACL | CIFS_MOUNT_OVERR_UID | \
554 CIFS_MOUNT_OVERR_GID | CIFS_MOUNT_DYNPERM | \
555 CIFS_MOUNT_NOPOSIXBRL | CIFS_MOUNT_NOSSYNC | \
556 CIFS_MOUNT_FSCACHE | CIFS_MOUNT_MF_SYMLINKS | \
557 CIFS_MOUNT_MULTIUSER | CIFS_MOUNT_STRICT_IO | \
558 CIFS_MOUNT_CIFS_BACKUPUID | CIFS_MOUNT_CIFS_BACKUPGID)
559
560#define CIFS_MS_MASK (MS_RDONLY | MS_MANDLOCK | MS_NOEXEC | MS_NOSUID | \
561 MS_NODEV | MS_SYNCHRONOUS)
562
563struct cifs_mnt_data {
564 struct cifs_sb_info *cifs_sb;
565 struct smb_vol *vol;
566 int flags;
567};
568
569static inline unsigned int
570get_rfc1002_length(void *buf)
571{
572 return be32_to_cpu(*((__be32 *)buf)) & 0xffffff;
573}
574
575static inline void
576inc_rfc1001_len(void *buf, int count)
577{
578 be32_add_cpu((__be32 *)buf, count);
579}
580
581struct TCP_Server_Info {
582 struct list_head tcp_ses_list;
583 struct list_head smb_ses_list;
584 int srv_count;
585
586 char server_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
587 struct smb_version_operations *ops;
588 struct smb_version_values *vals;
589 enum statusEnum tcpStatus;
590 char *hostname;
591 struct socket *ssocket;
592 struct sockaddr_storage dstaddr;
593 struct sockaddr_storage srcaddr;
594#ifdef CONFIG_NET_NS
595 struct net *net;
596#endif
597 wait_queue_head_t response_q;
598 wait_queue_head_t request_q;
599 struct list_head pending_mid_q;
600 bool noblocksnd;
601 bool noautotune;
602 bool tcp_nodelay;
603 unsigned int credits;
604 unsigned int max_credits;
605 unsigned int in_flight;
606 spinlock_t req_lock;
607 struct mutex srv_mutex;
608 struct task_struct *tsk;
609 char server_GUID[16];
610 __u16 sec_mode;
611 bool sign;
612 bool session_estab;
613#ifdef CONFIG_CIFS_SMB2
614 int echo_credits;
615 int oplock_credits;
616 bool echoes:1;
617 __u8 client_guid[SMB2_CLIENT_GUID_SIZE];
618#endif
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#ifdef CONFIG_CIFS_SMB2
663 unsigned int max_read;
664 unsigned int max_write;
665 __u8 preauth_hash[512];
666 struct delayed_work reconnect;
667 struct mutex reconnect_mutex;
668#endif
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#ifdef CONFIG_CIFS_SMB2
851 __u16 session_flags;
852 __u8 smb3signingkey[SMB3_SIGN_KEY_SIZE];
853 __u8 smb3encryptionkey[SMB3_SIGN_KEY_SIZE];
854 __u8 smb3decryptionkey[SMB3_SIGN_KEY_SIZE];
855 __u8 preauth_hash[512];
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#ifdef CONFIG_CIFS_SMB2
909 struct {
910 atomic_t smb2_com_sent[NUMBER_OF_SMB2_COMMANDS];
911 atomic_t smb2_com_failed[NUMBER_OF_SMB2_COMMANDS];
912 } smb2_stats;
913#endif
914 } stats;
915#ifdef CONFIG_CIFS_STATS2
916 unsigned long long time_writes;
917 unsigned long long time_reads;
918 unsigned long long time_opens;
919 unsigned long long time_deletes;
920 unsigned long long time_closes;
921 unsigned long long time_mkdirs;
922 unsigned long long time_rmdirs;
923 unsigned long long time_renames;
924 unsigned long long time_t2renames;
925 unsigned long long time_ffirst;
926 unsigned long long time_fnext;
927 unsigned long long time_fclose;
928#endif
929 __u64 bytes_read;
930 __u64 bytes_written;
931 spinlock_t stat_lock;
932#endif
933 FILE_SYSTEM_DEVICE_INFO fsDevInfo;
934 FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo;
935 FILE_SYSTEM_UNIX_INFO fsUnixInfo;
936 bool ipc:1;
937 bool retry:1;
938 bool nocase:1;
939 bool seal:1;
940 bool unix_ext:1;
941
942 bool local_lease:1;
943 bool broken_posix_open;
944 bool broken_sparse_sup;
945 bool need_reconnect:1;
946 bool need_reopen_files:1;
947 bool use_resilient:1;
948 bool use_persistent:1;
949#ifdef CONFIG_CIFS_SMB2
950 bool print:1;
951 __le32 capabilities;
952 __u32 share_flags;
953 __u32 maximal_access;
954 __u32 vol_serial_number;
955 __le64 vol_create_time;
956 __u64 snapshot_time;
957 __u32 ss_flags;
958 __u32 perf_sector_size;
959 __u32 max_chunks;
960 __u32 max_bytes_chunk;
961 __u32 max_bytes_copy;
962#endif
963#ifdef CONFIG_CIFS_FSCACHE
964 u64 resource_id;
965 struct fscache_cookie *fscache;
966#endif
967 struct list_head pending_opens;
968
969};
970
971
972
973
974
975
976
977struct tcon_link {
978 struct rb_node tl_rbnode;
979 kuid_t tl_uid;
980 unsigned long tl_flags;
981#define TCON_LINK_MASTER 0
982#define TCON_LINK_PENDING 1
983#define TCON_LINK_IN_TREE 2
984 unsigned long tl_time;
985 atomic_t tl_count;
986 struct cifs_tcon *tl_tcon;
987};
988
989extern struct tcon_link *cifs_sb_tlink(struct cifs_sb_info *cifs_sb);
990
991static inline struct cifs_tcon *
992tlink_tcon(struct tcon_link *tlink)
993{
994 return tlink->tl_tcon;
995}
996
997extern void cifs_put_tlink(struct tcon_link *tlink);
998
999static inline struct tcon_link *
1000cifs_get_tlink(struct tcon_link *tlink)
1001{
1002 if (tlink && !IS_ERR(tlink))
1003 atomic_inc(&tlink->tl_count);
1004 return tlink;
1005}
1006
1007
1008extern struct cifs_tcon *cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb);
1009
1010#define CIFS_OPLOCK_NO_CHANGE 0xfe
1011
1012struct cifs_pending_open {
1013 struct list_head olist;
1014 struct tcon_link *tlink;
1015 __u8 lease_key[16];
1016 __u32 oplock;
1017};
1018
1019
1020
1021
1022
1023struct cifsLockInfo {
1024 struct list_head llist;
1025 struct list_head blist;
1026 wait_queue_head_t block_q;
1027 __u64 offset;
1028 __u64 length;
1029 __u32 pid;
1030 __u32 type;
1031};
1032
1033
1034
1035
1036struct cifs_search_info {
1037 loff_t index_of_last_entry;
1038 __u16 entries_in_buffer;
1039 __u16 info_level;
1040 __u32 resume_key;
1041 char *ntwrk_buf_start;
1042 char *srch_entries_start;
1043 char *last_entry;
1044 const char *presume_name;
1045 unsigned int resume_name_len;
1046 bool endOfSearch:1;
1047 bool emptyDir:1;
1048 bool unicode:1;
1049 bool smallBuf:1;
1050};
1051
1052struct cifs_open_parms {
1053 struct cifs_tcon *tcon;
1054 struct cifs_sb_info *cifs_sb;
1055 int disposition;
1056 int desired_access;
1057 int create_options;
1058 const char *path;
1059 struct cifs_fid *fid;
1060 bool reconnect:1;
1061};
1062
1063struct cifs_fid {
1064 __u16 netfid;
1065#ifdef CONFIG_CIFS_SMB2
1066 __u64 persistent_fid;
1067 __u64 volatile_fid;
1068 __u8 lease_key[SMB2_LEASE_KEY_SIZE];
1069 __u8 create_guid[16];
1070#endif
1071 struct cifs_pending_open *pending_open;
1072 unsigned int epoch;
1073 bool purge_cache;
1074};
1075
1076struct cifs_fid_locks {
1077 struct list_head llist;
1078 struct cifsFileInfo *cfile;
1079 struct list_head locks;
1080};
1081
1082struct cifsFileInfo {
1083
1084 struct list_head tlist;
1085 struct list_head flist;
1086
1087 struct cifs_fid_locks *llist;
1088 kuid_t uid;
1089 __u32 pid;
1090 struct cifs_fid fid;
1091 struct list_head rlist;
1092 ;
1093
1094 struct dentry *dentry;
1095 struct tcon_link *tlink;
1096 unsigned int f_flags;
1097 bool invalidHandle:1;
1098 bool oplock_break_cancelled:1;
1099 int count;
1100 spinlock_t file_info_lock;
1101 struct mutex fh_mutex;
1102 struct cifs_search_info srch_inf;
1103 struct work_struct oplock_break;
1104};
1105
1106struct cifs_io_parms {
1107 __u16 netfid;
1108#ifdef CONFIG_CIFS_SMB2
1109 __u64 persistent_fid;
1110 __u64 volatile_fid;
1111#endif
1112 __u32 pid;
1113 __u64 offset;
1114 unsigned int length;
1115 struct cifs_tcon *tcon;
1116};
1117
1118struct cifs_aio_ctx {
1119 struct kref refcount;
1120 struct list_head list;
1121 struct mutex aio_mutex;
1122 struct completion done;
1123 struct iov_iter iter;
1124 struct kiocb *iocb;
1125 struct cifsFileInfo *cfile;
1126 struct bio_vec *bv;
1127 loff_t pos;
1128 unsigned int npages;
1129 ssize_t rc;
1130 unsigned int len;
1131 unsigned int total_len;
1132 bool should_dirty;
1133};
1134
1135struct cifs_readdata;
1136
1137
1138struct cifs_readdata {
1139 struct kref refcount;
1140 struct list_head list;
1141 struct completion done;
1142 struct cifsFileInfo *cfile;
1143 struct address_space *mapping;
1144 struct cifs_aio_ctx *ctx;
1145 __u64 offset;
1146 unsigned int bytes;
1147 unsigned int got_bytes;
1148 pid_t pid;
1149 int result;
1150 struct work_struct work;
1151 int (*read_into_pages)(struct TCP_Server_Info *server,
1152 struct cifs_readdata *rdata,
1153 unsigned int len);
1154 int (*copy_into_pages)(struct TCP_Server_Info *server,
1155 struct cifs_readdata *rdata,
1156 struct iov_iter *iter);
1157 struct kvec iov[2];
1158 unsigned int pagesz;
1159 unsigned int tailsz;
1160 unsigned int credits;
1161 unsigned int nr_pages;
1162 struct page *pages[];
1163};
1164
1165struct cifs_writedata;
1166
1167
1168struct cifs_writedata {
1169 struct kref refcount;
1170 struct list_head list;
1171 struct completion done;
1172 enum writeback_sync_modes sync_mode;
1173 struct work_struct work;
1174 struct cifsFileInfo *cfile;
1175 struct cifs_aio_ctx *ctx;
1176 __u64 offset;
1177 pid_t pid;
1178 unsigned int bytes;
1179 int result;
1180 unsigned int pagesz;
1181 unsigned int tailsz;
1182 unsigned int credits;
1183 unsigned int nr_pages;
1184 struct page *pages[];
1185};
1186
1187
1188
1189
1190
1191static inline void
1192cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file)
1193{
1194 ++cifs_file->count;
1195}
1196
1197struct cifsFileInfo *cifsFileInfo_get(struct cifsFileInfo *cifs_file);
1198void cifsFileInfo_put(struct cifsFileInfo *cifs_file);
1199
1200#define CIFS_CACHE_READ_FLG 1
1201#define CIFS_CACHE_HANDLE_FLG 2
1202#define CIFS_CACHE_RH_FLG (CIFS_CACHE_READ_FLG | CIFS_CACHE_HANDLE_FLG)
1203#define CIFS_CACHE_WRITE_FLG 4
1204#define CIFS_CACHE_RW_FLG (CIFS_CACHE_READ_FLG | CIFS_CACHE_WRITE_FLG)
1205#define CIFS_CACHE_RHW_FLG (CIFS_CACHE_RW_FLG | CIFS_CACHE_HANDLE_FLG)
1206
1207#define CIFS_CACHE_READ(cinode) (cinode->oplock & CIFS_CACHE_READ_FLG)
1208#define CIFS_CACHE_HANDLE(cinode) (cinode->oplock & CIFS_CACHE_HANDLE_FLG)
1209#define CIFS_CACHE_WRITE(cinode) (cinode->oplock & CIFS_CACHE_WRITE_FLG)
1210
1211
1212
1213
1214
1215struct cifsInodeInfo {
1216 bool can_cache_brlcks;
1217 struct list_head llist;
1218 struct rw_semaphore lock_sem;
1219
1220 struct list_head openFileList;
1221 __u32 cifsAttrs;
1222 unsigned int oplock;
1223 unsigned int epoch;
1224#define CIFS_INODE_PENDING_OPLOCK_BREAK (0)
1225#define CIFS_INODE_PENDING_WRITERS (1)
1226#define CIFS_INODE_DOWNGRADE_OPLOCK_TO_L2 (2)
1227#define CIFS_INO_DELETE_PENDING (3)
1228#define CIFS_INO_INVALID_MAPPING (4)
1229#define CIFS_INO_LOCK (5)
1230 unsigned long flags;
1231 spinlock_t writers_lock;
1232 unsigned int writers;
1233 unsigned long time;
1234 u64 server_eof;
1235 u64 uniqueid;
1236 u64 createtime;
1237#ifdef CONFIG_CIFS_SMB2
1238 __u8 lease_key[SMB2_LEASE_KEY_SIZE];
1239#endif
1240#ifdef CONFIG_CIFS_FSCACHE
1241 struct fscache_cookie *fscache;
1242#endif
1243 struct inode vfs_inode;
1244};
1245
1246static inline struct cifsInodeInfo *
1247CIFS_I(struct inode *inode)
1248{
1249 return container_of(inode, struct cifsInodeInfo, vfs_inode);
1250}
1251
1252static inline struct cifs_sb_info *
1253CIFS_SB(struct super_block *sb)
1254{
1255 return sb->s_fs_info;
1256}
1257
1258static inline struct cifs_sb_info *
1259CIFS_FILE_SB(struct file *file)
1260{
1261 return CIFS_SB(file_inode(file)->i_sb);
1262}
1263
1264static inline char CIFS_DIR_SEP(const struct cifs_sb_info *cifs_sb)
1265{
1266 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
1267 return '/';
1268 else
1269 return '\\';
1270}
1271
1272static inline void
1273convert_delimiter(char *path, char delim)
1274{
1275 char old_delim, *pos;
1276
1277 if (delim == '/')
1278 old_delim = '\\';
1279 else
1280 old_delim = '/';
1281
1282 pos = path;
1283 while ((pos = strchr(pos, old_delim)))
1284 *pos = delim;
1285}
1286
1287#ifdef CONFIG_CIFS_STATS
1288#define cifs_stats_inc atomic_inc
1289
1290static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
1291 unsigned int bytes)
1292{
1293 if (bytes) {
1294 spin_lock(&tcon->stat_lock);
1295 tcon->bytes_written += bytes;
1296 spin_unlock(&tcon->stat_lock);
1297 }
1298}
1299
1300static inline void cifs_stats_bytes_read(struct cifs_tcon *tcon,
1301 unsigned int bytes)
1302{
1303 spin_lock(&tcon->stat_lock);
1304 tcon->bytes_read += bytes;
1305 spin_unlock(&tcon->stat_lock);
1306}
1307#else
1308
1309#define cifs_stats_inc(field) do {} while (0)
1310#define cifs_stats_bytes_written(tcon, bytes) do {} while (0)
1311#define cifs_stats_bytes_read(tcon, bytes) do {} while (0)
1312
1313#endif
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328typedef int (mid_receive_t)(struct TCP_Server_Info *server,
1329 struct mid_q_entry *mid);
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339typedef void (mid_callback_t)(struct mid_q_entry *mid);
1340
1341
1342
1343
1344
1345typedef int (mid_handle_t)(struct TCP_Server_Info *server,
1346 struct mid_q_entry *mid);
1347
1348
1349struct mid_q_entry {
1350 struct list_head qhead;
1351 struct TCP_Server_Info *server;
1352 __u64 mid;
1353 __u32 pid;
1354 __u32 sequence_number;
1355 unsigned long when_alloc;
1356#ifdef CONFIG_CIFS_STATS2
1357 unsigned long when_sent;
1358 unsigned long when_received;
1359#endif
1360 mid_receive_t *receive;
1361 mid_callback_t *callback;
1362 mid_handle_t *handle;
1363 void *callback_data;
1364 void *resp_buf;
1365 int mid_state;
1366 unsigned int mid_flags;
1367 __le16 command;
1368 bool large_buf:1;
1369 bool multiRsp:1;
1370 bool multiEnd:1;
1371 bool decrypted:1;
1372};
1373
1374struct close_cancelled_open {
1375 struct cifs_fid fid;
1376 struct cifs_tcon *tcon;
1377 struct work_struct work;
1378};
1379
1380
1381
1382#ifdef CONFIG_CIFS_STATS2
1383
1384static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
1385{
1386 atomic_inc(&server->in_send);
1387}
1388
1389static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
1390{
1391 atomic_dec(&server->in_send);
1392}
1393
1394static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
1395{
1396 atomic_inc(&server->num_waiters);
1397}
1398
1399static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
1400{
1401 atomic_dec(&server->num_waiters);
1402}
1403
1404static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1405{
1406 mid->when_sent = jiffies;
1407}
1408#else
1409static inline void cifs_in_send_inc(struct TCP_Server_Info *server)
1410{
1411}
1412static inline void cifs_in_send_dec(struct TCP_Server_Info *server)
1413{
1414}
1415
1416static inline void cifs_num_waiters_inc(struct TCP_Server_Info *server)
1417{
1418}
1419
1420static inline void cifs_num_waiters_dec(struct TCP_Server_Info *server)
1421{
1422}
1423
1424static inline void cifs_save_when_sent(struct mid_q_entry *mid)
1425{
1426}
1427#endif
1428
1429
1430struct dir_notify_req {
1431 struct list_head lhead;
1432 __le16 Pid;
1433 __le16 PidHigh;
1434 __u16 Mid;
1435 __u16 Tid;
1436 __u16 Uid;
1437 __u16 netfid;
1438 __u32 filter;
1439 int multishot;
1440 struct file *pfile;
1441};
1442
1443struct dfs_info3_param {
1444 int flags;
1445 int path_consumed;
1446 int server_type;
1447 int ref_flag;
1448 char *path_name;
1449 char *node_name;
1450};
1451
1452
1453
1454
1455
1456
1457#define CIFS_FATTR_DFS_REFERRAL 0x1
1458#define CIFS_FATTR_DELETE_PENDING 0x2
1459#define CIFS_FATTR_NEED_REVAL 0x4
1460#define CIFS_FATTR_INO_COLLISION 0x8
1461#define CIFS_FATTR_UNKNOWN_NLINK 0x10
1462
1463struct cifs_fattr {
1464 u32 cf_flags;
1465 u32 cf_cifsattrs;
1466 u64 cf_uniqueid;
1467 u64 cf_eof;
1468 u64 cf_bytes;
1469 u64 cf_createtime;
1470 kuid_t cf_uid;
1471 kgid_t cf_gid;
1472 umode_t cf_mode;
1473 dev_t cf_rdev;
1474 unsigned int cf_nlink;
1475 unsigned int cf_dtype;
1476 struct timespec cf_atime;
1477 struct timespec cf_mtime;
1478 struct timespec cf_ctime;
1479};
1480
1481static inline void free_dfs_info_param(struct dfs_info3_param *param)
1482{
1483 if (param) {
1484 kfree(param->path_name);
1485 kfree(param->node_name);
1486 kfree(param);
1487 }
1488}
1489
1490static inline void free_dfs_info_array(struct dfs_info3_param *param,
1491 int number_of_items)
1492{
1493 int i;
1494 if ((number_of_items == 0) || (param == NULL))
1495 return;
1496 for (i = 0; i < number_of_items; i++) {
1497 kfree(param[i].path_name);
1498 kfree(param[i].node_name);
1499 }
1500 kfree(param);
1501}
1502
1503#define MID_FREE 0
1504#define MID_REQUEST_ALLOCATED 1
1505#define MID_REQUEST_SUBMITTED 2
1506#define MID_RESPONSE_RECEIVED 4
1507#define MID_RETRY_NEEDED 8
1508#define MID_RESPONSE_MALFORMED 0x10
1509#define MID_SHUTDOWN 0x20
1510
1511
1512#define MID_WAIT_CANCELLED 1
1513
1514
1515#define CIFS_NO_BUFFER 0
1516#define CIFS_SMALL_BUFFER 1
1517#define CIFS_LARGE_BUFFER 2
1518#define CIFS_IOVEC 4
1519
1520
1521#define CIFS_BLOCKING_OP 1
1522#define CIFS_ASYNC_OP 2
1523#define CIFS_TIMEOUT_MASK 0x003
1524#define CIFS_LOG_ERROR 0x010
1525#define CIFS_LARGE_BUF_OP 0x020
1526#define CIFS_NO_RESP 0x040
1527
1528
1529#define CIFS_ECHO_OP 0x080
1530#define CIFS_OBREAK_OP 0x0100
1531#define CIFS_NEG_OP 0x0200
1532#define CIFS_OP_MASK 0x0380
1533
1534#define CIFS_HAS_CREDITS 0x0400
1535#define CIFS_TRANSFORM_REQ 0x0800
1536
1537
1538#define CIFSSEC_MAY_SIGN 0x00001
1539#define CIFSSEC_MAY_NTLM 0x00002
1540#define CIFSSEC_MAY_NTLMV2 0x00004
1541#define CIFSSEC_MAY_KRB5 0x00008
1542#ifdef CONFIG_CIFS_WEAK_PW_HASH
1543#define CIFSSEC_MAY_LANMAN 0x00010
1544#define CIFSSEC_MAY_PLNTXT 0x00020
1545#else
1546#define CIFSSEC_MAY_LANMAN 0
1547#define CIFSSEC_MAY_PLNTXT 0
1548#endif
1549#define CIFSSEC_MAY_SEAL 0x00040
1550#define CIFSSEC_MAY_NTLMSSP 0x00080
1551
1552#define CIFSSEC_MUST_SIGN 0x01001
1553
1554
1555
1556#define CIFSSEC_MUST_NTLM 0x02002
1557#define CIFSSEC_MUST_NTLMV2 0x04004
1558#define CIFSSEC_MUST_KRB5 0x08008
1559#ifdef CONFIG_CIFS_WEAK_PW_HASH
1560#define CIFSSEC_MUST_LANMAN 0x10010
1561#define CIFSSEC_MUST_PLNTXT 0x20020
1562#ifdef CONFIG_CIFS_UPCALL
1563#define CIFSSEC_MASK 0xBF0BF
1564#else
1565#define CIFSSEC_MASK 0xB70B7
1566#endif
1567#else
1568#define CIFSSEC_MUST_LANMAN 0
1569#define CIFSSEC_MUST_PLNTXT 0
1570#ifdef CONFIG_CIFS_UPCALL
1571#define CIFSSEC_MASK 0x8F08F
1572#else
1573#define CIFSSEC_MASK 0x87087
1574#endif
1575#endif
1576#define CIFSSEC_MUST_SEAL 0x40040
1577#define CIFSSEC_MUST_NTLMSSP 0x80080
1578
1579#define CIFSSEC_DEF (CIFSSEC_MAY_SIGN | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_NTLMSSP)
1580#define CIFSSEC_MAX (CIFSSEC_MUST_SIGN | CIFSSEC_MUST_NTLMV2)
1581#define CIFSSEC_AUTH_MASK (CIFSSEC_MAY_NTLM | CIFSSEC_MAY_NTLMV2 | CIFSSEC_MAY_LANMAN | CIFSSEC_MAY_PLNTXT | CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_NTLMSSP)
1582
1583
1584
1585
1586
1587
1588#define UID_HASH (16)
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619#ifdef DECLARE_GLOBALS_HERE
1620#define GLOBAL_EXTERN
1621#else
1622#define GLOBAL_EXTERN extern
1623#endif
1624
1625
1626
1627
1628
1629
1630
1631
1632GLOBAL_EXTERN struct list_head cifs_tcp_ses_list;
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643GLOBAL_EXTERN spinlock_t cifs_tcp_ses_lock;
1644
1645#ifdef CONFIG_CIFS_DNOTIFY_EXPERIMENTAL
1646
1647GLOBAL_EXTERN struct list_head GlobalDnotifyReqList;
1648
1649GLOBAL_EXTERN struct list_head GlobalDnotifyRsp_Q;
1650#endif
1651
1652
1653
1654
1655GLOBAL_EXTERN unsigned int GlobalCurrentXid;
1656GLOBAL_EXTERN unsigned int GlobalTotalActiveXid;
1657GLOBAL_EXTERN unsigned int GlobalMaxActiveXid;
1658GLOBAL_EXTERN spinlock_t GlobalMid_Lock;
1659
1660
1661
1662
1663GLOBAL_EXTERN atomic_t sesInfoAllocCount;
1664GLOBAL_EXTERN atomic_t tconInfoAllocCount;
1665GLOBAL_EXTERN atomic_t tcpSesAllocCount;
1666GLOBAL_EXTERN atomic_t tcpSesReconnectCount;
1667GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
1668
1669
1670GLOBAL_EXTERN atomic_t bufAllocCount;
1671#ifdef CONFIG_CIFS_STATS2
1672GLOBAL_EXTERN atomic_t totBufAllocCount;
1673GLOBAL_EXTERN atomic_t totSmBufAllocCount;
1674#endif
1675GLOBAL_EXTERN atomic_t smBufAllocCount;
1676GLOBAL_EXTERN atomic_t midCount;
1677
1678
1679GLOBAL_EXTERN bool enable_oplocks;
1680GLOBAL_EXTERN bool lookupCacheEnabled;
1681GLOBAL_EXTERN unsigned int global_secflags;
1682
1683GLOBAL_EXTERN unsigned int sign_CIFS_PDUs;
1684GLOBAL_EXTERN bool linuxExtEnabled;
1685GLOBAL_EXTERN unsigned int CIFSMaxBufSize;
1686GLOBAL_EXTERN unsigned int cifs_min_rcv;
1687GLOBAL_EXTERN unsigned int cifs_min_small;
1688GLOBAL_EXTERN unsigned int cifs_max_pending;
1689
1690#ifdef CONFIG_CIFS_ACL
1691GLOBAL_EXTERN struct rb_root uidtree;
1692GLOBAL_EXTERN struct rb_root gidtree;
1693GLOBAL_EXTERN spinlock_t siduidlock;
1694GLOBAL_EXTERN spinlock_t sidgidlock;
1695GLOBAL_EXTERN struct rb_root siduidtree;
1696GLOBAL_EXTERN struct rb_root sidgidtree;
1697GLOBAL_EXTERN spinlock_t uidsidlock;
1698GLOBAL_EXTERN spinlock_t gidsidlock;
1699#endif
1700
1701void cifs_oplock_break(struct work_struct *work);
1702
1703extern const struct slow_work_ops cifs_oplock_break_ops;
1704extern struct workqueue_struct *cifsiod_wq;
1705extern struct workqueue_struct *cifsoplockd_wq;
1706extern __u32 cifs_lock_secret;
1707
1708extern mempool_t *cifs_mid_poolp;
1709
1710
1711#define SMB1_VERSION_STRING "1.0"
1712extern struct smb_version_operations smb1_operations;
1713extern struct smb_version_values smb1_values;
1714#define SMB20_VERSION_STRING "2.0"
1715extern struct smb_version_operations smb20_operations;
1716extern struct smb_version_values smb20_values;
1717#define SMB21_VERSION_STRING "2.1"
1718extern struct smb_version_operations smb21_operations;
1719extern struct smb_version_values smb21_values;
1720#define SMB30_VERSION_STRING "3.0"
1721extern struct smb_version_operations smb30_operations;
1722extern struct smb_version_values smb30_values;
1723#define SMB302_VERSION_STRING "3.02"
1724
1725extern struct smb_version_values smb302_values;
1726#define SMB311_VERSION_STRING "3.1.1"
1727#define ALT_SMB311_VERSION_STRING "3.11"
1728extern struct smb_version_operations smb311_operations;
1729extern struct smb_version_values smb311_values;
1730#endif
1731