* [PATCH 6/9] virtio_mmio: Cast &resources[1].start to ‘unsigned int *’ to rid compiler warning [not found] <1351980150-24145-1-git-send-email-lee.jones@linaro.org> @ 2012-11-03 22:02 ` Lee Jones [not found] ` <1351980150-24145-7-git-send-email-lee.jones@linaro.org> 1 sibling, 0 replies; 15+ messages in thread From: Lee Jones @ 2012-11-03 22:02 UTC (permalink / raw) To: linux-kernel; +Cc: Lee Jones, virtualization drivers/virtio/virtio_mmio.c: In function ‘vm_cmdline_set’: drivers/virtio/virtio_mmio.c:535:4: warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 4 has type ‘resource_size_t *’ [-Wformat] Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: virtualization@lists.linux-foundation.org Signed-off-by: Lee Jones <lee.jones@linaro.org> --- drivers/virtio/virtio_mmio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c index 6b1b7e1..077e9ca 100644 --- a/drivers/virtio/virtio_mmio.c +++ b/drivers/virtio/virtio_mmio.c @@ -531,7 +531,7 @@ static int vm_cmdline_set(const char *device, resources[0].end = memparse(device, &str) - 1; processed = sscanf(str, "@%lli:%u%n:%d%n", - &base, &resources[1].start, &consumed, + &base, (unsigned int *)&resources[1].start, &consumed, &vm_cmdline_id, &consumed); if (processed < 2 || processed > 3 || str[consumed]) -- 1.7.9.5 _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization ^ permalink raw reply related [flat|nested] 15+ messages in thread
[parent not found: <1351980150-24145-7-git-send-email-lee.jones@linaro.org>]
* Re: [PATCH 6/9] virtio_mmio: Cast &resources[1].start to ‘unsigned int *’ to rid compiler warning [not found] ` <1351980150-24145-7-git-send-email-lee.jones@linaro.org> @ 2012-11-05 2:38 ` Rusty Russell 2012-11-05 8:21 ` Lee Jones 0 siblings, 1 reply; 15+ messages in thread From: Rusty Russell @ 2012-11-05 2:38 UTC (permalink / raw) To: linux-kernel; +Cc: Lee Jones, virtualization Lee Jones <lee.jones@linaro.org> writes: > drivers/virtio/virtio_mmio.c: In function ‘vm_cmdline_set’: > drivers/virtio/virtio_mmio.c:535:4: warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 4 has type ‘resource_size_t *’ [-Wformat] > > Cc: Rusty Russell <rusty@rustcorp.com.au> > Cc: virtualization@lists.linux-foundation.org > Signed-off-by: Lee Jones <lee.jones@linaro.org> > --- > drivers/virtio/virtio_mmio.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c > index 6b1b7e1..077e9ca 100644 > --- a/drivers/virtio/virtio_mmio.c > +++ b/drivers/virtio/virtio_mmio.c > @@ -531,7 +531,7 @@ static int vm_cmdline_set(const char *device, > resources[0].end = memparse(device, &str) - 1; > > processed = sscanf(str, "@%lli:%u%n:%d%n", > - &base, &resources[1].start, &consumed, > + &base, (unsigned int *)&resources[1].start, &consumed, > &vm_cmdline_id, &consumed); This suppresses a valid warning, leaving our code no less wrong than before. But now it's silently wrong! Do you want to try again? Cheers, Rusty. _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 6/9] virtio_mmio: Cast &resources[1].start to ‘unsigned int *’ to rid compiler warning 2012-11-05 2:38 ` Rusty Russell @ 2012-11-05 8:21 ` Lee Jones 2012-11-05 13:00 ` Pawel Moll 0 siblings, 1 reply; 15+ messages in thread From: Lee Jones @ 2012-11-05 8:21 UTC (permalink / raw) To: Rusty Russell; +Cc: linux-kernel, virtualization On Mon, 05 Nov 2012, Rusty Russell wrote: > Lee Jones <lee.jones@linaro.org> writes: > > drivers/virtio/virtio_mmio.c: In function ‘vm_cmdline_set’: > > drivers/virtio/virtio_mmio.c:535:4: warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 4 has type ‘resource_size_t *’ [-Wformat] > > > > Cc: Rusty Russell <rusty@rustcorp.com.au> > > Cc: virtualization@lists.linux-foundation.org > > Signed-off-by: Lee Jones <lee.jones@linaro.org> > > --- > > drivers/virtio/virtio_mmio.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c > > index 6b1b7e1..077e9ca 100644 > > --- a/drivers/virtio/virtio_mmio.c > > +++ b/drivers/virtio/virtio_mmio.c > > @@ -531,7 +531,7 @@ static int vm_cmdline_set(const char *device, > > resources[0].end = memparse(device, &str) - 1; > > > > processed = sscanf(str, "@%lli:%u%n:%d%n", > > - &base, &resources[1].start, &consumed, > > + &base, (unsigned int *)&resources[1].start, &consumed, > > &vm_cmdline_id, &consumed); > > This suppresses a valid warning, leaving our code no less wrong than > before. But now it's silently wrong! > > Do you want to try again? For sure I'll try again. How does `s/%u/%p/` suit? -- Lee Jones Linaro ST-Ericsson Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 6/9] virtio_mmio: Cast &resources[1].start to ‘unsigned int *’ to rid compiler warning 2012-11-05 8:21 ` Lee Jones @ 2012-11-05 13:00 ` Pawel Moll 2012-11-05 13:02 ` [PATCH] virtio-mmio: Fix irq parsing in command line parameter Pawel Moll 0 siblings, 1 reply; 15+ messages in thread From: Pawel Moll @ 2012-11-05 13:00 UTC (permalink / raw) To: Lee Jones Cc: linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org On Mon, 2012-11-05 at 08:21 +0000, Lee Jones wrote: > > > processed = sscanf(str, "@%lli:%u%n:%d%n", > > > - &base, &resources[1].start, &consumed, > > > + &base, (unsigned int *)&resources[1].start, &consumed, > > > &vm_cmdline_id, &consumed); > > > > This suppresses a valid warning, leaving our code no less wrong than > > before. But now it's silently wrong! > > > > Do you want to try again? > > For sure I'll try again. > > How does `s/%u/%p/` suit? sscanf doesn't do "%p"... The only reasonable way of fixing this is a intermediate local variable - will post a patch in a second. Thanks for spotting this! Paweł _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH] virtio-mmio: Fix irq parsing in command line parameter 2012-11-05 13:00 ` Pawel Moll @ 2012-11-05 13:02 ` Pawel Moll 2012-11-05 13:44 ` Lee Jones 2012-11-07 14:18 ` [PATCH v2] virtio-mmio: Fix irq parsing in the command line Pawel Moll 0 siblings, 2 replies; 15+ messages in thread From: Pawel Moll @ 2012-11-05 13:02 UTC (permalink / raw) To: Lee Jones, Rusty Russell; +Cc: linux-kernel, Pawel Moll, virtualization 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 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH] virtio-mmio: Fix irq parsing in command line parameter 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 14:12 ` Pawel Moll 2012-11-07 22:22 ` Rusty Russell 2012-11-07 14:18 ` [PATCH v2] virtio-mmio: Fix irq parsing in the command line Pawel Moll 1 sibling, 2 replies; 15+ messages in thread From: Lee Jones @ 2012-11-05 13:44 UTC (permalink / raw) To: Pawel Moll; +Cc: linux-kernel, virtualization On Mon, 05 Nov 2012, Pawel Moll wrote: > 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(-) Resorted to poaching now have we Pawel? ;) -- Lee Jones Linaro ST-Ericsson Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] virtio-mmio: Fix irq parsing in command line parameter 2012-11-05 13:44 ` Lee Jones @ 2012-11-05 14:12 ` Pawel Moll 2012-11-05 14:35 ` Lee Jones 2012-11-07 22:22 ` Rusty Russell 1 sibling, 1 reply; 15+ messages in thread From: Pawel Moll @ 2012-11-05 14:12 UTC (permalink / raw) To: Lee Jones Cc: linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org On Mon, 2012-11-05 at 13:44 +0000, Lee Jones wrote: > On Mon, 05 Nov 2012, Pawel Moll wrote: > > > 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(-) > > Resorted to poaching now have we Pawel? ;) Sure thing - the poached eggs are my firm favourite :-P ;-) But seriously speaking - it's an old patch (all the comments and resources creation, the IRQ stuff is a new thing :-), but never had enough motivation to push it out... Cheers! Paweł _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] virtio-mmio: Fix irq parsing in command line parameter 2012-11-05 14:12 ` Pawel Moll @ 2012-11-05 14:35 ` Lee Jones 0 siblings, 0 replies; 15+ messages in thread From: Lee Jones @ 2012-11-05 14:35 UTC (permalink / raw) To: Pawel Moll Cc: linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org On Mon, 05 Nov 2012, Pawel Moll wrote: > On Mon, 2012-11-05 at 13:44 +0000, Lee Jones wrote: > > On Mon, 05 Nov 2012, Pawel Moll wrote: > > > > > 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(-) > > > > Resorted to poaching now have we Pawel? ;) > > Sure thing - the poached eggs are my firm favourite :-P ;-) > > But seriously speaking - it's an old patch (all the comments and > resources creation, the IRQ stuff is a new thing :-), but never had > enough motivation to push it out... I believe you, many would not. ;) -- Lee Jones Linaro ST-Ericsson Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] virtio-mmio: Fix irq parsing in command line parameter 2012-11-05 13:44 ` Lee Jones 2012-11-05 14:12 ` Pawel Moll @ 2012-11-07 22:22 ` Rusty Russell 2012-11-08 9:48 ` Lee Jones 1 sibling, 1 reply; 15+ messages in thread From: Rusty Russell @ 2012-11-07 22:22 UTC (permalink / raw) To: Lee Jones, Pawel Moll; +Cc: linux-kernel, virtualization Lee Jones <lee.jones@linaro.org> writes: > On Mon, 05 Nov 2012, Pawel Moll wrote: > >> 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(-) > > Resorted to poaching now have we Pawel? ;) I hope you were joking! Doing your work for you isn't poaching. Your correct response was "thanks" followed by 'Tested-by:'. Cheers, Rusty. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] virtio-mmio: Fix irq parsing in command line parameter 2012-11-07 22:22 ` Rusty Russell @ 2012-11-08 9:48 ` Lee Jones 2012-11-08 12:23 ` Rusty Russell 0 siblings, 1 reply; 15+ messages in thread From: Lee Jones @ 2012-11-08 9:48 UTC (permalink / raw) To: Rusty Russell; +Cc: linux-kernel, Pawel Moll, virtualization [-- Attachment #1.1: Type: text/plain, Size: 676 bytes --] > > Resorted to poaching now have we Pawel? > I hope you were joking! Yes, of course. I thought that was clearly indicated by the jovial winking smiley. :) I realise it wasn't obvious soley by this exchange, but Pawel and I are actually ol' friends. > Doing your work for you isn't poaching. This isn't related to my work, as I have no professional interest in virtio. In this particular instance I was trying to help out by fixing bugs uncovered by the use of randconfig, which I'm doing in my own time, as a hobby. I guess the use my work address clouds this fact, so I apologise for that. Sorry for any confusion or offence caused though Rusty. :) Kind regards, Lee [-- Attachment #1.2: Type: text/html, Size: 780 bytes --] [-- Attachment #2: Type: text/plain, Size: 183 bytes --] _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] virtio-mmio: Fix irq parsing in command line parameter 2012-11-08 9:48 ` Lee Jones @ 2012-11-08 12:23 ` Rusty Russell 0 siblings, 0 replies; 15+ messages in thread From: Rusty Russell @ 2012-11-08 12:23 UTC (permalink / raw) To: Lee Jones; +Cc: linux-kernel, Pawel Moll, virtualization Lee Jones <lee.jones@linaro.org> writes: >> > Resorted to poaching now have we Pawel? > >> I hope you were joking! > > Yes, of course. I thought that was clearly indicated by the jovial winking > smiley. :) > > I realise it wasn't obvious soley by this exchange, but Pawel and I are > actually ol' friends. > >> Doing your work for you isn't poaching. > > This isn't related to my work, as I have no professional interest in > virtio. In this particular instance I was trying to help out by fixing bugs > uncovered by the use of randconfig, which I'm doing in my own time, as a > hobby. I guess the use my work address clouds this fact, so I apologise for > that. > > Sorry for any confusion or offence caused though Rusty. :) > > Kind regards, > Lee No offence for me. I just don't want bystanders to believe that there is some etiquette other than "best patch wins". Thanks for the clarification! Rusty. ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2] virtio-mmio: Fix irq parsing in the command line 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-07 14:18 ` Pawel Moll 2012-11-07 22:47 ` Rusty Russell 1 sibling, 1 reply; 15+ messages in thread From: Pawel Moll @ 2012-11-07 14:18 UTC (permalink / raw) To: Rusty Russell; +Cc: Pawel Moll, virtualization 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 | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) Comparing to v1 I've simply "polished" the size assignment (moved -1 from one place to another) and removed two of the new comments, as they weren't really useful any more. diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c index 6b1b7e1..e807c2a 100644 --- a/drivers/virtio/virtio_mmio.c +++ b/drivers/virtio/virtio_mmio.c @@ -521,25 +521,33 @@ 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; + /* Consume "size" part of the command line parameter */ + size = memparse(device, &str); + /* 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; + resources[0].flags = IORESOURCE_MEM; resources[0].start = base; - resources[0].end += base; - resources[1].end = resources[1].start; + resources[0].end = base + size - 1; + + 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 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2] virtio-mmio: Fix irq parsing in the command line 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 0 siblings, 1 reply; 15+ messages in thread From: Rusty Russell @ 2012-11-07 22:47 UTC (permalink / raw) Cc: Pawel Moll, virtualization Pawel Moll <pawel.moll@arm.com> writes: > 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. Actually, on 32-bit machines, too (eg. x86 with PAE). Otherwise we'd just change it to %lu. > + /* 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; I would drop the > 3 case. It's unnecessary, and you're assuming consumed doesn't add to the count, which may be true but is a documented sscanf weirdness so I don't like to rely on it. Thanks, Rusty. ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v3] virtio-mmio: Fix irq parsing in command line parameter 2012-11-07 22:47 ` Rusty Russell @ 2012-11-08 19:05 ` Pawel Moll 2012-11-09 4:11 ` Rusty Russell 0 siblings, 1 reply; 15+ messages in thread From: Pawel Moll @ 2012-11-08 19:05 UTC (permalink / raw) To: Rusty Russell; +Cc: Pawel Moll, virtualization When the resource_size_t is 64-bit long, the sscanf() on the virtio device command line paramter string may return wrong value because its format was defined as "%u". Fixed by using an intermediate local value of a known length. Also added cleaned up the resource creation and added 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, 17 insertions(+), 9 deletions(-) diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c index 6b1b7e1..9df4578 100644 --- a/drivers/virtio/virtio_mmio.c +++ b/drivers/virtio/virtio_mmio.c @@ -521,25 +521,33 @@ 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; + /* Consume "size" part of the command line parameter */ + size = memparse(device, &str); + /* 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); - if (processed < 2 || processed > 3 || str[consumed]) + /* + * sscanf() must processes at least 2 chunks; also there + * must be no extra characters after the last chunk, so + * str[consumed] must be '\0' + */ + if (processed < 2 || str[consumed]) return -EINVAL; + resources[0].flags = IORESOURCE_MEM; resources[0].start = base; - resources[0].end += base; - resources[1].end = resources[1].start; + resources[0].end = base + size - 1; + + 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 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v3] virtio-mmio: Fix irq parsing in command line parameter 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 0 siblings, 0 replies; 15+ messages in thread From: Rusty Russell @ 2012-11-09 4:11 UTC (permalink / raw) Cc: Pawel Moll, virtualization Pawel Moll <pawel.moll@arm.com> writes: > When the resource_size_t is 64-bit long, the sscanf() on > the virtio device command line paramter string may return > wrong value because its format was defined as "%u". Fixed > by using an intermediate local value of a known length. > > Also added cleaned up the resource creation and added extra > comments to make the parameters parsing easier to follow. Applied. Thanks, Rusty. ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2012-11-09 4:11 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1351980150-24145-1-git-send-email-lee.jones@linaro.org>
2012-11-03 22:02 ` [PATCH 6/9] virtio_mmio: Cast &resources[1].start to ‘unsigned int *’ to rid compiler warning Lee Jones
[not found] ` <1351980150-24145-7-git-send-email-lee.jones@linaro.org>
2012-11-05 2:38 ` Rusty Russell
2012-11-05 8:21 ` Lee Jones
2012-11-05 13:00 ` Pawel Moll
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 14:12 ` Pawel Moll
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-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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).