@@ -639,7 +639,6 @@ static void __smb2_oplock_break_noti(struct work_struct *wk)
639639{
640640 struct smb2_oplock_break * rsp = NULL ;
641641 struct ksmbd_work * work = container_of (wk , struct ksmbd_work , work );
642- struct ksmbd_conn * conn = work -> conn ;
643642 struct oplock_break_info * br_info = work -> request_buf ;
644643 struct smb2_hdr * rsp_hdr ;
645644 struct ksmbd_file * fp ;
@@ -656,8 +655,6 @@ static void __smb2_oplock_break_noti(struct work_struct *wk)
656655
657656 rsp_hdr = smb2_get_msg (work -> response_buf );
658657 memset (rsp_hdr , 0 , sizeof (struct smb2_hdr ) + 2 );
659- * (__be32 * )work -> response_buf =
660- cpu_to_be32 (conn -> vals -> header_size );
661658 rsp_hdr -> ProtocolId = SMB2_PROTO_NUMBER ;
662659 rsp_hdr -> StructureSize = SMB2_HEADER_STRUCTURE_SIZE ;
663660 rsp_hdr -> CreditRequest = cpu_to_le16 (0 );
@@ -684,13 +681,15 @@ static void __smb2_oplock_break_noti(struct work_struct *wk)
684681 rsp -> PersistentFid = fp -> persistent_id ;
685682 rsp -> VolatileFid = fp -> volatile_id ;
686683
687- inc_rfc1001_len (work -> response_buf , 24 );
684+ ksmbd_fd_put (work , fp );
685+ if (ksmbd_iov_pin_rsp (work , (void * )rsp ,
686+ sizeof (struct smb2_oplock_break )))
687+ goto out ;
688688
689689 ksmbd_debug (OPLOCK ,
690690 "sending oplock break v_id %llu p_id = %llu lock level = %d\n" ,
691691 rsp -> VolatileFid , rsp -> PersistentFid , rsp -> OplockLevel );
692692
693- ksmbd_fd_put (work , fp );
694693 ksmbd_conn_write (work );
695694
696695out :
@@ -751,7 +750,6 @@ static void __smb2_lease_break_noti(struct work_struct *wk)
751750 struct smb2_lease_break * rsp = NULL ;
752751 struct ksmbd_work * work = container_of (wk , struct ksmbd_work , work );
753752 struct lease_break_info * br_info = work -> request_buf ;
754- struct ksmbd_conn * conn = work -> conn ;
755753 struct smb2_hdr * rsp_hdr ;
756754
757755 if (allocate_oplock_break_buf (work )) {
@@ -761,8 +759,6 @@ static void __smb2_lease_break_noti(struct work_struct *wk)
761759
762760 rsp_hdr = smb2_get_msg (work -> response_buf );
763761 memset (rsp_hdr , 0 , sizeof (struct smb2_hdr ) + 2 );
764- * (__be32 * )work -> response_buf =
765- cpu_to_be32 (conn -> vals -> header_size );
766762 rsp_hdr -> ProtocolId = SMB2_PROTO_NUMBER ;
767763 rsp_hdr -> StructureSize = SMB2_HEADER_STRUCTURE_SIZE ;
768764 rsp_hdr -> CreditRequest = cpu_to_le16 (0 );
@@ -791,7 +787,9 @@ static void __smb2_lease_break_noti(struct work_struct *wk)
791787 rsp -> AccessMaskHint = 0 ;
792788 rsp -> ShareMaskHint = 0 ;
793789
794- inc_rfc1001_len (work -> response_buf , 44 );
790+ if (ksmbd_iov_pin_rsp (work , (void * )rsp ,
791+ sizeof (struct smb2_lease_break )))
792+ goto out ;
795793
796794 ksmbd_conn_write (work );
797795
@@ -845,6 +843,7 @@ static int smb2_lease_break_noti(struct oplock_info *opinfo)
845843 setup_async_work (in_work , NULL , NULL );
846844 smb2_send_interim_resp (in_work , STATUS_PENDING );
847845 list_del (& in_work -> interim_entry );
846+ ksmbd_iov_reset (in_work );
848847 }
849848 INIT_WORK (& work -> work , __smb2_lease_break_noti );
850849 ksmbd_queue_work (work );
0 commit comments