All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pawel Moll <pawel.moll@arm.com>
To: Lee Jones <lee.jones@linaro.org>, Rusty Russell <rusty@rustcorp.com.au>
Cc: linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	Pawel Moll <pawel.moll@arm.com>
Subject: [PATCH] virtio-mmio: Fix irq parsing in command line parameter
Date: Mon,  5 Nov 2012 13:02:52 +0000	[thread overview]
Message-ID: <1352120572-16256-1-git-send-email-pawel.moll@arm.com> (raw)
In-Reply-To: <1352120454.10947.5.camel@hornet>

On 64-bit machines resource_size_t is a 64-bit value, while
sscanf() format for this argument was defined as "%u". Fixed
by using an intermediate local value of a known length.

Also added cleaned up the resource creation and adde extra
comments to make the parameters parsing easier to follow.

Reported-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Pawel Moll <pawel.moll@arm.com>
---
 drivers/virtio/virtio_mmio.c |   26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
index 6b1b7e1..0d08843 100644
--- a/drivers/virtio/virtio_mmio.c
+++ b/drivers/virtio/virtio_mmio.c
@@ -521,25 +521,35 @@ static int vm_cmdline_set(const char *device,
 	int err;
 	struct resource resources[2] = {};
 	char *str;
-	long long int base;
+	long long int base, size;
+	unsigned int irq;
 	int processed, consumed = 0;
 	struct platform_device *pdev;
 
-	resources[0].flags = IORESOURCE_MEM;
-	resources[1].flags = IORESOURCE_IRQ;
-
-	resources[0].end = memparse(device, &str) - 1;
+	/* Get "size" part of the command line parameter */
+	size = memparse(device, &str) - 1;
 
+	/* Get "@<base>:<irq>[:<id>]" chunks */
 	processed = sscanf(str, "@%lli:%u%n:%d%n",
-			&base, &resources[1].start, &consumed,
+			&base, &irq, &consumed,
 			&vm_cmdline_id, &consumed);
 
+	/*
+	 * sscanf() processes 3 chunks if "<id>" is given, 2 if not;
+	 * also there must be no extra characters after the last
+	 * chunk, so str[consumed] should be '\0'
+	 */
 	if (processed < 2 || processed > 3 || str[consumed])
 		return -EINVAL;
 
+	/* Memory resource */
+	resources[0].flags = IORESOURCE_MEM;
 	resources[0].start = base;
-	resources[0].end += base;
-	resources[1].end = resources[1].start;
+	resources[0].end = base + size;
+
+	/* Interrupt resource */
+	resources[1].flags = IORESOURCE_IRQ;
+	resources[1].start = resources[1].end = irq;
 
 	if (!vm_cmdline_parent_registered) {
 		err = device_register(&vm_cmdline_parent);
-- 
1.7.10.4



WARNING: multiple messages have this Message-ID (diff)
From: Pawel Moll <pawel.moll@arm.com>
To: Lee Jones <lee.jones@linaro.org>, Rusty Russell <rusty@rustcorp.com.au>
Cc: linux-kernel@vger.kernel.org, Pawel Moll <pawel.moll@arm.com>,
	virtualization@lists.linux-foundation.org
Subject: [PATCH] virtio-mmio: Fix irq parsing in command line parameter
Date: Mon,  5 Nov 2012 13:02:52 +0000	[thread overview]
Message-ID: <1352120572-16256-1-git-send-email-pawel.moll@arm.com> (raw)
In-Reply-To: <1352120454.10947.5.camel@hornet>

On 64-bit machines resource_size_t is a 64-bit value, while
sscanf() format for this argument was defined as "%u". Fixed
by using an intermediate local value of a known length.

Also added cleaned up the resource creation and adde extra
comments to make the parameters parsing easier to follow.

Reported-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Pawel Moll <pawel.moll@arm.com>
---
 drivers/virtio/virtio_mmio.c |   26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
index 6b1b7e1..0d08843 100644
--- a/drivers/virtio/virtio_mmio.c
+++ b/drivers/virtio/virtio_mmio.c
@@ -521,25 +521,35 @@ static int vm_cmdline_set(const char *device,
 	int err;
 	struct resource resources[2] = {};
 	char *str;
-	long long int base;
+	long long int base, size;
+	unsigned int irq;
 	int processed, consumed = 0;
 	struct platform_device *pdev;
 
-	resources[0].flags = IORESOURCE_MEM;
-	resources[1].flags = IORESOURCE_IRQ;
-
-	resources[0].end = memparse(device, &str) - 1;
+	/* Get "size" part of the command line parameter */
+	size = memparse(device, &str) - 1;
 
+	/* Get "@<base>:<irq>[:<id>]" chunks */
 	processed = sscanf(str, "@%lli:%u%n:%d%n",
-			&base, &resources[1].start, &consumed,
+			&base, &irq, &consumed,
 			&vm_cmdline_id, &consumed);
 
+	/*
+	 * sscanf() processes 3 chunks if "<id>" is given, 2 if not;
+	 * also there must be no extra characters after the last
+	 * chunk, so str[consumed] should be '\0'
+	 */
 	if (processed < 2 || processed > 3 || str[consumed])
 		return -EINVAL;
 
+	/* Memory resource */
+	resources[0].flags = IORESOURCE_MEM;
 	resources[0].start = base;
-	resources[0].end += base;
-	resources[1].end = resources[1].start;
+	resources[0].end = base + size;
+
+	/* Interrupt resource */
+	resources[1].flags = IORESOURCE_IRQ;
+	resources[1].start = resources[1].end = irq;
 
 	if (!vm_cmdline_parent_registered) {
 		err = device_register(&vm_cmdline_parent);
-- 
1.7.10.4

  reply	other threads:[~2012-11-05 13:03 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-03 22:02 [PATCH 0/9] Fixups for issues when running 'make randconfig' Lee Jones
2012-11-03 22:02 ` [PATCH 1/9] ARM: integrator: Remove unused icst_params lclk_params structure Lee Jones
2012-11-03 22:02   ` Lee Jones
2012-11-03 22:02 ` [PATCH 2/9] ARM: at91: Remove unused struct at91sam9g45_isi_device and its resources Lee Jones
2012-11-03 22:02   ` Lee Jones
2012-11-04 10:15   ` Jean-Christophe PLAGNIOL-VILLARD
2012-11-04 10:15     ` Jean-Christophe PLAGNIOL-VILLARD
2012-11-04 10:57     ` Lee Jones
2012-11-04 10:57       ` Lee Jones
2012-11-05  8:13   ` Josh Wu
2012-11-05  8:13     ` Josh Wu
2012-11-05  8:19     ` Lee Jones
2012-11-05  8:19       ` Lee Jones
2012-11-03 22:02 ` [PATCH 3/9] x86: Suppress build warnings in quirks Lee Jones
2012-11-03 22:02 ` [PATCH 4/9] sched: Don't define unthrottle_offline_cfs_rqs when !CONFIG_SMP Lee Jones
2012-11-03 22:02 ` [PATCH 5/9] ASoC: Only compile adav80x codec when a bus is defined Lee Jones
2012-11-03 22:02   ` Lee Jones
2012-11-04  8:13   ` [alsa-devel] " Lars-Peter Clausen
2012-11-04 10:31     ` Lee Jones
2012-11-03 22:02 ` [PATCH 6/9] virtio_mmio: Cast &resources[1].start to ‘unsigned int *’ to rid compiler warning Lee Jones
2012-11-03 22:02 ` Lee Jones
2012-11-05  2:38   ` Rusty Russell
2012-11-05  2:38     ` Rusty Russell
2012-11-05  8:21     ` Lee Jones
2012-11-05  8:21       ` Lee Jones
2012-11-05 13:00       ` Pawel Moll
2012-11-05 13:00         ` Pawel Moll
2012-11-05 13:02         ` Pawel Moll [this message]
2012-11-05 13:02           ` [PATCH] virtio-mmio: Fix irq parsing in command line parameter Pawel Moll
2012-11-05 13:44           ` Lee Jones
2012-11-05 13:44             ` Lee Jones
2012-11-05 14:12             ` Pawel Moll
2012-11-05 14:12               ` Pawel Moll
2012-11-05 14:35               ` Lee Jones
2012-11-05 14:35                 ` Lee Jones
2012-11-07 22:22             ` Rusty Russell
2012-11-08  9:48               ` Lee Jones
2012-11-08 12:23                 ` Rusty Russell
2012-11-08 12:23                   ` Rusty Russell
2012-11-07 14:18           ` [PATCH v2] virtio-mmio: Fix irq parsing in the command line Pawel Moll
2012-11-07 22:47             ` Rusty Russell
2012-11-08 19:05               ` [PATCH v3] virtio-mmio: Fix irq parsing in command line parameter Pawel Moll
2012-11-09  4:11                 ` Rusty Russell
2012-11-03 22:02 ` [PATCH 7/9] quota: Use the pre-processor to compile out quotactl_cmd_write when !CONFIG_BLOCK Lee Jones
2012-11-06 23:06   ` Jan Kara
2012-11-03 22:02 ` [PATCH 8/9] isdn: Remove unused variable causing a compile build warning Lee Jones
2012-11-03 22:40   ` Paul Bolle
2012-11-03 22:48     ` Lee Jones
2012-11-04 10:14       ` Paul Bolle
2012-11-04 10:53         ` Lee Jones
2012-11-04 17:30           ` David Miller
2012-11-04 17:30             ` David Miller
2012-11-05  8:44             ` Lee Jones
2012-11-05  9:11               ` Paul Bolle
2012-11-05  9:44                 ` Lee Jones
2012-11-05 16:46               ` David Miller
2012-11-05 16:46                 ` David Miller
2012-11-05 10:31             ` [PATCH 8/9] isdn: Make CONFIG_ISDN depend on CONFIG_NETDEVICES Lee Jones
2012-11-06 23:57               ` David Miller
2012-11-07  9:56                 ` Lee Jones
2012-11-04 10:28     ` [PATCH v2 8/9] isdn: Remove unused variable causing a compile build warning Lee Jones
2012-11-03 22:02 ` [PATCH 9/9] Avoid 'statement with no effect' compiler warnings Lee Jones
2012-11-03 22:02   ` [Bridge] " Lee Jones
2012-11-04  6:00   ` David Miller
2012-11-04  6:00     ` [Bridge] " David Miller
2012-11-04  7:55     ` Lee Jones
2012-11-04  7:55       ` [Bridge] " Lee Jones

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=1352120572-16256-1-git-send-email-pawel.moll@arm.com \
    --to=pawel.moll@arm.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rusty@rustcorp.com.au \
    --cc=virtualization@lists.linux-foundation.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.