Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *   Copyright (C) 2018 Samsung Electronics Co., Ltd.
0004  */
0005 
0006 #ifndef __USER_SESSION_MANAGEMENT_H__
0007 #define __USER_SESSION_MANAGEMENT_H__
0008 
0009 #include <linux/hashtable.h>
0010 #include <linux/xarray.h>
0011 
0012 #include "../smb_common.h"
0013 #include "../ntlmssp.h"
0014 
0015 #define CIFDS_SESSION_FLAG_SMB2     BIT(1)
0016 
0017 #define PREAUTH_HASHVALUE_SIZE      64
0018 
0019 struct ksmbd_file_table;
0020 
0021 struct channel {
0022     __u8            smb3signingkey[SMB3_SIGN_KEY_SIZE];
0023     struct ksmbd_conn   *conn;
0024     struct list_head    chann_list;
0025 };
0026 
0027 struct preauth_session {
0028     __u8            Preauth_HashValue[PREAUTH_HASHVALUE_SIZE];
0029     u64         id;
0030     struct list_head    preauth_entry;
0031 };
0032 
0033 struct ksmbd_session {
0034     u64             id;
0035 
0036     __u16               dialect;
0037     char                ClientGUID[SMB2_CLIENT_GUID_SIZE];
0038 
0039     struct ksmbd_user       *user;
0040     unsigned int            sequence_number;
0041     unsigned int            flags;
0042 
0043     bool                sign;
0044     bool                enc;
0045     bool                is_anonymous;
0046 
0047     int             state;
0048     __u8                *Preauth_HashValue;
0049 
0050     char                sess_key[CIFS_KEY_SIZE];
0051 
0052     struct hlist_node       hlist;
0053     rwlock_t            chann_lock;
0054     struct list_head        ksmbd_chann_list;
0055     struct xarray           tree_conns;
0056     struct ida          tree_conn_ida;
0057     struct list_head        rpc_handle_list;
0058 
0059     __u8                smb3encryptionkey[SMB3_ENC_DEC_KEY_SIZE];
0060     __u8                smb3decryptionkey[SMB3_ENC_DEC_KEY_SIZE];
0061     __u8                smb3signingkey[SMB3_SIGN_KEY_SIZE];
0062 
0063     struct ksmbd_file_table     file_table;
0064 };
0065 
0066 static inline int test_session_flag(struct ksmbd_session *sess, int bit)
0067 {
0068     return sess->flags & bit;
0069 }
0070 
0071 static inline void set_session_flag(struct ksmbd_session *sess, int bit)
0072 {
0073     sess->flags |= bit;
0074 }
0075 
0076 static inline void clear_session_flag(struct ksmbd_session *sess, int bit)
0077 {
0078     sess->flags &= ~bit;
0079 }
0080 
0081 struct ksmbd_session *ksmbd_smb2_session_create(void);
0082 
0083 void ksmbd_session_destroy(struct ksmbd_session *sess);
0084 
0085 struct ksmbd_session *ksmbd_session_lookup_slowpath(unsigned long long id);
0086 struct ksmbd_session *ksmbd_session_lookup(struct ksmbd_conn *conn,
0087                        unsigned long long id);
0088 int ksmbd_session_register(struct ksmbd_conn *conn,
0089                struct ksmbd_session *sess);
0090 void ksmbd_sessions_deregister(struct ksmbd_conn *conn);
0091 struct ksmbd_session *ksmbd_session_lookup_all(struct ksmbd_conn *conn,
0092                            unsigned long long id);
0093 struct preauth_session *ksmbd_preauth_session_alloc(struct ksmbd_conn *conn,
0094                             u64 sess_id);
0095 struct preauth_session *ksmbd_preauth_session_lookup(struct ksmbd_conn *conn,
0096                              unsigned long long id);
0097 
0098 int ksmbd_acquire_tree_conn_id(struct ksmbd_session *sess);
0099 void ksmbd_release_tree_conn_id(struct ksmbd_session *sess, int id);
0100 
0101 int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name);
0102 void ksmbd_session_rpc_close(struct ksmbd_session *sess, int id);
0103 int ksmbd_session_rpc_method(struct ksmbd_session *sess, int id);
0104 #endif /* __USER_SESSION_MANAGEMENT_H__ */