diff mbox

[1/1] virtio-rng: fix condition checking on period_ms

Message ID 1455905587-4347-1-git-send-email-wei@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Wei Huang Feb. 19, 2016, 6:13 p.m. UTC
The condition checking on vrng->conf.period_ms appears to be wrong,
conflicting with the error comment following it.

Signed-off-by: Wei Huang <wei@redhat.com>
---
 hw/virtio/virtio-rng.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Laszlo Ersek Feb. 19, 2016, 8:57 p.m. UTC | #1
On 02/19/16 19:13, Wei Huang wrote:
> The condition checking on vrng->conf.period_ms appears to be wrong,
> conflicting with the error comment following it.
> 
> Signed-off-by: Wei Huang <wei@redhat.com>
> ---
>  hw/virtio/virtio-rng.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c
> index 473c044..a06427c 100644
> --- a/hw/virtio/virtio-rng.c
> +++ b/hw/virtio/virtio-rng.c
> @@ -149,7 +149,7 @@ static void virtio_rng_device_realize(DeviceState *dev, Error **errp)
>      VirtIORNG *vrng = VIRTIO_RNG(dev);
>      Error *local_err = NULL;
>  
> -    if (!vrng->conf.period_ms > 0) {
> +    if (!(vrng->conf.period_ms > 0)) {
>          error_setg(errp, "'period' parameter expects a positive integer");
>          return;
>      }
> 

The current condition is absolutely weird, but I think it happens to
work correctly:

Period_ms has type uint32_t. If it is positive, then !period_ms is zero.
0>0 is false, hence the error message is not printed.

If period_ms is zero, then !period_ms is 1. 1>0 is true, hence the error
message is printed.

I would rewrite the check as

    if (vrng->conf.period_ms == 0) {
        error_setg(...)

Thanks
Laszlo
Laszlo Ersek Feb. 19, 2016, 8:59 p.m. UTC | #2
On 02/19/16 21:57, Laszlo Ersek wrote:
> On 02/19/16 19:13, Wei Huang wrote:
>> The condition checking on vrng->conf.period_ms appears to be wrong,
>> conflicting with the error comment following it.
>>
>> Signed-off-by: Wei Huang <wei@redhat.com>
>> ---
>>  hw/virtio/virtio-rng.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c
>> index 473c044..a06427c 100644
>> --- a/hw/virtio/virtio-rng.c
>> +++ b/hw/virtio/virtio-rng.c
>> @@ -149,7 +149,7 @@ static void virtio_rng_device_realize(DeviceState *dev, Error **errp)
>>      VirtIORNG *vrng = VIRTIO_RNG(dev);
>>      Error *local_err = NULL;
>>  
>> -    if (!vrng->conf.period_ms > 0) {
>> +    if (!(vrng->conf.period_ms > 0)) {
>>          error_setg(errp, "'period' parameter expects a positive integer");
>>          return;
>>      }
>>
> 
> The current condition is absolutely weird, but I think it happens to
> work correctly:
> 
> Period_ms has type uint32_t. If it is positive, then !period_ms is zero.
> 0>0 is false, hence the error message is not printed.
> 
> If period_ms is zero, then !period_ms is 1. 1>0 is true, hence the error
> message is printed.
> 
> I would rewrite the check as
> 
>     if (vrng->conf.period_ms == 0) {
>         error_setg(...)

... actually, what the heck are you looking at? :) This has been fixed
up in:

commit a3a292c420d2fec3c07a7ca56fbb064cd57a298a
Author: Amit Shah <amit.shah@redhat.com>
Date:   Thu Dec 11 13:17:42 2014 +0530

    virtio-rng: fix check for period_ms validity

Thanks
Laszlo
Wei Huang Feb. 19, 2016, 9:07 p.m. UTC | #3
On 02/19/2016 02:59 PM, Laszlo Ersek wrote:
> On 02/19/16 21:57, Laszlo Ersek wrote:
>> On 02/19/16 19:13, Wei Huang wrote:
>>> The condition checking on vrng->conf.period_ms appears to be wrong,
>>> conflicting with the error comment following it.
>>>
>>> Signed-off-by: Wei Huang <wei@redhat.com>
>>> ---
>>>  hw/virtio/virtio-rng.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c
>>> index 473c044..a06427c 100644
>>> --- a/hw/virtio/virtio-rng.c
>>> +++ b/hw/virtio/virtio-rng.c
>>> @@ -149,7 +149,7 @@ static void virtio_rng_device_realize(DeviceState *dev, Error **errp)
>>>      VirtIORNG *vrng = VIRTIO_RNG(dev);
>>>      Error *local_err = NULL;
>>>  
>>> -    if (!vrng->conf.period_ms > 0) {
>>> +    if (!(vrng->conf.period_ms > 0)) {
>>>          error_setg(errp, "'period' parameter expects a positive integer");
>>>          return;
>>>      }
>>>
>>
>> The current condition is absolutely weird, but I think it happens to
>> work correctly:
>>
>> Period_ms has type uint32_t. If it is positive, then !period_ms is zero.
>> 0>0 is false, hence the error message is not printed.
>>
>> If period_ms is zero, then !period_ms is 1. 1>0 is true, hence the error
>> message is printed.
>>
>> I would rewrite the check as
>>
>>     if (vrng->conf.period_ms == 0) {
>>         error_setg(...)
> 
> ... actually, what the heck are you looking at? :) This has been fixed
> up in:
> 

Oops. It looks like I was looking at an older HEAD. :-( Please ignore
it. Sorry for the noise and thanks for pointing it out.

-Wei

> commit a3a292c420d2fec3c07a7ca56fbb064cd57a298a
> Author: Amit Shah <amit.shah@redhat.com>
> Date:   Thu Dec 11 13:17:42 2014 +0530
> 
>     virtio-rng: fix check for period_ms validity
> 
> Thanks
> Laszlo
>
diff mbox

Patch

diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c
index 473c044..a06427c 100644
--- a/hw/virtio/virtio-rng.c
+++ b/hw/virtio/virtio-rng.c
@@ -149,7 +149,7 @@  static void virtio_rng_device_realize(DeviceState *dev, Error **errp)
     VirtIORNG *vrng = VIRTIO_RNG(dev);
     Error *local_err = NULL;
 
-    if (!vrng->conf.period_ms > 0) {
+    if (!(vrng->conf.period_ms > 0)) {
         error_setg(errp, "'period' parameter expects a positive integer");
         return;
     }