@@ -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