Lines Matching refs:work

42 static void __wbuf(struct ksmbd_work *work, void **req, void **rsp)  in __wbuf()  argument
44 if (work->next_smb2_rcv_hdr_off) { in __wbuf()
45 *req = ksmbd_req_buf_next(work); in __wbuf()
46 *rsp = ksmbd_resp_buf_next(work); in __wbuf()
48 *req = smb2_get_msg(work->request_buf); in __wbuf()
49 *rsp = smb2_get_msg(work->response_buf); in __wbuf()
88 int smb2_get_ksmbd_tcon(struct ksmbd_work *work) in smb2_get_ksmbd_tcon() argument
90 struct smb2_hdr *req_hdr = ksmbd_req_buf_next(work); in smb2_get_ksmbd_tcon()
101 if (xa_empty(&work->sess->tree_conns)) { in smb2_get_ksmbd_tcon()
112 if (work->next_smb2_rcv_hdr_off) { in smb2_get_ksmbd_tcon()
113 if (!work->tcon) { in smb2_get_ksmbd_tcon()
117 if (tree_id != UINT_MAX && work->tcon->id != tree_id) { in smb2_get_ksmbd_tcon()
119 tree_id, work->tcon->id); in smb2_get_ksmbd_tcon()
125 work->tcon = ksmbd_tree_conn_lookup(work->sess, tree_id); in smb2_get_ksmbd_tcon()
126 if (!work->tcon) { in smb2_get_ksmbd_tcon()
138 void smb2_set_err_rsp(struct ksmbd_work *work) in smb2_set_err_rsp() argument
142 if (work->next_smb2_rcv_hdr_off) in smb2_set_err_rsp()
143 err_rsp = ksmbd_resp_buf_next(work); in smb2_set_err_rsp()
145 err_rsp = smb2_get_msg(work->response_buf); in smb2_set_err_rsp()
155 err = ksmbd_iov_pin_rsp(work, (void *)err_rsp, in smb2_set_err_rsp()
159 work->send_no_response = 1; in smb2_set_err_rsp()
169 bool is_smb2_neg_cmd(struct ksmbd_work *work) in is_smb2_neg_cmd() argument
171 struct smb2_hdr *hdr = smb2_get_msg(work->request_buf); in is_smb2_neg_cmd()
193 bool is_smb2_rsp(struct ksmbd_work *work) in is_smb2_rsp() argument
195 struct smb2_hdr *hdr = smb2_get_msg(work->response_buf); in is_smb2_rsp()
214 u16 get_smb2_cmd_val(struct ksmbd_work *work) in get_smb2_cmd_val() argument
218 if (work->next_smb2_rcv_hdr_off) in get_smb2_cmd_val()
219 rcv_hdr = ksmbd_req_buf_next(work); in get_smb2_cmd_val()
221 rcv_hdr = smb2_get_msg(work->request_buf); in get_smb2_cmd_val()
230 void set_smb2_rsp_status(struct ksmbd_work *work, __le32 err) in set_smb2_rsp_status() argument
234 rsp_hdr = smb2_get_msg(work->response_buf); in set_smb2_rsp_status()
237 work->iov_idx = 0; in set_smb2_rsp_status()
238 work->iov_cnt = 0; in set_smb2_rsp_status()
239 work->next_smb2_rcv_hdr_off = 0; in set_smb2_rsp_status()
240 smb2_set_err_rsp(work); in set_smb2_rsp_status()
250 int init_smb2_neg_rsp(struct ksmbd_work *work) in init_smb2_neg_rsp() argument
254 struct ksmbd_conn *conn = work->conn; in init_smb2_neg_rsp()
257 rsp_hdr = smb2_get_msg(work->response_buf); in init_smb2_neg_rsp()
271 rsp = smb2_get_msg(work->response_buf); in init_smb2_neg_rsp()
297 err = ksmbd_iov_pin_rsp(work, rsp, in init_smb2_neg_rsp()
311 int smb2_set_rsp_credits(struct ksmbd_work *work) in smb2_set_rsp_credits() argument
313 struct smb2_hdr *req_hdr = ksmbd_req_buf_next(work); in smb2_set_rsp_credits()
314 struct smb2_hdr *hdr = ksmbd_resp_buf_next(work); in smb2_set_rsp_credits()
315 struct ksmbd_conn *conn = work->conn; in smb2_set_rsp_credits()
319 if (work->send_no_response) in smb2_set_rsp_credits()
356 work->credits_granted += credits_granted; in smb2_set_rsp_credits()
360 hdr->CreditRequest = cpu_to_le16(work->credits_granted); in smb2_set_rsp_credits()
373 static void init_chained_smb2_rsp(struct ksmbd_work *work) in init_chained_smb2_rsp() argument
375 struct smb2_hdr *req = ksmbd_req_buf_next(work); in init_chained_smb2_rsp()
376 struct smb2_hdr *rsp = ksmbd_resp_buf_next(work); in init_chained_smb2_rsp()
390 work->compound_fid = ((struct smb2_create_rsp *)rsp)->VolatileFileId; in init_chained_smb2_rsp()
391 work->compound_pfid = ((struct smb2_create_rsp *)rsp)->PersistentFileId; in init_chained_smb2_rsp()
392 work->compound_sid = le64_to_cpu(rsp->SessionId); in init_chained_smb2_rsp()
395 len = get_rfc1002_len(work->response_buf) - work->next_smb2_rsp_hdr_off; in init_chained_smb2_rsp()
399 work->iov[work->iov_idx].iov_len += (new_len - len); in init_chained_smb2_rsp()
400 inc_rfc1001_len(work->response_buf, new_len - len); in init_chained_smb2_rsp()
403 work->next_smb2_rcv_hdr_off += next_hdr_offset; in init_chained_smb2_rsp()
404 work->curr_smb2_rsp_hdr_off = work->next_smb2_rsp_hdr_off; in init_chained_smb2_rsp()
405 work->next_smb2_rsp_hdr_off += new_len; in init_chained_smb2_rsp()
408 new_len, work->next_smb2_rcv_hdr_off, in init_chained_smb2_rsp()
409 work->next_smb2_rsp_hdr_off); in init_chained_smb2_rsp()
411 rsp_hdr = ksmbd_resp_buf_next(work); in init_chained_smb2_rsp()
412 rcv_hdr = ksmbd_req_buf_next(work); in init_chained_smb2_rsp()
416 work->compound_fid = KSMBD_NO_FID; in init_chained_smb2_rsp()
417 work->compound_pfid = KSMBD_NO_FID; in init_chained_smb2_rsp()
443 bool is_chained_smb2_message(struct ksmbd_work *work) in is_chained_smb2_message() argument
445 struct smb2_hdr *hdr = smb2_get_msg(work->request_buf); in is_chained_smb2_message()
451 hdr = ksmbd_req_buf_next(work); in is_chained_smb2_message()
454 if ((u64)work->next_smb2_rcv_hdr_off + next_cmd + in is_chained_smb2_message()
456 get_rfc1002_len(work->request_buf)) { in is_chained_smb2_message()
462 if ((u64)get_rfc1002_len(work->response_buf) + MAX_CIFS_SMALL_BUFFER_SIZE > in is_chained_smb2_message()
463 work->response_sz) { in is_chained_smb2_message()
469 init_chained_smb2_rsp(work); in is_chained_smb2_message()
471 } else if (work->next_smb2_rcv_hdr_off) { in is_chained_smb2_message()
476 len = ALIGN(get_rfc1002_len(work->response_buf), 8); in is_chained_smb2_message()
477 len = len - get_rfc1002_len(work->response_buf); in is_chained_smb2_message()
480 work->iov[work->iov_idx].iov_len += len; in is_chained_smb2_message()
481 inc_rfc1001_len(work->response_buf, len); in is_chained_smb2_message()
483 work->curr_smb2_rsp_hdr_off = work->next_smb2_rsp_hdr_off; in is_chained_smb2_message()
494 int init_smb2_rsp_hdr(struct ksmbd_work *work) in init_smb2_rsp_hdr() argument
496 struct smb2_hdr *rsp_hdr = smb2_get_msg(work->response_buf); in init_smb2_rsp_hdr()
497 struct smb2_hdr *rcv_hdr = smb2_get_msg(work->request_buf); in init_smb2_rsp_hdr()
524 int smb2_allocate_rsp_buf(struct ksmbd_work *work) in smb2_allocate_rsp_buf() argument
526 struct smb2_hdr *hdr = smb2_get_msg(work->request_buf); in smb2_allocate_rsp_buf()
528 size_t large_sz = small_sz + work->conn->vals->max_trans_size; in smb2_allocate_rsp_buf()
538 if (get_rfc1002_len(work->request_buf) < in smb2_allocate_rsp_buf()
542 req = smb2_get_msg(work->request_buf); in smb2_allocate_rsp_buf()
554 work->response_buf = kvzalloc(sz, GFP_KERNEL); in smb2_allocate_rsp_buf()
555 if (!work->response_buf) in smb2_allocate_rsp_buf()
558 work->response_sz = sz; in smb2_allocate_rsp_buf()
568 int smb2_check_user_session(struct ksmbd_work *work) in smb2_check_user_session() argument
570 struct smb2_hdr *req_hdr = ksmbd_req_buf_next(work); in smb2_check_user_session()
571 struct ksmbd_conn *conn = work->conn; in smb2_check_user_session()
593 if (work->next_smb2_rcv_hdr_off) { in smb2_check_user_session()
594 if (!work->sess) { in smb2_check_user_session()
598 if (sess_id != ULLONG_MAX && work->sess->id != sess_id) { in smb2_check_user_session()
600 sess_id, work->sess->id); in smb2_check_user_session()
607 work->sess = ksmbd_session_lookup_all(conn, sess_id); in smb2_check_user_session()
608 if (work->sess) { in smb2_check_user_session()
609 ksmbd_user_session_get(work->sess); in smb2_check_user_session()
646 int setup_async_work(struct ksmbd_work *work, void (*fn)(void **), void **arg) in setup_async_work() argument
648 struct ksmbd_conn *conn = work->conn; in setup_async_work()
656 work->asynchronous = true; in setup_async_work()
657 work->async_id = id; in setup_async_work()
661 work->async_id); in setup_async_work()
663 work->cancel_fn = fn; in setup_async_work()
664 work->cancel_argv = arg; in setup_async_work()
666 if (list_empty(&work->async_request_entry)) { in setup_async_work()
668 list_add_tail(&work->async_request_entry, &conn->async_requests); in setup_async_work()
675 void release_async_work(struct ksmbd_work *work) in release_async_work() argument
677 struct ksmbd_conn *conn = work->conn; in release_async_work()
680 list_del_init(&work->async_request_entry); in release_async_work()
683 work->asynchronous = 0; in release_async_work()
684 work->cancel_fn = NULL; in release_async_work()
685 kfree(work->cancel_argv); in release_async_work()
686 work->cancel_argv = NULL; in release_async_work()
687 if (work->async_id) { in release_async_work()
688 ksmbd_release_id(&conn->async_ida, work->async_id); in release_async_work()
689 work->async_id = 0; in release_async_work()
693 void smb2_send_interim_resp(struct ksmbd_work *work, __le32 status) in smb2_send_interim_resp() argument
704 in_work->conn = work->conn; in smb2_send_interim_resp()
705 memcpy(smb2_get_msg(in_work->response_buf), ksmbd_resp_buf_next(work), in smb2_send_interim_resp()
710 rsp_hdr->Id.AsyncId = cpu_to_le64(work->async_id); in smb2_send_interim_resp()
1083 int smb2_handle_negotiate(struct ksmbd_work *work) in smb2_handle_negotiate() argument
1085 struct ksmbd_conn *conn = work->conn; in smb2_handle_negotiate()
1086 struct smb2_negotiate_req *req = smb2_get_msg(work->request_buf); in smb2_handle_negotiate()
1087 struct smb2_negotiate_rsp *rsp = smb2_get_msg(work->response_buf); in smb2_handle_negotiate()
1096 work->send_no_response = 1; in smb2_handle_negotiate()
1100 smb2_buf_len = get_rfc1002_len(work->request_buf); in smb2_handle_negotiate()
1158 get_rfc1002_len(work->request_buf)); in smb2_handle_negotiate()
1178 work->request_buf, in smb2_handle_negotiate()
1254 rc = ksmbd_iov_pin_rsp(work, rsp, in smb2_handle_negotiate()
1258 smb2_set_err_rsp(work); in smb2_handle_negotiate()
1276 static int generate_preauth_hash(struct ksmbd_work *work) in generate_preauth_hash() argument
1278 struct ksmbd_conn *conn = work->conn; in generate_preauth_hash()
1279 struct ksmbd_session *sess = work->sess; in generate_preauth_hash()
1303 ksmbd_gen_preauth_integrity_hash(conn, work->request_buf, preauth_hash); in generate_preauth_hash()
1324 static int ntlm_negotiate(struct ksmbd_work *work, in ntlm_negotiate() argument
1335 rc = ksmbd_decode_ntlmssp_neg_blob(negblob, negblob_len, work->conn); in ntlm_negotiate()
1343 if (!work->conn->use_spnego) { in ntlm_negotiate()
1344 sz = ksmbd_build_ntlmssp_challenge_blob(chgblob, work->conn); in ntlm_negotiate()
1360 sz = ksmbd_build_ntlmssp_challenge_blob(chgblob, work->conn); in ntlm_negotiate()
1433 static int ntlm_authenticate(struct ksmbd_work *work, in ntlm_authenticate() argument
1437 struct ksmbd_conn *conn = work->conn; in ntlm_authenticate()
1438 struct ksmbd_session *sess = work->sess; in ntlm_authenticate()
1571 static int krb5_authenticate(struct ksmbd_work *work, in krb5_authenticate() argument
1575 struct ksmbd_conn *conn = work->conn; in krb5_authenticate()
1576 struct ksmbd_session *sess = work->sess; in krb5_authenticate()
1588 out_len = work->response_sz - in krb5_authenticate()
1651 static int krb5_authenticate(struct ksmbd_work *work, in krb5_authenticate() argument
1659 int smb2_sess_setup(struct ksmbd_work *work) in smb2_sess_setup() argument
1661 struct ksmbd_conn *conn = work->conn; in smb2_sess_setup()
1671 WORK_BUFFERS(work, req, rsp); in smb2_sess_setup()
1774 work->sess = sess; in smb2_sess_setup()
1799 rc = generate_preauth_hash(work); in smb2_sess_setup()
1805 rc = krb5_authenticate(work, req, rsp); in smb2_sess_setup()
1819 rc = ntlm_negotiate(work, negblob, negblob_len, rsp); in smb2_sess_setup()
1825 rc = ntlm_authenticate(work, req, rsp); in smb2_sess_setup()
1908 smb2_set_err_rsp(work); in smb2_sess_setup()
1917 rc = ksmbd_iov_pin_rsp(work, rsp, iov_len); in smb2_sess_setup()
1932 int smb2_tree_connect(struct ksmbd_work *work) in smb2_tree_connect() argument
1934 struct ksmbd_conn *conn = work->conn; in smb2_tree_connect()
1937 struct ksmbd_session *sess = work->sess; in smb2_tree_connect()
1943 WORK_BUFFERS(work, req, rsp); in smb2_tree_connect()
1963 status = ksmbd_tree_conn_connect(work, name); in smb2_tree_connect()
2012 rc = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_tree_connect_rsp)); in smb2_tree_connect()
2048 smb2_set_err_rsp(work); in smb2_tree_connect()
2131 int smb2_tree_disconnect(struct ksmbd_work *work) in smb2_tree_disconnect() argument
2135 struct ksmbd_session *sess = work->sess; in smb2_tree_disconnect()
2136 struct ksmbd_tree_connect *tcon = work->tcon; in smb2_tree_disconnect()
2139 WORK_BUFFERS(work, req, rsp); in smb2_tree_disconnect()
2151 ksmbd_close_tree_conn_fds(work); in smb2_tree_disconnect()
2171 work->tcon = NULL; in smb2_tree_disconnect()
2174 err = ksmbd_iov_pin_rsp(work, rsp, in smb2_tree_disconnect()
2184 smb2_set_err_rsp(work); in smb2_tree_disconnect()
2195 int smb2_session_logoff(struct ksmbd_work *work) in smb2_session_logoff() argument
2197 struct ksmbd_conn *conn = work->conn; in smb2_session_logoff()
2204 WORK_BUFFERS(work, req, rsp); in smb2_session_logoff()
2212 smb2_set_err_rsp(work); in smb2_session_logoff()
2219 ksmbd_close_session_fds(work); in smb2_session_logoff()
2230 smb2_set_err_rsp(work); in smb2_session_logoff()
2244 err = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_logoff_rsp)); in smb2_session_logoff()
2247 smb2_set_err_rsp(work); in smb2_session_logoff()
2259 static noinline int create_smb2_pipe(struct ksmbd_work *work) in create_smb2_pipe() argument
2267 WORK_BUFFERS(work, req, rsp); in create_smb2_pipe()
2270 1, work->conn->local_nls); in create_smb2_pipe()
2277 id = ksmbd_session_rpc_open(work->sess, name); in create_smb2_pipe()
2302 err = ksmbd_iov_pin_rsp(work, rsp, offsetof(struct smb2_create_rsp, Buffer)); in create_smb2_pipe()
2323 smb2_set_err_rsp(work); in create_smb2_pipe()
2567 static int smb2_creat(struct ksmbd_work *work, struct path *parent_path, in smb2_creat() argument
2571 struct ksmbd_tree_connect *tcon = work->tcon; in smb2_creat()
2584 rc = ksmbd_vfs_mkdir(work, name, mode); in smb2_creat()
2591 rc = ksmbd_vfs_create(work, name, mode); in smb2_creat()
2596 rc = ksmbd_vfs_kern_path_locked(work, name, 0, parent_path, path, 0); in smb2_creat()
2605 static int smb2_create_sd_buffer(struct ksmbd_work *work, in smb2_create_sd_buffer() argument
2629 return set_info_sec(work->conn, work->tcon, path, &sd_buf->ntsd, in smb2_create_sd_buffer()
2669 static int parse_durable_handle_context(struct ksmbd_work *work, in parse_durable_handle_context() argument
2674 struct ksmbd_conn *conn = work->conn; in parse_durable_handle_context()
2818 int smb2_open(struct ksmbd_work *work) in smb2_open() argument
2820 struct ksmbd_conn *conn = work->conn; in smb2_open()
2821 struct ksmbd_session *sess = work->sess; in smb2_open()
2822 struct ksmbd_tree_connect *tcon = work->tcon; in smb2_open()
2852 WORK_BUFFERS(work, req, rsp); in smb2_open()
2854 if (req->hdr.NextCommand && !work->next_smb2_rcv_hdr_off && in smb2_open()
2858 smb2_set_err_rsp(work); in smb2_open()
2864 return create_smb2_pipe(work); in smb2_open()
2870 work->conn->local_nls); in smb2_open()
2879 if (!test_share_config_flag(work->tcon->share_conf, in smb2_open()
2912 rc = parse_durable_handle_context(work, req, lc, &dh_info); in smb2_open()
2925 rc = ksmbd_reopen_durable_fd(work, dh_info.fp); in smb2_open()
2931 if (ksmbd_override_fsids(work)) { in smb2_open()
3073 if (ksmbd_override_fsids(work)) { in smb2_open()
3078 rc = ksmbd_vfs_kern_path_locked(work, name, LOOKUP_NO_SYMLINKS, in smb2_open()
3200 rc = smb2_creat(work, &parent_path, &path, name, open_flags, in smb2_open()
3281 fp = ksmbd_open_fd(work, filp); in smb2_open()
3312 if (test_share_config_flag(work->tcon->share_conf, in smb2_open()
3319 rc = smb2_create_sd_buffer(work, req, &path); in smb2_open()
3325 if (test_share_config_flag(work->tcon->share_conf, in smb2_open()
3409 smb_break_all_oplock(work, fp); in smb2_open()
3414 if (!test_share_config_flag(work->tcon->share_conf, KSMBD_SHARE_FLAG_OPLOCKS) || in smb2_open()
3447 rc = smb_grant_oplock(work, req_op_level, in smb2_open()
3486 smb_break_all_levII_oplock(work, fp, 1); in smb2_open()
3526 test_share_config_flag(work->tcon->share_conf, in smb2_open()
3680 ksmbd_revert_fsids(work); in smb2_open()
3684 ksmbd_update_fstate(&work->sess->file_table, fp, FP_INITED); in smb2_open()
3685 rc = ksmbd_iov_pin_rsp(work, (void *)rsp, iov_len); in smb2_open()
3714 ksmbd_fd_put(work, fp); in smb2_open()
3715 smb2_set_err_rsp(work); in smb2_open()
4027 struct ksmbd_work *work; member
4084 rc = ksmbd_vfs_fill_dentry_attrs(priv->work, in process_query_dir_entries()
4094 rc = smb2_populate_readdir_entry(priv->work->conn, in process_query_dir_entries()
4227 if (ksmbd_share_veto_filename(priv->work->tcon->share_conf, name)) in __query_dir()
4260 static int smb2_resp_buf_len(struct ksmbd_work *work, unsigned short hdr2_len) in smb2_resp_buf_len() argument
4264 free_len = (int)(work->response_sz - in smb2_resp_buf_len()
4265 (get_rfc1002_len(work->response_buf) + 4)) - hdr2_len; in smb2_resp_buf_len()
4269 static int smb2_calc_max_out_buf_len(struct ksmbd_work *work, in smb2_calc_max_out_buf_len() argument
4275 if (out_buf_len > work->conn->vals->max_trans_size) in smb2_calc_max_out_buf_len()
4278 free_len = smb2_resp_buf_len(work, hdr2_len); in smb2_calc_max_out_buf_len()
4285 int smb2_query_dir(struct ksmbd_work *work) in smb2_query_dir() argument
4287 struct ksmbd_conn *conn = work->conn; in smb2_query_dir()
4290 struct ksmbd_share_config *share = work->tcon->share_conf; in smb2_query_dir()
4299 WORK_BUFFERS(work, req, rsp); in smb2_query_dir()
4301 if (ksmbd_override_fsids(work)) { in smb2_query_dir()
4303 smb2_set_err_rsp(work); in smb2_query_dir()
4313 dir_fp = ksmbd_lookup_fd_slow(work, req->VolatileFileId, req->PersistentFileId); in smb2_query_dir()
4355 smb2_calc_max_out_buf_len(work, 8, in smb2_query_dir()
4367 rc = ksmbd_populate_dot_dotdot_entries(work, req->FileInformationClass, in smb2_query_dir()
4380 query_dir_private.work = work; in smb2_query_dir()
4417 rc = ksmbd_iov_pin_rsp(work, (void *)rsp, in smb2_query_dir()
4433 rc = ksmbd_iov_pin_rsp(work, (void *)rsp, in smb2_query_dir()
4441 ksmbd_fd_put(work, dir_fp); in smb2_query_dir()
4442 ksmbd_revert_fsids(work); in smb2_query_dir()
4467 smb2_set_err_rsp(work); in smb2_query_dir()
4468 ksmbd_fd_put(work, dir_fp); in smb2_query_dir()
4469 ksmbd_revert_fsids(work); in smb2_query_dir()
4571 static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp, in smb2_get_ea() argument
4607 smb2_calc_max_out_buf_len(work, 8, in smb2_get_ea()
4808 static int get_file_all_info(struct ksmbd_work *work, in get_file_all_info() argument
4813 struct ksmbd_conn *conn = work->conn; in get_file_all_info()
4828 filename = convert_to_nt_pathname(work->tcon->share_conf, &fp->filp->f_path); in get_file_all_info()
4874 static void get_file_alternate_info(struct ksmbd_work *work, in get_file_alternate_info() argument
4879 struct ksmbd_conn *conn = work->conn; in get_file_alternate_info()
4895 static int get_file_stream_info(struct ksmbd_work *work, in get_file_stream_info() argument
4900 struct ksmbd_conn *conn = work->conn; in get_file_stream_info()
4908 struct smb2_query_info_req *req = ksmbd_req_buf_next(work); in get_file_stream_info()
4919 smb2_calc_max_out_buf_len(work, 8, in get_file_stream_info()
5183 static int smb2_get_info_file(struct ksmbd_work *work, in smb2_get_info_file() argument
5192 if (test_share_config_flag(work->tcon->share_conf, in smb2_get_info_file()
5195 return smb2_get_info_file_pipe(work->sess, req, rsp, in smb2_get_info_file()
5196 work->response_buf); in smb2_get_info_file()
5199 if (work->next_smb2_rcv_hdr_off) { in smb2_get_info_file()
5202 work->compound_fid); in smb2_get_info_file()
5203 id = work->compound_fid; in smb2_get_info_file()
5204 pid = work->compound_pfid; in smb2_get_info_file()
5213 fp = ksmbd_lookup_fd_slow(work, id, pid); in smb2_get_info_file()
5221 get_file_access_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5225 rc = get_file_basic_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5229 rc = get_file_standard_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5233 get_file_alignment_info(rsp, work->response_buf); in smb2_get_info_file()
5237 rc = get_file_all_info(work, rsp, fp, work->response_buf); in smb2_get_info_file()
5241 get_file_alternate_info(work, rsp, fp, work->response_buf); in smb2_get_info_file()
5245 rc = get_file_stream_info(work, rsp, fp, work->response_buf); in smb2_get_info_file()
5249 rc = get_file_internal_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5253 rc = get_file_network_open_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5257 get_file_ea_info(rsp, work->response_buf); in smb2_get_info_file()
5261 rc = smb2_get_ea(work, fp, req, rsp, work->response_buf); in smb2_get_info_file()
5265 get_file_position_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5269 get_file_mode_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5273 rc = get_file_compression_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5277 rc = get_file_attribute_tag_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5280 if (!work->tcon->posix_extensions) { in smb2_get_info_file()
5284 rc = find_file_posix_info(rsp, fp, work->response_buf); in smb2_get_info_file()
5294 rsp, work->response_buf); in smb2_get_info_file()
5295 ksmbd_fd_put(work, fp); in smb2_get_info_file()
5299 static int smb2_get_info_filesystem(struct ksmbd_work *work, in smb2_get_info_filesystem() argument
5303 struct ksmbd_session *sess = work->sess; in smb2_get_info_filesystem()
5304 struct ksmbd_conn *conn = work->conn; in smb2_get_info_filesystem()
5305 struct ksmbd_share_config *share = work->tcon->share_conf; in smb2_get_info_filesystem()
5339 if (!test_tree_conn_flag(work->tcon, in smb2_get_info_filesystem()
5361 if (test_share_config_flag(work->tcon->share_conf, in smb2_get_info_filesystem()
5491 if (!work->tcon->posix_extensions) { in smb2_get_info_filesystem()
5512 rsp, work->response_buf); in smb2_get_info_filesystem()
5517 static int smb2_get_info_sec(struct ksmbd_work *work, in smb2_get_info_sec() argument
5550 if (work->next_smb2_rcv_hdr_off) { in smb2_get_info_sec()
5553 work->compound_fid); in smb2_get_info_sec()
5554 id = work->compound_fid; in smb2_get_info_sec()
5555 pid = work->compound_pfid; in smb2_get_info_sec()
5564 fp = ksmbd_lookup_fd_slow(work, id, pid); in smb2_get_info_sec()
5572 if (test_share_config_flag(work->tcon->share_conf, in smb2_get_info_sec()
5574 ppntsd_size = ksmbd_vfs_get_sd_xattr(work->conn, idmap, in smb2_get_info_sec()
5579 if (smb2_resp_buf_len(work, 8) > ppntsd_size) in smb2_get_info_sec()
5585 ksmbd_fd_put(work, fp); in smb2_get_info_sec()
5599 int smb2_query_info(struct ksmbd_work *work) in smb2_query_info() argument
5605 WORK_BUFFERS(work, req, rsp); in smb2_query_info()
5609 if (ksmbd_override_fsids(work)) { in smb2_query_info()
5617 rc = smb2_get_info_file(work, req, rsp); in smb2_query_info()
5621 rc = smb2_get_info_filesystem(work, req, rsp); in smb2_query_info()
5625 rc = smb2_get_info_sec(work, req, rsp); in smb2_query_info()
5632 ksmbd_revert_fsids(work); in smb2_query_info()
5637 rc = ksmbd_iov_pin_rsp(work, (void *)rsp, in smb2_query_info()
5654 smb2_set_err_rsp(work); in smb2_query_info()
5669 static noinline int smb2_close_pipe(struct ksmbd_work *work) in smb2_close_pipe() argument
5675 WORK_BUFFERS(work, req, rsp); in smb2_close_pipe()
5678 ksmbd_session_rpc_close(work->sess, id); in smb2_close_pipe()
5691 return ksmbd_iov_pin_rsp(work, (void *)rsp, in smb2_close_pipe()
5701 int smb2_close(struct ksmbd_work *work) in smb2_close() argument
5707 struct ksmbd_conn *conn = work->conn; in smb2_close()
5712 WORK_BUFFERS(work, req, rsp); in smb2_close()
5714 if (test_share_config_flag(work->tcon->share_conf, in smb2_close()
5717 return smb2_close_pipe(work); in smb2_close()
5722 sess_id = work->compound_sid; in smb2_close()
5724 work->compound_sid = 0; in smb2_close()
5726 work->compound_sid = sess_id; in smb2_close()
5735 if (work->next_smb2_rcv_hdr_off && in smb2_close()
5737 if (!has_file_id(work->compound_fid)) { in smb2_close()
5746 work->compound_fid, in smb2_close()
5747 work->compound_pfid); in smb2_close()
5748 volatile_id = work->compound_fid; in smb2_close()
5751 work->compound_fid = KSMBD_NO_FID; in smb2_close()
5752 work->compound_pfid = KSMBD_NO_FID; in smb2_close()
5766 fp = ksmbd_lookup_fd_fast(work, volatile_id); in smb2_close()
5775 ksmbd_fd_put(work, fp); in smb2_close()
5791 ksmbd_fd_put(work, fp); in smb2_close()
5803 err = ksmbd_close_fd(work, volatile_id); in smb2_close()
5806 err = ksmbd_iov_pin_rsp(work, (void *)rsp, in smb2_close()
5812 smb2_set_err_rsp(work); in smb2_close()
5824 int smb2_echo(struct ksmbd_work *work) in smb2_echo() argument
5826 struct smb2_echo_rsp *rsp = smb2_get_msg(work->response_buf); in smb2_echo()
5828 if (work->next_smb2_rcv_hdr_off) in smb2_echo()
5829 rsp = ksmbd_resp_buf_next(work); in smb2_echo()
5833 return ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_echo_rsp)); in smb2_echo()
5836 static int smb2_rename(struct ksmbd_work *work, in smb2_rename() argument
5900 rc = ksmbd_vfs_rename(work, &fp->filp->f_path, new_name, flags); in smb2_rename()
5902 smb_break_all_levII_oplock(work, fp, 0); in smb2_rename()
5908 static int smb2_create_link(struct ksmbd_work *work, in smb2_create_link() argument
5944 rc = ksmbd_vfs_kern_path_locked(work, link_name, LOOKUP_NO_SYMLINKS, in smb2_create_link()
5954 rc = ksmbd_vfs_remove_file(work, &path); in smb2_create_link()
5970 rc = ksmbd_vfs_link(work, target_name, link_name); in smb2_create_link()
6067 static int set_file_allocation_info(struct ksmbd_work *work, in set_file_allocation_info() argument
6094 smb_break_all_levII_oplock(work, fp, 1); in set_file_allocation_info()
6112 rc = ksmbd_vfs_truncate(work, fp, alloc_blks * 512); in set_file_allocation_info()
6123 static int set_end_of_file_info(struct ksmbd_work *work, struct ksmbd_file *fp, in set_end_of_file_info() argument
6145 rc = ksmbd_vfs_truncate(work, fp, newsize); in set_end_of_file_info()
6156 static int set_rename_info(struct ksmbd_work *work, struct ksmbd_file *fp, in set_rename_info() argument
6172 return smb2_rename(work, fp, rename_info, work->conn->local_nls); in set_rename_info()
6251 static int smb2_set_info_file(struct ksmbd_work *work, struct ksmbd_file *fp, in smb2_set_info_file() argument
6271 return set_file_allocation_info(work, fp, in smb2_set_info_file()
6279 return set_end_of_file_info(work, fp, in smb2_set_info_file()
6287 return set_rename_info(work, fp, in smb2_set_info_file()
6296 return smb2_create_link(work, work->tcon->share_conf, in smb2_set_info_file()
6299 work->conn->local_nls); in smb2_set_info_file()
6360 int smb2_set_info(struct ksmbd_work *work) in smb2_set_info() argument
6370 if (work->next_smb2_rcv_hdr_off) { in smb2_set_info()
6371 req = ksmbd_req_buf_next(work); in smb2_set_info()
6372 rsp = ksmbd_resp_buf_next(work); in smb2_set_info()
6375 work->compound_fid); in smb2_set_info()
6376 id = work->compound_fid; in smb2_set_info()
6377 pid = work->compound_pfid; in smb2_set_info()
6380 req = smb2_get_msg(work->request_buf); in smb2_set_info()
6381 rsp = smb2_get_msg(work->response_buf); in smb2_set_info()
6384 if (!test_tree_conn_flag(work->tcon, KSMBD_TREE_CONN_FLAG_WRITABLE)) { in smb2_set_info()
6396 fp = ksmbd_lookup_fd_slow(work, id, pid); in smb2_set_info()
6406 rc = smb2_set_info_file(work, fp, req, work->tcon->share_conf); in smb2_set_info()
6410 if (ksmbd_override_fsids(work)) { in smb2_set_info()
6418 ksmbd_revert_fsids(work); in smb2_set_info()
6428 rc = ksmbd_iov_pin_rsp(work, (void *)rsp, in smb2_set_info()
6432 ksmbd_fd_put(work, fp); in smb2_set_info()
6454 smb2_set_err_rsp(work); in smb2_set_info()
6455 ksmbd_fd_put(work, fp); in smb2_set_info()
6466 static noinline int smb2_read_pipe(struct ksmbd_work *work) in smb2_read_pipe() argument
6474 WORK_BUFFERS(work, req, rsp); in smb2_read_pipe()
6478 rpc_resp = ksmbd_rpc_read(work->sess, id); in smb2_read_pipe()
6497 err = ksmbd_iov_pin_rsp_read(work, (void *)rsp, in smb2_read_pipe()
6506 err = ksmbd_iov_pin_rsp(work, (void *)rsp, in smb2_read_pipe()
6522 smb2_set_err_rsp(work); in smb2_read_pipe()
6527 static int smb2_set_remote_key_for_rdma(struct ksmbd_work *work, in smb2_set_remote_key_for_rdma() argument
6534 if (work->conn->dialect == SMB30_PROT_ID && in smb2_set_remote_key_for_rdma()
6550 work->need_invalidate_rkey = in smb2_set_remote_key_for_rdma()
6553 work->remote_key = le32_to_cpu(desc->token); in smb2_set_remote_key_for_rdma()
6557 static ssize_t smb2_read_rdma_channel(struct ksmbd_work *work, in smb2_read_rdma_channel() argument
6563 err = ksmbd_conn_rdma_write(work->conn, data_buf, length, in smb2_read_rdma_channel()
6579 int smb2_read(struct ksmbd_work *work) in smb2_read() argument
6581 struct ksmbd_conn *conn = work->conn; in smb2_read()
6594 if (test_share_config_flag(work->tcon->share_conf, in smb2_read()
6597 return smb2_read_pipe(work); in smb2_read()
6600 if (work->next_smb2_rcv_hdr_off) { in smb2_read()
6601 req = ksmbd_req_buf_next(work); in smb2_read()
6602 rsp = ksmbd_resp_buf_next(work); in smb2_read()
6605 work->compound_fid); in smb2_read()
6606 id = work->compound_fid; in smb2_read()
6607 pid = work->compound_pfid; in smb2_read()
6610 req = smb2_get_msg(work->request_buf); in smb2_read()
6611 rsp = smb2_get_msg(work->response_buf); in smb2_read()
6632 err = smb2_set_remote_key_for_rdma(work, in smb2_read()
6641 fp = ksmbd_lookup_fd_slow(work, id, pid); in smb2_read()
6673 nbytes = ksmbd_vfs_read(work, fp, length, &offset, aux_payload_buf); in smb2_read()
6682 smb2_set_err_rsp(work); in smb2_read()
6683 ksmbd_fd_put(work, fp); in smb2_read()
6692 remain_bytes = smb2_read_rdma_channel(work, req, in smb2_read()
6710 err = ksmbd_iov_pin_rsp_read(work, (void *)rsp, in smb2_read()
6717 ksmbd_fd_put(work, fp); in smb2_read()
6737 smb2_set_err_rsp(work); in smb2_read()
6739 ksmbd_fd_put(work, fp); in smb2_read()
6749 static noinline int smb2_write_pipe(struct ksmbd_work *work) in smb2_write_pipe() argument
6759 WORK_BUFFERS(work, req, rsp); in smb2_write_pipe()
6765 get_rfc1002_len(work->request_buf)) { in smb2_write_pipe()
6768 get_rfc1002_len(work->request_buf)); in smb2_write_pipe()
6776 rpc_resp = ksmbd_rpc_write(work->sess, id, data_buf, length); in smb2_write_pipe()
6781 smb2_set_err_rsp(work); in smb2_write_pipe()
6786 smb2_set_err_rsp(work); in smb2_write_pipe()
6799 err = ksmbd_iov_pin_rsp(work, (void *)rsp, in smb2_write_pipe()
6804 smb2_set_err_rsp(work); in smb2_write_pipe()
6810 static ssize_t smb2_write_rdma_channel(struct ksmbd_work *work, in smb2_write_rdma_channel() argument
6823 ret = ksmbd_conn_rdma_read(work->conn, data_buf, length, in smb2_write_rdma_channel()
6832 ret = ksmbd_vfs_write(work, fp, data_buf, length, &offset, sync, &nbytes); in smb2_write_rdma_channel()
6846 int smb2_write(struct ksmbd_work *work) in smb2_write() argument
6857 unsigned int max_write_size = work->conn->vals->max_write_size; in smb2_write()
6859 WORK_BUFFERS(work, req, rsp); in smb2_write()
6861 if (test_share_config_flag(work->tcon->share_conf, KSMBD_SHARE_FLAG_PIPE)) { in smb2_write()
6863 return smb2_write_pipe(work); in smb2_write()
6884 err = smb2_set_remote_key_for_rdma(work, in smb2_write()
6893 if (!test_tree_conn_flag(work->tcon, KSMBD_TREE_CONN_FLAG_WRITABLE)) { in smb2_write()
6899 fp = ksmbd_lookup_fd_slow(work, req->VolatileFileId, req->PersistentFileId); in smb2_write()
6934 err = ksmbd_vfs_write(work, fp, data_buf, length, &offset, in smb2_write()
6942 nbytes = smb2_write_rdma_channel(work, req, fp, offset, length, in smb2_write()
6956 err = ksmbd_iov_pin_rsp(work, rsp, offsetof(struct smb2_write_rsp, Buffer)); in smb2_write()
6959 ksmbd_fd_put(work, fp); in smb2_write()
6978 smb2_set_err_rsp(work); in smb2_write()
6979 ksmbd_fd_put(work, fp); in smb2_write()
6989 int smb2_flush(struct ksmbd_work *work) in smb2_flush() argument
6995 WORK_BUFFERS(work, req, rsp); in smb2_flush()
6999 err = ksmbd_vfs_fsync(work, req->VolatileFileId, req->PersistentFileId); in smb2_flush()
7005 return ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_flush_rsp)); in smb2_flush()
7009 smb2_set_err_rsp(work); in smb2_flush()
7019 int smb2_cancel(struct ksmbd_work *work) in smb2_cancel() argument
7021 struct ksmbd_conn *conn = work->conn; in smb2_cancel()
7022 struct smb2_hdr *hdr = smb2_get_msg(work->request_buf); in smb2_cancel()
7027 if (work->next_smb2_rcv_hdr_off) in smb2_cancel()
7028 hdr = ksmbd_resp_buf_next(work); in smb2_cancel()
7063 iter == work) in smb2_cancel()
7077 work->send_no_response = 1; in smb2_cancel()
7187 int smb2_lock(struct ksmbd_work *work) in smb2_lock() argument
7207 WORK_BUFFERS(work, req, rsp); in smb2_lock()
7210 fp = ksmbd_lookup_fd_slow(work, req->VolatileFileId, req->PersistentFileId); in smb2_lock()
7423 rc = setup_async_work(work, in smb2_lock()
7432 list_add(&work->fp_entry, &fp->blocked_works); in smb2_lock()
7435 smb2_send_interim_resp(work, STATUS_PENDING); in smb2_lock()
7440 list_del(&work->fp_entry); in smb2_lock()
7443 if (work->state != KSMBD_WORK_ACTIVE) { in smb2_lock()
7447 if (work->state == KSMBD_WORK_CANCELLED) { in smb2_lock()
7451 smb2_send_interim_resp(work, in smb2_lock()
7453 work->send_no_response = 1; in smb2_lock()
7464 release_async_work(work); in smb2_lock()
7468 spin_lock(&work->conn->llist_lock); in smb2_lock()
7470 &work->conn->lock_list); in smb2_lock()
7473 spin_unlock(&work->conn->llist_lock); in smb2_lock()
7482 smb_break_all_oplock(work, fp); in smb2_lock()
7488 err = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_lock_rsp)); in smb2_lock()
7492 ksmbd_fd_put(work, fp); in smb2_lock()
7515 spin_lock(&work->conn->llist_lock); in smb2_lock()
7519 spin_unlock(&work->conn->llist_lock); in smb2_lock()
7539 smb2_set_err_rsp(work); in smb2_lock()
7540 ksmbd_fd_put(work, fp); in smb2_lock()
7544 static int fsctl_copychunk(struct ksmbd_work *work, in fsctl_copychunk() argument
7597 src_fp = ksmbd_lookup_foreign_fd(work, in fsctl_copychunk()
7599 dst_fp = ksmbd_lookup_fd_slow(work, volatile_id, persistent_id); in fsctl_copychunk()
7622 ret = ksmbd_vfs_copy_file_ranges(work, src_fp, dst_fp, in fsctl_copychunk()
7650 ksmbd_fd_put(work, src_fp); in fsctl_copychunk()
7651 ksmbd_fd_put(work, dst_fp); in fsctl_copychunk()
7823 static int fsctl_query_allocated_ranges(struct ksmbd_work *work, u64 id, in fsctl_query_allocated_ranges() argument
7842 fp = ksmbd_lookup_fd_fast(work, id); in fsctl_query_allocated_ranges()
7851 ksmbd_fd_put(work, fp); in fsctl_query_allocated_ranges()
7855 static int fsctl_pipe_transceive(struct ksmbd_work *work, u64 id, in fsctl_pipe_transceive() argument
7864 rpc_resp = ksmbd_rpc_ioctl(work->sess, id, data_buf, in fsctl_pipe_transceive()
7900 static inline int fsctl_set_sparse(struct ksmbd_work *work, u64 id, in fsctl_set_sparse() argument
7908 fp = ksmbd_lookup_fd_fast(work, id); in fsctl_set_sparse()
7920 test_share_config_flag(work->tcon->share_conf, in fsctl_set_sparse()
7938 ksmbd_fd_put(work, fp); in fsctl_set_sparse()
7942 static int fsctl_request_resume_key(struct ksmbd_work *work, in fsctl_request_resume_key() argument
7948 fp = ksmbd_lookup_fd_slow(work, req->VolatileFileId, req->PersistentFileId); in fsctl_request_resume_key()
7955 ksmbd_fd_put(work, fp); in fsctl_request_resume_key()
7966 int smb2_ioctl(struct ksmbd_work *work) in smb2_ioctl() argument
7972 struct ksmbd_conn *conn = work->conn; in smb2_ioctl()
7976 if (work->next_smb2_rcv_hdr_off) { in smb2_ioctl()
7977 req = ksmbd_req_buf_next(work); in smb2_ioctl()
7978 rsp = ksmbd_resp_buf_next(work); in smb2_ioctl()
7981 work->compound_fid); in smb2_ioctl()
7982 id = work->compound_fid; in smb2_ioctl()
7985 req = smb2_get_msg(work->request_buf); in smb2_ioctl()
7986 rsp = smb2_get_msg(work->response_buf); in smb2_ioctl()
8000 ret = smb2_calc_max_out_buf_len(work, 48, in smb2_ioctl()
8036 nbytes = fsctl_pipe_transceive(work, id, out_buf_len, req, rsp); in smb2_ioctl()
8078 ret = fsctl_request_resume_key(work, req, in smb2_ioctl()
8088 if (!test_tree_conn_flag(work->tcon, KSMBD_TREE_CONN_FLAG_WRITABLE)) { in smb2_ioctl()
8108 fsctl_copychunk(work, in smb2_ioctl()
8122 ret = fsctl_set_sparse(work, id, (struct file_sparse *)buffer); in smb2_ioctl()
8132 if (!test_tree_conn_flag(work->tcon, KSMBD_TREE_CONN_FLAG_WRITABLE)) { in smb2_ioctl()
8156 fp = ksmbd_lookup_fd_fast(work, id); in smb2_ioctl()
8162 ret = ksmbd_vfs_zero_data(work, fp, off, len); in smb2_ioctl()
8163 ksmbd_fd_put(work, fp); in smb2_ioctl()
8175 ret = fsctl_query_allocated_ranges(work, id, in smb2_ioctl()
8195 fp = ksmbd_lookup_fd_fast(work, id); in smb2_ioctl()
8205 ksmbd_fd_put(work, fp); in smb2_ioctl()
8222 fp_in = ksmbd_lookup_fd_slow(work, dup_ext->VolatileFileHandle, in smb2_ioctl()
8230 fp_out = ksmbd_lookup_fd_fast(work, id); in smb2_ioctl()
8267 ksmbd_fd_put(work, fp_in); in smb2_ioctl()
8268 ksmbd_fd_put(work, fp_out); in smb2_ioctl()
8289 ret = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_ioctl_rsp) + nbytes); in smb2_ioctl()
8304 smb2_set_err_rsp(work); in smb2_ioctl()
8314 static void smb20_oplock_break_ack(struct ksmbd_work *work) in smb20_oplock_break_ack() argument
8326 WORK_BUFFERS(work, req, rsp); in smb20_oplock_break_ack()
8334 fp = ksmbd_lookup_fd_slow(work, volatile_id, persistent_id); in smb20_oplock_break_ack()
8337 smb2_set_err_rsp(work); in smb20_oplock_break_ack()
8345 smb2_set_err_rsp(work); in smb20_oplock_break_ack()
8346 ksmbd_fd_put(work, fp); in smb20_oplock_break_ack()
8418 ksmbd_fd_put(work, fp); in smb20_oplock_break_ack()
8426 ret = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_oplock_break)); in smb20_oplock_break_ack()
8435 ksmbd_fd_put(work, fp); in smb20_oplock_break_ack()
8436 smb2_set_err_rsp(work); in smb20_oplock_break_ack()
8460 static void smb21_lease_break_ack(struct ksmbd_work *work) in smb21_lease_break_ack() argument
8462 struct ksmbd_conn *conn = work->conn; in smb21_lease_break_ack()
8472 WORK_BUFFERS(work, req, rsp); in smb21_lease_break_ack()
8479 smb2_set_err_rsp(work); in smb21_lease_break_ack()
8578 ret = ksmbd_iov_pin_rsp(work, rsp, sizeof(struct smb2_lease_ack)); in smb21_lease_break_ack()
8588 smb2_set_err_rsp(work); in smb21_lease_break_ack()
8597 int smb2_oplock_break(struct ksmbd_work *work) in smb2_oplock_break() argument
8602 WORK_BUFFERS(work, req, rsp); in smb2_oplock_break()
8606 smb20_oplock_break_ack(work); in smb2_oplock_break()
8609 smb21_lease_break_ack(work); in smb2_oplock_break()
8615 smb2_set_err_rsp(work); in smb2_oplock_break()
8627 int smb2_notify(struct ksmbd_work *work) in smb2_notify() argument
8632 WORK_BUFFERS(work, req, rsp); in smb2_notify()
8634 if (work->next_smb2_rcv_hdr_off && req->hdr.NextCommand) { in smb2_notify()
8636 smb2_set_err_rsp(work); in smb2_notify()
8640 smb2_set_err_rsp(work); in smb2_notify()
8652 bool smb2_is_sign_req(struct ksmbd_work *work, unsigned int command) in smb2_is_sign_req() argument
8654 struct smb2_hdr *rcv_hdr2 = smb2_get_msg(work->request_buf); in smb2_is_sign_req()
8671 int smb2_check_sign_req(struct ksmbd_work *work) in smb2_check_sign_req() argument
8679 hdr = smb2_get_msg(work->request_buf); in smb2_check_sign_req()
8680 if (work->next_smb2_rcv_hdr_off) in smb2_check_sign_req()
8681 hdr = ksmbd_req_buf_next(work); in smb2_check_sign_req()
8683 if (!hdr->NextCommand && !work->next_smb2_rcv_hdr_off) in smb2_check_sign_req()
8684 len = get_rfc1002_len(work->request_buf); in smb2_check_sign_req()
8688 len = get_rfc1002_len(work->request_buf) - in smb2_check_sign_req()
8689 work->next_smb2_rcv_hdr_off; in smb2_check_sign_req()
8697 if (ksmbd_sign_smb2_pdu(work->conn, work->sess->sess_key, iov, 1, in smb2_check_sign_req()
8714 void smb2_set_sign_rsp(struct ksmbd_work *work) in smb2_set_sign_rsp() argument
8721 hdr = ksmbd_resp_buf_curr(work); in smb2_set_sign_rsp()
8726 iov = &work->iov[work->iov_idx - 1]; in smb2_set_sign_rsp()
8729 iov = &work->iov[work->iov_idx]; in smb2_set_sign_rsp()
8732 if (!ksmbd_sign_smb2_pdu(work->conn, work->sess->sess_key, iov, n_vec, in smb2_set_sign_rsp()
8743 int smb3_check_sign_req(struct ksmbd_work *work) in smb3_check_sign_req() argument
8745 struct ksmbd_conn *conn = work->conn; in smb3_check_sign_req()
8754 hdr = smb2_get_msg(work->request_buf); in smb3_check_sign_req()
8755 if (work->next_smb2_rcv_hdr_off) in smb3_check_sign_req()
8756 hdr = ksmbd_req_buf_next(work); in smb3_check_sign_req()
8758 if (!hdr->NextCommand && !work->next_smb2_rcv_hdr_off) in smb3_check_sign_req()
8759 len = get_rfc1002_len(work->request_buf); in smb3_check_sign_req()
8763 len = get_rfc1002_len(work->request_buf) - in smb3_check_sign_req()
8764 work->next_smb2_rcv_hdr_off; in smb3_check_sign_req()
8767 signing_key = work->sess->smb3signingkey; in smb3_check_sign_req()
8769 chann = lookup_chann_list(work->sess, conn); in smb3_check_sign_req()
8802 void smb3_set_sign_rsp(struct ksmbd_work *work) in smb3_set_sign_rsp() argument
8804 struct ksmbd_conn *conn = work->conn; in smb3_set_sign_rsp()
8812 hdr = ksmbd_resp_buf_curr(work); in smb3_set_sign_rsp()
8816 signing_key = work->sess->smb3signingkey; in smb3_set_sign_rsp()
8818 chann = lookup_chann_list(work->sess, work->conn); in smb3_set_sign_rsp()
8832 iov = &work->iov[work->iov_idx - 1]; in smb3_set_sign_rsp()
8835 iov = &work->iov[work->iov_idx]; in smb3_set_sign_rsp()
8848 void smb3_preauth_hash_rsp(struct ksmbd_work *work) in smb3_preauth_hash_rsp() argument
8850 struct ksmbd_conn *conn = work->conn; in smb3_preauth_hash_rsp()
8851 struct ksmbd_session *sess = work->sess; in smb3_preauth_hash_rsp()
8857 WORK_BUFFERS(work, req, rsp); in smb3_preauth_hash_rsp()
8861 ksmbd_gen_preauth_integrity_hash(conn, work->response_buf, in smb3_preauth_hash_rsp()
8879 ksmbd_gen_preauth_integrity_hash(conn, work->response_buf, in smb3_preauth_hash_rsp()
8904 int smb3_encrypt_resp(struct ksmbd_work *work) in smb3_encrypt_resp() argument
8906 struct kvec *iov = work->iov; in smb3_encrypt_resp()
8915 fill_transform_hdr(tr_buf, work->response_buf, work->conn->cipher_type); in smb3_encrypt_resp()
8919 work->tr_buf = tr_buf; in smb3_encrypt_resp()
8921 return ksmbd_crypt_message(work, iov, work->iov_idx + 1, 1); in smb3_encrypt_resp()
8931 int smb3_decrypt_req(struct ksmbd_work *work) in smb3_decrypt_req() argument
8934 char *buf = work->request_buf; in smb3_decrypt_req()
8953 sess = ksmbd_session_lookup_all(work->conn, le64_to_cpu(tr_hdr->SessionId)); in smb3_decrypt_req()
8964 rc = ksmbd_crypt_message(work, iov, 2, 0); in smb3_decrypt_req()
8974 bool smb3_11_final_sess_setup_resp(struct ksmbd_work *work) in smb3_11_final_sess_setup_resp() argument
8976 struct ksmbd_conn *conn = work->conn; in smb3_11_final_sess_setup_resp()
8977 struct ksmbd_session *sess = work->sess; in smb3_11_final_sess_setup_resp()
8978 struct smb2_hdr *rsp = smb2_get_msg(work->response_buf); in smb3_11_final_sess_setup_resp()
8983 if (work->next_smb2_rcv_hdr_off) in smb3_11_final_sess_setup_resp()
8984 rsp = ksmbd_resp_buf_next(work); in smb3_11_final_sess_setup_resp()