Lines Matching defs:conn

57  * @conn:	connection instance
62 static inline bool check_session_id(struct ksmbd_conn *conn, u64 id)
69 sess = ksmbd_session_lookup_all(conn, id);
76 struct channel *lookup_chann_list(struct ksmbd_session *sess, struct ksmbd_conn *conn)
78 return xa_load(&sess->ksmbd_chann_list, (long)conn);
254 struct ksmbd_conn *conn = work->conn;
273 WARN_ON(ksmbd_conn_good(conn));
276 ksmbd_debug(SMB, "conn->dialect 0x%x\n", conn->dialect);
277 rsp->DialectRevision = cpu_to_le16(conn->dialect);
278 /* Not setting conn guid rsp->ServerGUID, as it
281 rsp->Capabilities = cpu_to_le32(conn->vals->capabilities);
283 rsp->MaxTransactSize = cpu_to_le32(conn->vals->max_trans_size);
284 rsp->MaxReadSize = cpu_to_le32(conn->vals->max_read_size);
285 rsp->MaxWriteSize = cpu_to_le32(conn->vals->max_write_size);
301 conn->use_spnego = true;
303 ksmbd_conn_set_need_negotiate(conn);
315 struct ksmbd_conn *conn = work->conn;
324 if (conn->total_credits > conn->vals->max_credits) {
326 pr_err("Total credits overflow: %d\n", conn->total_credits);
332 if (credit_charge > conn->total_credits) {
334 credit_charge, conn->total_credits);
338 conn->total_credits -= credit_charge;
339 conn->outstanding_credits -= credit_charge;
352 aux_max = conn->vals->max_credits - conn->total_credits;
355 conn->total_credits += credits_granted;
365 conn->total_credits);
528 size_t large_sz = small_sz + work->conn->vals->max_trans_size;
567 struct ksmbd_conn *conn = work->conn;
580 if (!ksmbd_conn_good(conn))
603 work->sess = ksmbd_session_lookup_all(conn, sess_id);
610 static void destroy_previous_session(struct ksmbd_conn *conn,
631 ksmbd_conn_set_exiting(chann->conn);
660 struct ksmbd_conn *conn = work->conn;
663 id = ksmbd_acquire_async_msg_id(&conn->async_ida);
679 spin_lock(&conn->request_lock);
680 list_add_tail(&work->async_request_entry, &conn->async_requests);
681 spin_unlock(&conn->request_lock);
689 struct ksmbd_conn *conn = work->conn;
691 spin_lock(&conn->request_lock);
693 spin_unlock(&conn->request_lock);
700 ksmbd_release_id(&conn->async_ida, work->async_id);
716 in_work->conn = work->conn;
834 static unsigned int assemble_neg_contexts(struct ksmbd_conn *conn,
845 conn->preauth_info->Preauth_HashId);
848 if (conn->cipher_type) {
855 conn->cipher_type);
861 WARN_ON(conn->compress_algorithm != SMB3_COMPRESS_NONE);
863 if (conn->posix_ext_supported) {
873 if (conn->signing_negotiated) {
879 conn->signing_algorithm);
888 static __le32 decode_preauth_ctxt(struct ksmbd_conn *conn,
903 conn->preauth_info->Preauth_HashId = SMB2_PREAUTH_INTEGRITY_SHA512;
907 static void decode_encrypt_ctxt(struct ksmbd_conn *conn,
919 conn->cipher_type = 0;
940 conn->cipher_type = pneg_ctxt->Ciphers[i];
948 * @conn: smb connection
952 bool smb3_encryption_negotiated(struct ksmbd_conn *conn)
954 if (!conn->ops->generate_encryptionkey)
961 return (conn->vals->capabilities & SMB2_GLOBAL_CAP_ENCRYPTION) ||
962 conn->cipher_type;
965 static void decode_compress_ctxt(struct ksmbd_conn *conn,
968 conn->compress_algorithm = SMB3_COMPRESS_NONE;
971 static void decode_sign_cap_ctxt(struct ksmbd_conn *conn,
983 conn->signing_negotiated = false;
998 conn->signing_negotiated = true;
999 conn->signing_algorithm =
1006 static __le32 deassemble_neg_contexts(struct ksmbd_conn *conn,
1041 if (conn->preauth_info->Preauth_HashId)
1044 status = decode_preauth_ctxt(conn,
1052 if (conn->cipher_type)
1055 decode_encrypt_ctxt(conn,
1061 if (conn->compress_algorithm)
1064 decode_compress_ctxt(conn,
1072 conn->posix_ext_supported = true;
1077 decode_sign_cap_ctxt(conn,
1097 struct ksmbd_conn *conn = work->conn;
1105 conn->need_neg = false;
1106 if (ksmbd_conn_good(conn)) {
1107 pr_err("conn->tcp_status is already in CifsGood State\n");
1127 if (conn->dialect == SMB311_PROT_ID) {
1157 conn->cli_cap = le32_to_cpu(req->Capabilities);
1158 switch (conn->dialect) {
1160 conn->preauth_info =
1163 if (!conn->preauth_info) {
1169 status = deassemble_neg_contexts(conn, req,
1176 kfree(conn->preauth_info);
1177 conn->preauth_info = NULL;
1181 rc = init_smb3_11_server(conn);
1184 kfree(conn->preauth_info);
1185 conn->preauth_info = NULL;
1189 ksmbd_gen_preauth_integrity_hash(conn,
1191 conn->preauth_info->Preauth_HashValue);
1194 neg_ctxt_len = assemble_neg_contexts(conn, rsp);
1197 init_smb3_02_server(conn);
1200 init_smb3_0_server(conn);
1203 init_smb2_1_server(conn);
1209 conn->dialect);
1214 rsp->Capabilities = cpu_to_le32(conn->vals->capabilities);
1217 conn->connection_type = conn->dialect;
1219 rsp->MaxTransactSize = cpu_to_le32(conn->vals->max_trans_size);
1220 rsp->MaxReadSize = cpu_to_le32(conn->vals->max_read_size);
1221 rsp->MaxWriteSize = cpu_to_le32(conn->vals->max_write_size);
1223 memcpy(conn->ClientGUID, req->ClientGUID,
1225 conn->cli_sec_mode = le16_to_cpu(req->SecurityMode);
1228 rsp->DialectRevision = cpu_to_le16(conn->dialect);
1229 /* Not setting conn guid rsp->ServerGUID, as it
1246 conn->use_spnego = true;
1251 conn->sign = true;
1255 conn->sign = true;
1258 conn->srv_sec_mode = le16_to_cpu(rsp->SecurityMode);
1259 ksmbd_conn_set_need_negotiate(conn);
1275 struct ksmbd_conn *conn)
1280 sess->Preauth_HashValue = kmemdup(conn->preauth_info->Preauth_HashValue,
1290 struct ksmbd_conn *conn = work->conn;
1294 if (conn->dialect != SMB311_PROT_ID)
1297 if (conn->binding) {
1300 preauth_sess = ksmbd_preauth_session_lookup(conn, sess->id);
1302 preauth_sess = ksmbd_preauth_session_alloc(conn, sess->id);
1310 if (alloc_preauth_hash(sess, conn))
1315 ksmbd_gen_preauth_integrity_hash(conn, work->request_buf, preauth_hash);
1319 static int decode_negotiation_token(struct ksmbd_conn *conn,
1323 if (!conn->use_spnego)
1326 if (ksmbd_decode_negTokenInit((char *)negblob, sz, conn)) {
1327 if (ksmbd_decode_negTokenTarg((char *)negblob, sz, conn)) {
1328 conn->auth_mechs |= KSMBD_AUTH_NTLMSSP;
1329 conn->preferred_auth_mech = KSMBD_AUTH_NTLMSSP;
1330 conn->use_spnego = false;
1347 rc = ksmbd_decode_ntlmssp_neg_blob(negblob, negblob_len, work->conn);
1356 if (!work->conn->use_spnego) {
1357 sz = ksmbd_build_ntlmssp_challenge_blob(chgblob, work->conn);
1373 sz = ksmbd_build_ntlmssp_challenge_blob(chgblob, work->conn);
1396 static struct authenticate_message *user_authblob(struct ksmbd_conn *conn,
1401 if (conn->use_spnego && conn->mechToken)
1402 return (struct authenticate_message *)conn->mechToken;
1409 static struct ksmbd_user *session_user(struct ksmbd_conn *conn,
1417 if (conn->use_spnego && conn->mechToken)
1418 secbuf_len = conn->mechTokenLen;
1425 authblob = user_authblob(conn, req);
1435 conn->local_nls);
1451 struct ksmbd_conn *conn = work->conn;
1459 if (conn->use_spnego) {
1475 user = session_user(conn, req);
1484 destroy_previous_session(conn, user, prev_id);
1491 if (conn->binding == false && ksmbd_anonymous_user(user)) {
1505 if (conn->binding == false && user_guest(sess->user)) {
1510 authblob = user_authblob(conn, req);
1511 if (conn->use_spnego && conn->mechToken)
1512 sz = conn->mechTokenLen;
1515 rc = ksmbd_decode_ntlmssp_auth_blob(authblob, sz, conn, sess);
1529 if (conn->binding)
1535 (conn->sign || server_conf.enforced_signing)) ||
1539 if (smb3_encryption_negotiated(conn) &&
1541 rc = conn->ops->generate_encryptionkey(conn, sess);
1558 if (conn->dialect >= SMB30_PROT_ID) {
1559 chann = lookup_chann_list(sess, conn);
1565 chann->conn = conn;
1566 xa_store(&sess->ksmbd_chann_list, (long)conn, chann, GFP_KERNEL);
1570 if (conn->ops->generate_signingkey) {
1571 rc = conn->ops->generate_signingkey(sess, conn);
1578 if (!ksmbd_conn_lookup_dialect(conn)) {
1590 struct ksmbd_conn *conn = work->conn;
1609 destroy_previous_session(conn, sess->user, prev_sess_id);
1622 if ((conn->sign || server_conf.enforced_signing) ||
1626 if (smb3_encryption_negotiated(conn)) {
1627 retval = conn->ops->generate_encryptionkey(conn, sess);
1639 if (conn->dialect >= SMB30_PROT_ID) {
1640 chann = lookup_chann_list(sess, conn);
1646 chann->conn = conn;
1647 xa_store(&sess->ksmbd_chann_list, (long)conn, chann, GFP_KERNEL);
1651 if (conn->ops->generate_signingkey) {
1652 retval = conn->ops->generate_signingkey(sess, conn);
1659 if (!ksmbd_conn_lookup_dialect(conn)) {
1676 struct ksmbd_conn *conn = work->conn;
1693 ksmbd_conn_lock(conn);
1701 rc = ksmbd_session_register(conn, sess);
1704 } else if (conn->dialect >= SMB30_PROT_ID &&
1715 if (conn->dialect != sess->dialect) {
1725 if (strncmp(conn->ClientGUID, sess->ClientGUID,
1741 if (ksmbd_conn_need_reconnect(conn)) {
1747 if (ksmbd_session_lookup(conn, sess_id)) {
1757 conn->binding = true;
1758 } else if ((conn->dialect < SMB30_PROT_ID ||
1765 sess = ksmbd_session_lookup(conn,
1777 if (ksmbd_conn_need_reconnect(conn)) {
1795 if (decode_negotiation_token(conn, negblob, negblob_len) == 0) {
1796 if (conn->mechToken) {
1797 negblob = (struct negotiate_message *)conn->mechToken;
1798 negblob_len = conn->mechTokenLen;
1807 if (server_conf.auth_mechs & conn->auth_mechs) {
1812 if (conn->preferred_auth_mech &
1820 if (!ksmbd_conn_need_reconnect(conn)) {
1821 ksmbd_conn_set_good(conn);
1826 } else if (conn->preferred_auth_mech == KSMBD_AUTH_NTLMSSP) {
1838 if (!ksmbd_conn_need_reconnect(conn)) {
1839 ksmbd_conn_set_good(conn);
1842 if (conn->binding) {
1846 ksmbd_preauth_session_lookup(conn, sess->id);
1885 if (conn->use_spnego && conn->mechToken) {
1886 kfree(conn->mechToken);
1887 conn->mechToken = NULL;
1912 ksmbd_conn_set_need_reconnect(conn);
1914 ksmbd_conn_set_need_negotiate(conn);
1931 ksmbd_conn_unlock(conn);
1943 struct ksmbd_conn *conn = work->conn;
1956 conn->local_nls);
1963 name = ksmbd_extract_sharename(conn->um, treename);
1972 status = ksmbd_tree_conn_connect(conn, sess, name);
2003 if (conn->posix_ext_supported)
2192 struct ksmbd_conn *conn = work->conn;
2203 ksmbd_conn_lock(conn);
2204 if (!ksmbd_conn_good(conn)) {
2205 ksmbd_conn_unlock(conn);
2212 ksmbd_conn_unlock(conn);
2215 ksmbd_conn_wait_idle(conn, sess_id);
2221 sess = ksmbd_session_lookup_all(conn, sess_id);
2263 1, work->conn->local_nls);
2621 return set_info_sec(work->conn, work->tcon, path, &sd_buf->ntsd,
2653 struct ksmbd_conn *conn = work->conn;
2709 work->conn->local_nls);
2964 rc = smb_check_perm_dacl(conn, &path, &daccess,
3111 rc = smb_inherit_dacl(conn, &path, sess->user->uid,
3158 rc = ksmbd_vfs_set_sd_xattr(conn,
3217 !(conn->vals->capabilities & SMB2_GLOBAL_CAP_LEASING))) {
3318 memcpy(fp->client_guid, conn->ClientGUID, SMB2_CLIENT_GUID_SIZE);
3360 conn->vals->create_lease_size);
3361 iov_len += conn->vals->create_lease_size;
3363 next_off = conn->vals->create_lease_size;
3380 conn->vals->create_mxac_size);
3381 iov_len += conn->vals->create_mxac_size;
3385 next_off = conn->vals->create_mxac_size;
3398 conn->vals->create_disk_id_size);
3399 iov_len += conn->vals->create_disk_id_size;
3403 next_off = conn->vals->create_disk_id_size;
3412 conn->vals->create_posix_size);
3413 iov_len += conn->vals->create_posix_size;
3576 * @conn: connection instance
3586 static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
3597 conn->local_nls,
3837 rc = smb2_populate_readdir_entry(priv->work->conn,
4018 if (out_buf_len > work->conn->vals->max_trans_size)
4030 struct ksmbd_conn *conn = work->conn;
4080 conn->local_nls);
4546 struct ksmbd_conn *conn = work->conn;
4596 PATH_MAX, conn->local_nls, 0);
4610 struct ksmbd_conn *conn = work->conn;
4617 conv_len = ksmbd_extract_shortname(conn,
4631 struct ksmbd_conn *conn = work->conn;
4692 conn->local_nls, 0);
4710 "::$DATA", 7, conn->local_nls, 0);
5008 struct ksmbd_conn *conn = work->conn;
5066 "NTFS", PATH_MAX, conn->local_nls, 0);
5091 conn->local_nls, 0);
5273 ppntsd_size = ksmbd_vfs_get_sd_xattr(work->conn, idmap,
5399 struct ksmbd_conn *conn = work->conn;
5418 if (check_session_id(conn, sess_id)) {
5849 return smb2_rename(work, fp, rename_info, work->conn->local_nls);
5975 work->conn->local_nls);
6026 return set_info_sec(fp->conn, fp->tcon, &fp->filp->f_path, pntsd,
6210 if (work->conn->dialect == SMB30_PROT_ID &&
6239 err = ksmbd_conn_rdma_write(work->conn, data_buf, length,
6257 struct ksmbd_conn *conn = work->conn;
6266 unsigned int max_read_size = conn->vals->max_read_size;
6499 ret = ksmbd_conn_rdma_read(work->conn, data_buf, length,
6533 unsigned int max_write_size = work->conn->vals->max_write_size;
6697 struct ksmbd_conn *conn = work->conn;
6710 command_list = &conn->async_requests;
6712 spin_lock(&conn->request_lock);
6730 spin_unlock(&conn->request_lock);
6732 command_list = &conn->requests;
6734 spin_lock(&conn->request_lock);
6749 spin_unlock(&conn->request_lock);
6877 struct ksmbd_conn *conn;
6991 list_for_each_entry(conn, &conn_list, conns_list) {
6992 spin_lock(&conn->llist_lock);
6993 list_for_each_entry_safe(cmp_lock, tmp2, &conn->lock_list, clist) {
7006 spin_unlock(&conn->llist_lock);
7028 spin_unlock(&conn->llist_lock);
7037 spin_unlock(&conn->llist_lock);
7048 spin_unlock(&conn->llist_lock);
7054 spin_unlock(&conn->llist_lock);
7144 spin_lock(&work->conn->llist_lock);
7146 &work->conn->lock_list);
7149 spin_unlock(&work->conn->llist_lock);
7191 spin_lock(&work->conn->llist_lock);
7195 spin_unlock(&work->conn->llist_lock);
7350 static int fsctl_query_iface_info_ioctl(struct ksmbd_conn *conn,
7458 static int fsctl_validate_negotiate_info(struct ksmbd_conn *conn,
7472 if (dialect == BAD_PROT_ID || dialect != conn->dialect) {
7477 if (strncmp(neg_req->Guid, conn->ClientGUID, SMB2_CLIENT_GUID_SIZE)) {
7482 if (le16_to_cpu(neg_req->SecurityMode) != conn->cli_sec_mode) {
7487 if (le32_to_cpu(neg_req->Capabilities) != conn->cli_cap) {
7492 neg_rsp->Capabilities = cpu_to_le32(conn->vals->capabilities);
7494 neg_rsp->SecurityMode = cpu_to_le16(conn->srv_sec_mode);
7495 neg_rsp->Dialect = cpu_to_le16(conn->dialect);
7649 struct ksmbd_conn *conn = work->conn;
7713 if (conn->dialect < SMB30_PROT_ID) {
7729 ret = fsctl_validate_negotiate_info(conn,
7741 ret = fsctl_query_iface_info_ioctl(conn, rsp, out_buf_len);
8137 struct ksmbd_conn *conn = work->conn;
8151 opinfo = lookup_lease_in_table(conn, req->LeaseKey);
8372 if (ksmbd_sign_smb2_pdu(work->conn, work->sess->sess_key, iov, 1,
8407 if (!ksmbd_sign_smb2_pdu(work->conn, work->sess->sess_key, iov, n_vec,
8420 struct ksmbd_conn *conn = work->conn;
8444 chann = lookup_chann_list(work->sess, conn);
8461 if (ksmbd_sign_smb3_pdu(conn, signing_key, iov, 1, signature))
8479 struct ksmbd_conn *conn = work->conn;
8489 if (conn->binding == false &&
8493 chann = lookup_chann_list(work->sess, work->conn);
8513 if (!ksmbd_sign_smb3_pdu(conn, signing_key, iov, n_vec,
8525 struct ksmbd_conn *conn = work->conn;
8529 if (conn->dialect != SMB311_PROT_ID)
8535 conn->preauth_info)
8536 ksmbd_gen_preauth_integrity_hash(conn, work->response_buf,
8537 conn->preauth_info->Preauth_HashValue);
8542 if (conn->binding) {
8545 preauth_sess = ksmbd_preauth_session_lookup(conn, sess->id);
8554 ksmbd_gen_preauth_integrity_hash(conn, work->response_buf,
8590 fill_transform_hdr(tr_buf, work->response_buf, work->conn->cipher_type);
8628 sess = ksmbd_session_lookup_all(work->conn, le64_to_cpu(tr_hdr->SessionId));
8651 struct ksmbd_conn *conn = work->conn;
8655 if (conn->dialect < SMB30_PROT_ID)