WIP
authorRalph Boehme <slow@samba.org>
Wed, 5 Oct 2016 10:22:23 +0000 (12:22 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 1 Jun 2018 12:35:17 +0000 (14:35 +0200)
libcli/smb/smb_direct.c

index f3aa84f3e1e42af38941c6d669eb29011ce5fa40..774186b9f01f56547002f8fe077f47501eee7156 100644 (file)
@@ -2197,7 +2197,8 @@ try_again:
                }
                c->state.send_credits = credits_granted;
 
-smb_direct_connection_debug_credits(c, __location__, __func__);
+               smb_direct_connection_debug_credits(c, __location__, __func__);
+
                if (data_offset == 0) {
                        if (wc.byte_len != SMB_DIRECT_DATA_MIN_HDR_SIZE) {
                                status = NT_STATUS_INVALID_NETWORK_RESPONSE;
@@ -2216,11 +2217,20 @@ smb_direct_connection_debug_credits(c, __location__, __func__);
                                smb_direct_connection_disconnect(c, status);
                                return;
                        }
-               goto try_again;
+                       goto try_again;
+                       //return;
+               }
+
+               if (data_offset != SMB_DIRECT_DATA_OFFSET) {
+                       status = NT_STATUS_INVALID_NETWORK_RESPONSE;
+                       DEBUG(0,("%s:%s: ret[%d] errno[%d] status[%s]\n",
+                               __location__, __FUNCTION__, ret, errno, nt_errstr(status)));
+                       smb_direct_connection_disconnect(c, status);
                        return;
-               } else if (data_offset == SMB_DIRECT_DATA_OFFSET) {
-                       if (io->data_length > (c->state.max_receive_size - data_offset)) {
-                               status = NT_STATUS_INVALID_NETWORK_RESPONSE;
+               }
+
+               if (io->data_length > (c->state.max_receive_size - data_offset)) {
+                       status = NT_STATUS_INVALID_NETWORK_RESPONSE;
                        DEBUG(0,("%s:%s: io->data_length[%u/0x%x] max_receive_size-data_offset[%u/0x%x] ret[%d] errno[%d] status[%s]\n",
                                __location__, __FUNCTION__,
                                (unsigned)io->data_length,
@@ -2228,15 +2238,8 @@ smb_direct_connection_debug_credits(c, __location__, __func__);
                                (unsigned)c->state.max_receive_size - data_offset,
                                (unsigned)c->state.max_receive_size - data_offset,
                                ret, errno, nt_errstr(status)));
-                               DEBUG(0,("%s:%s: ret[%d] errno[%d] status[%s]\n",
-                                       __location__, __FUNCTION__, ret, errno, nt_errstr(status)));
-                               smb_direct_connection_disconnect(c, status);
-                               return;
-                       }
-               } else {
-                       status = NT_STATUS_INVALID_NETWORK_RESPONSE;
                        DEBUG(0,("%s:%s: ret[%d] errno[%d] status[%s]\n",
-                               __location__, __FUNCTION__, ret, errno, nt_errstr(status)));
+                                __location__, __FUNCTION__, ret, errno, nt_errstr(status)));
                        smb_direct_connection_disconnect(c, status);
                        return;
                }