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