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