[SCM] Samba Shared Repository - branch v4-2-test updated

Stefan Metzmacher metze at samba.org
Sun Feb 1 04:40:05 MST 2015


The branch, v4-2-test has been updated
       via  26f58b7 s3:smb2_server: protect against integer wrap with "smb2 max credits = 65535"
       via  fc8cab8 s3:smb2_server: always try to grant the credits the client just consumed
      from  a4fdd14 wafsamba: create unique names when building shared modules

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-2-test


- Log -----------------------------------------------------------------
commit 26f58b7fc6f0bef8c6bcd51d937e8d2f3a7264ca
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Jan 29 10:12:30 2015 +0100

    s3:smb2_server: protect against integer wrap with "smb2 max credits = 65535"
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=9702
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    
    Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(master): Thu Jan 29 14:58:40 CET 2015 on sn-devel-104
    
    (cherry picked from commit 8aed0fc38ae28cce7fd1a443844a865265fc719c)
    
    Autobuild-User(v4-2-test): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(v4-2-test): Sun Feb  1 12:39:51 CET 2015 on sn-devel-104

commit fc8cab8b59d3ccb1ade663e1ad0d238c0cb2e67d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jan 28 15:22:30 2015 +0100

    s3:smb2_server: always try to grant the credits the client just consumed
    
    It turns out that the effective credits_requested is always at least 1,
    even if the client sends credits_requested == 0.
    
    This means the client is not able to reduce the amount of credits
    itself.
    
    Without this fix a client (e.g. Windows7) would reach the case
    where it has been granted all credits it asked for.
    When copying a large file with a lot of parallel requests,
    all these requests have credits_requested == 0.
    This means the amount of granted credits where reduced by each
    request and only when the granted credits reached 0,
    the server granted one credit to allow the client to go on.
    The client might require more than one credit ([MS-SMB2] says
    Windows clients require at least 4 credits) and freezes
    with just 1 credit.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=9702
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    (cherry picked from commit 1944c857e59922a2ebfc88a6a824a6ed9396f2d5)

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/smb2_server.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index 39155b8..ea2ce7f 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -802,6 +802,7 @@ static void smb2_set_operation_credit(struct smbXsrv_connection *xconn,
 
 	cmd = SVAL(inhdr, SMB2_HDR_OPCODE);
 	credits_requested = SVAL(inhdr, SMB2_HDR_CREDIT);
+	credits_requested = MAX(credits_requested, 1);
 	out_flags = IVAL(outhdr, SMB2_HDR_FLAGS);
 	out_status = NT_STATUS(IVAL(outhdr, SMB2_HDR_STATUS));
 
@@ -820,7 +821,9 @@ static void smb2_set_operation_credit(struct smbXsrv_connection *xconn,
 		 * credits on the final response.
 		 */
 		credits_granted = 0;
-	} else if (credits_requested > 0) {
+	} else {
+		uint16_t additional_possible =
+			xconn->smb2.credits.max - credit_charge;
 		uint16_t additional_max = 0;
 		uint16_t additional_credits = credits_requested - 1;
 
@@ -846,14 +849,10 @@ static void smb2_set_operation_credit(struct smbXsrv_connection *xconn,
 			break;
 		}
 
+		additional_max = MIN(additional_max, additional_possible);
 		additional_credits = MIN(additional_credits, additional_max);
 
 		credits_granted = credit_charge + additional_credits;
-	} else if (xconn->smb2.credits.granted == 0) {
-		/*
-		 * Make sure the client has always at least one credit
-		 */
-		credits_granted = 1;
 	}
 
 	/*


-- 
Samba Shared Repository


More information about the samba-cvs mailing list