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
next prev parent 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: linkBe 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.