All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexandre Bounine <alexandre.bounine@idt.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Alexandre Bounine <alexandre.bounine@idt.com>,
	Matt Porter <mporter@kernel.crashing.org>,
	Andre van Herk <andre.van.herk@prodrive-technologies.com>,
	Barry Wood <barry.wood@idt.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH 08/13] rapidio: fix error handling in mbox request/release functions
Date: Thu, 21 Jul 2016 14:18:49 -0400	[thread overview]
Message-ID: <1469125134-16523-9-git-send-email-alexandre.bounine@idt.com> (raw)
In-Reply-To: <1469125134-16523-1-git-send-email-alexandre.bounine@idt.com>

Add checking for error code returned by HW-specific mbox open routines.
Ensure that resources are properly release if failed.

This patch is applicable to kernel versions starting from v2.6.15.

Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com>
Cc: Matt Porter <mporter@kernel.crashing.org>
Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com>
Cc: Barry Wood <barry.wood@idt.com>
Cc: linux-kernel@vger.kernel.org
---
 drivers/rapidio/rio.c |   54 ++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 42 insertions(+), 12 deletions(-)

diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c
index 8408029..1cd3260 100644
--- a/drivers/rapidio/rio.c
+++ b/drivers/rapidio/rio.c
@@ -268,6 +268,12 @@ int rio_request_inb_mbox(struct rio_mport *mport,
 		mport->inb_msg[mbox].mcback = minb;
 
 		rc = mport->ops->open_inb_mbox(mport, dev_id, mbox, entries);
+		if (rc) {
+			mport->inb_msg[mbox].mcback = NULL;
+			mport->inb_msg[mbox].res = NULL;
+			release_resource(res);
+			kfree(res);
+		}
 	} else
 		rc = -ENOMEM;
 
@@ -285,13 +291,22 @@ int rio_request_inb_mbox(struct rio_mport *mport,
  */
 int rio_release_inb_mbox(struct rio_mport *mport, int mbox)
 {
-	if (mport->ops->close_inb_mbox) {
-		mport->ops->close_inb_mbox(mport, mbox);
+	int rc;
 
-		/* Release the mailbox resource */
-		return release_resource(mport->inb_msg[mbox].res);
-	} else
-		return -ENOSYS;
+	if (!mport->ops->close_inb_mbox || !mport->inb_msg[mbox].res)
+		return -EINVAL;
+
+	mport->ops->close_inb_mbox(mport, mbox);
+	mport->inb_msg[mbox].mcback = NULL;
+
+	rc = release_resource(mport->inb_msg[mbox].res);
+	if (rc)
+		return rc;
+
+	kfree(mport->inb_msg[mbox].res);
+	mport->inb_msg[mbox].res = NULL;
+
+	return 0;
 }
 
 /**
@@ -336,6 +351,12 @@ int rio_request_outb_mbox(struct rio_mport *mport,
 		mport->outb_msg[mbox].mcback = moutb;
 
 		rc = mport->ops->open_outb_mbox(mport, dev_id, mbox, entries);
+		if (rc) {
+			mport->outb_msg[mbox].mcback = NULL;
+			mport->outb_msg[mbox].res = NULL;
+			release_resource(res);
+			kfree(res);
+		}
 	} else
 		rc = -ENOMEM;
 
@@ -353,13 +374,22 @@ int rio_request_outb_mbox(struct rio_mport *mport,
  */
 int rio_release_outb_mbox(struct rio_mport *mport, int mbox)
 {
-	if (mport->ops->close_outb_mbox) {
-		mport->ops->close_outb_mbox(mport, mbox);
+	int rc;
 
-		/* Release the mailbox resource */
-		return release_resource(mport->outb_msg[mbox].res);
-	} else
-		return -ENOSYS;
+	if (!mport->ops->close_outb_mbox || !mport->outb_msg[mbox].res)
+		return -EINVAL;
+
+	mport->ops->close_outb_mbox(mport, mbox);
+	mport->outb_msg[mbox].mcback = NULL;
+
+	rc = release_resource(mport->outb_msg[mbox].res);
+	if (rc)
+		return rc;
+
+	kfree(mport->outb_msg[mbox].res);
+	mport->outb_msg[mbox].res = NULL;
+
+	return 0;
 }
 
 /**
-- 
1.7.8.4

  parent reply	other threads:[~2016-07-21 18:21 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-21 18:18 [PATCH 00/13] RapidIO subsystem updates Alexandre Bounine
2016-07-21 18:18 ` [PATCH 01/13] rapidio: Remove unnecessary 0x prefixes before %pa extension uses Alexandre Bounine
2016-07-21 18:18 ` [PATCH 02/13] rapidio/documentation: fix mangled paragraph in mport_cdev Alexandre Bounine
2016-07-21 18:18 ` [PATCH 03/13] rapidio: fix return value description for dma_prep functions Alexandre Bounine
2016-07-21 18:18 ` [PATCH 04/13] rapidio/tsi721_dma: add channel mask and queue size parameters Alexandre Bounine
2016-07-21 18:18 ` [PATCH 05/13] rapidio/tsi721: add PCIe MRRS override parameter Alexandre Bounine
2016-07-21 18:18 ` [PATCH 06/13] rapidio/tsi721: add messaging mbox selector parameter Alexandre Bounine
2016-07-21 18:18 ` [PATCH 07/13] rapidio/tsi721_dma: advance queue processing from transfer submit call Alexandre Bounine
2016-07-21 18:18 ` Alexandre Bounine [this message]
2016-07-21 18:18 ` [PATCH 09/13] rapidio/idt_gen2: fix locking warning Alexandre Bounine
2016-07-21 18:18 ` [PATCH 10/13] rapidio: change inbound window size type to u64 Alexandre Bounine
2016-07-21 18:18 ` [PATCH 11/13] rapidio: modify for rev.3 specification changes Alexandre Bounine
2016-07-27  4:53   ` Michael Ellerman
2016-07-27 10:20     ` Wood, Barry
2016-07-27 19:37     ` Andrew Morton
2016-07-28 13:52       ` Michael Ellerman
2016-07-21 18:18 ` [PATCH 12/13] powerpc/fsl_rio: apply changes for RIO spec rev 3 Alexandre Bounine
2016-07-21 18:18 ` [PATCH 13/13] rapidio/switches: add driver for IDT gen3 switches Alexandre Bounine
2016-07-21 18:36   ` Andrew Morton
2016-07-21 18:48     ` Bounine, Alexandre
2016-07-21 19:01       ` Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1469125134-16523-9-git-send-email-alexandre.bounine@idt.com \
    --to=alexandre.bounine@idt.com \
    --cc=akpm@linux-foundation.org \
    --cc=andre.van.herk@prodrive-technologies.com \
    --cc=barry.wood@idt.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mporter@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.