[Libvirt-cim] [PATCH 06/19] Coverity: Resolve CHECKED_RETURN - mem_rasd_to_vdev()

John Ferlan jferlan at redhat.com
Wed May 22 18:20:13 UTC 2013


On 05/16/2013 10:57 AM, John Ferlan wrote:
> 1089            dev->dev.mem.maxsize = dev->dev.mem.size;
> 
> (4) Event check_return:
>     Calling function "cu_get_u64_prop(CMPIInstance const *, char const *,
>     uint64_t *)" without checking return value (as is done elsewhere 9
>     out of 10 times).
> (14) Event unchecked_value:
>     No check of the return value of "cu_get_u64_prop(inst, "Limit",
>     &dev->dev.mem.maxsize)".
> 
> 1090            cu_get_u64_prop(inst, "Limit", &dev->dev.mem.maxsize);
> 
> Resolve by adding check and returning a message indicating what's missing
> ---
>  src/Virt_VirtualSystemManagementService.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/src/Virt_VirtualSystemManagementService.c b/src/Virt_VirtualSystemManagementService.c
> index cbb646d..ebf3e4a 100644
> --- a/src/Virt_VirtualSystemManagementService.c
> +++ b/src/Virt_VirtualSystemManagementService.c
> @@ -1087,7 +1087,9 @@ static const char *mem_rasd_to_vdev(CMPIInstance *inst,
>                  return "Missing `VirtualQuantity' field in Memory RASD";
>  
>          dev->dev.mem.maxsize = dev->dev.mem.size;
> -        cu_get_u64_prop(inst, "Limit", &dev->dev.mem.maxsize);
> +        ret = cu_get_u64_prop(inst, "Limit", &dev->dev.mem.maxsize);
> +        if (ret != CMPI_RC_OK)
> +                return "Missing `Limit' field in Memory RASD";
>  
>          if (cu_get_str_prop(inst, "AllocationUnits", &units) != CMPI_RC_OK) {
>                  CU_DEBUG("Memory RASD has no units, assuming bytes");
> 

An issue was found with the above code since Limit doesn't seem to be a required 
value, thus the code has been changed to the following:

diff --git a/src/Virt_VirtualSystemManagementService.c b/src/Virt_VirtualSystemM
index cbb646d..f1441dc 100644
--- a/src/Virt_VirtualSystemManagementService.c
+++ b/src/Virt_VirtualSystemManagementService.c
@@ -1086,8 +1086,9 @@ static const char *mem_rasd_to_vdev(CMPIInstance *inst,
         if (ret != CMPI_RC_OK)
                 return "Missing `VirtualQuantity' field in Memory RASD";
 
-        dev->dev.mem.maxsize = dev->dev.mem.size;
-        cu_get_u64_prop(inst, "Limit", &dev->dev.mem.maxsize);
+        ret = cu_get_u64_prop(inst, "Limit", &dev->dev.mem.maxsize);
+        if (ret != CMPI_RC_OK)
+                dev->dev.mem.maxsize = dev->dev.mem.size;
 
         if (cu_get_str_prop(inst, "AllocationUnits", &units) != CMPI_RC_OK) {
                 CU_DEBUG("Memory RASD has no units, assuming bytes");

The difference being setting mem.maxsize to mem.size only if the call fails
and not messaging if it does fail.






More information about the Libvirt-cim mailing list