From 0362dcbd09f27b33ed8c5264c7f22ee00ddc5d64 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 29 Jun 2012 12:56:57 -0700 Subject: [PATCH] Fix defer_open() fuction in the open code path to cope with a NULL lck parameter. --- source3/smbd/open.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/source3/smbd/open.c b/source3/smbd/open.c index f259cc99ec0..c6d2f63b148 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -1355,20 +1355,23 @@ static void defer_open(struct share_mode_lock *lck, struct deferred_open_record *state) { struct server_id self = messaging_server_id(req->sconn->msg_ctx); - int i; /* Paranoia check */ - for (i=0; idata->num_share_modes; i++) { - struct share_mode_entry *e = &lck->data->share_modes[i]; + if (lck) { + int i; + + for (i=0; idata->num_share_modes; i++) { + struct share_mode_entry *e = &lck->data->share_modes[i]; - if (is_deferred_open_entry(e) && - serverid_equal(&self, &e->pid) && - (e->op_mid == req->mid)) { - DEBUG(0, ("Trying to defer an already deferred " - "request: mid=%llu, exiting\n", - (unsigned long long)req->mid)); - exit_server("attempt to defer a deferred request"); + if (is_deferred_open_entry(e) && + serverid_equal(&self, &e->pid) && + (e->op_mid == req->mid)) { + DEBUG(0, ("Trying to defer an already deferred " + "request: mid=%llu, exiting\n", + (unsigned long long)req->mid)); + exit_server("attempt to defer a deferred request"); + } } } @@ -1384,7 +1387,9 @@ static void defer_open(struct share_mode_lock *lck, state->id, (char *)state, sizeof(*state))) { exit_server("push_deferred_open_message_smb failed"); } - add_deferred_open(lck, req->mid, request_time, self, state->id); + if (lck) { + add_deferred_open(lck, req->mid, request_time, self, state->id); + } } -- 2.11.4.GIT