ipmi:ssif: Add missing unlock in error branch
authorCorey Minyard <cminyard@mvista.com>
Fri, 30 Jun 2017 12:18:08 +0000 (07:18 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jul 2017 22:08:02 +0000 (15:08 -0700)
commit 4495ec6d770e1bca7a04e93ac453ab6720c56c5d upstream.

When getting flags, a response to a different message would
result in a deadlock because of a missing unlock.  Add that
unlock and a comment.  Found by static analysis.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/char/ipmi/ipmi_ssif.c

index 6958b5c..510fc10 100644 (file)
@@ -762,6 +762,11 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
                               result, len, data[2]);
                } else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
                           || data[1] != IPMI_GET_MSG_FLAGS_CMD) {
+                       /*
+                        * Don't abort here, maybe it was a queued
+                        * response to a previous command.
+                        */
+                       ipmi_ssif_unlock_cond(ssif_info, flags);
                        pr_warn(PFX "Invalid response getting flags: %x %x\n",
                                data[0], data[1]);
                } else {