From: Joseph Sutton Date: Mon, 22 Aug 2022 03:50:02 +0000 (+1200) Subject: libcli/smb: Ensure we call tevent_req_nterror() on failure X-Git-Tag: talloc-2.4.0~1384 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=40d4912d841e6bcd7cd37810ef101d5f89268ee7;p=thirdparty%2Fsamba.git libcli/smb: Ensure we call tevent_req_nterror() on failure Commit 3594c3ae202688fd8aae5f7f5e20464cb23feea9 added a NULL check for 'inhdr', but it meant we didn't always call tevent_req_nterror() when we should. Now we handle connection errors. We now also set an error status if the NULL check fails. I noticed this when an ECONNRESET error from a server refusing SMB1 wasn't handled, and the client subsequently hung in epoll_wait(). BUG: https://bugzilla.samba.org/show_bug.cgi?id=15152 Signed-off-by: Joseph Sutton Reviewed-by: Stefan Metzmacher --- diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c index d2f55966c3a..11d13b574a7 100644 --- a/libcli/smb/smbXcli_base.c +++ b/libcli/smb/smbXcli_base.c @@ -4469,7 +4469,11 @@ static void smbXcli_negprot_smb1_done(struct tevent_req *subreq) NULL, /* pinbuf */ expected, ARRAY_SIZE(expected)); TALLOC_FREE(subreq); - if (inhdr == NULL || tevent_req_nterror(req, status)) { + if (tevent_req_nterror(req, status)) { + return; + } + if (inhdr == NULL) { + tevent_req_nterror(req, NT_STATUS_INTERNAL_ERROR); return; }