From c18e4033dea239db8896200d726351346c68d761 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 14 Dec 2012 08:56:52 -0800 Subject: [PATCH] Fix bug #9196 - defer_open is triggered multiple times on the same request. get_deferred_open_message_state_smb2() is buggy in that it is checking the wrong things to determine if an open is in the deferred state. It checks if (smb2req->async_te == NULL) which is incorrect, as we're not always async in a deferred open - remove this. It should check instead state->open_was_deferred as this is explicity set to 'true' when an open is going deferred, so add this check. Signed-off-by: Jeremy Allison --- source3/smbd/smb2_create.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c index 5a9044d..5b81099 100644 --- a/source3/smbd/smb2_create.c +++ b/source3/smbd/smb2_create.c @@ -893,9 +893,6 @@ bool get_deferred_open_message_state_smb2(struct smbd_smb2_request *smb2req, if (!smb2req) { return false; } - if (!smb2req->async) { - return false; - } req = smb2req->subreq; if (!req) { return false; @@ -904,6 +901,9 @@ bool get_deferred_open_message_state_smb2(struct smbd_smb2_request *smb2req, if (!state) { return false; } + if (!state->open_was_deferred) { + return false; + } if (p_request_time) { *p_request_time = state->request_time; } -- 1.7.10.4