From 6083839d1c0372cd172d619b82a2862e9d46f81f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 19 Mar 2013 12:36:52 -0700 Subject: [PATCH] Allow smbd_smb2_request_error_ex() to cope with unread bytes on error. Drain the socket if a RECVFILE write failed. Signed-off-by: Jeremy Allison Reviewed-by: Stefan (metze) Metzmacher (cherry picked from commit 63739440f128229a6a99d0653562d3735ae909fb) --- source3/smbd/smb2_server.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c index 62d1074ce69..71ab8f2d968 100644 --- a/source3/smbd/smb2_server.c +++ b/source3/smbd/smb2_server.c @@ -2621,11 +2621,21 @@ NTSTATUS smbd_smb2_request_error_ex(struct smbd_smb2_request *req, { DATA_BLOB body; uint8_t *outhdr = SMBD_SMB2_OUT_HDR_PTR(req); + size_t unread_bytes = smbd_smb2_unread_bytes(req); DEBUG(10,("smbd_smb2_request_error_ex: idx[%d] status[%s] |%s| at %s\n", req->current_idx, nt_errstr(status), info ? " +info" : "", location)); + if (unread_bytes) { + /* Recvfile error. Drain incoming socket. */ + size_t ret = drain_socket(req->sconn->sock, unread_bytes); + if (ret != unread_bytes) { + smbd_server_connection_terminate(req->sconn, + "Failed to drain SMB2 socket\n"); + } + } + body.data = outhdr + SMB2_HDR_BODY; body.length = 8; SSVAL(body.data, 0, 9); -- 2.34.1