[Libvirt-cim] [PATCH 3/8] device_parsing: Avoid NULL dereferences

Sharad Mishra snmishra at us.ibm.com
Thu Nov 3 22:39:43 UTC 2011


+1

Sharad Mishra
Open Virtualization
Linux Technology Center
IBM

libvirt-cim-bounces at redhat.com wrote on 11/03/2011 10:48:31 AM:

> "Eduardo Lima (Etrunko)" <eblima at linux.vnet.ibm.com>
> Sent by: libvirt-cim-bounces at redhat.com
>
> 11/03/2011 10:48 AM
>
> Please respond to
> List for discussion and development of libvirt CIM
<libvirt-cim at redhat.com>
>
> To
>
> libvirt-cim at redhat.com
>
> cc
>
> "Eduardo Lima \(Etrunko\)" <eblima at br.ibm.com>
>
> Subject
>
> [Libvirt-cim] [PATCH 3/8] device_parsing: Avoid NULL dereferences
>
> From: Eduardo Lima (Etrunko) <eblima at br.ibm.com>
>
> As revealed by Coverity scan report:
>
> https://bugzilla.redhat.com/show_bug.cgi?id=728245#c8
> https://bugzilla.redhat.com/attachment.cgi?id=530435
>
> Error: REVERSE_INULL:
> device_parsing.c:1153: deref_ptr: Directly dereferencing pointer
"dominfo".
> device_parsing.c:1155: check_after_deref: Dereferencing "dominfo"
> before a null
>                                           check.
>
> Error: FORWARD_NULL:
> device_parsing.c:226: assign_zero: Assigning: "ddev" = 0.
> device_parsing.c:284: var_deref_model: Passing null variable "ddev"
> to function
>                       "cleanup_disk_device", which dereferences it.
> device_parsing.c:54: deref_parm: Directly dereferencing parameter "dev".
>
> Error: FORWARD_NULL:
> device_parsing.c:170: assign_zero: Assigning: "ddev" = 0.
> device_parsing.c:217: var_deref_model: Passing null variable "ddev"
> to function
>                       "cleanup_disk_device", which dereferences it.
> device_parsing.c:54: deref_parm: Directly dereferencing parameter "dev".
>
> Error: FORWARD_NULL:
> device_parsing.c:457: assign_zero: Assigning: "edev" = 0.
> device_parsing.c:475: var_deref_model: Passing null variable "edev"
> to function
>                       "cleanup_emu_device", which dereferences it.
> device_parsing.c:88: deref_parm: Directly dereferencing parameter "dev".
>
> Error: FORWARD_NULL:
> device_parsing.c:516: assign_zero: Assigning: "gdev" = 0.
> device_parsing.c:579: var_deref_model: Passing null variable "gdev"
> to function
>                       "cleanup_graphics_device", which dereferences it.
> device_parsing.c:93: deref_parm: Directly dereferencing parameter "dev".
>
> Error: FORWARD_NULL:
> device_parsing.c:588: assign_zero: Assigning: "idev" = 0.
> device_parsing.c:615: var_deref_model: Passing null variable "idev"
> to function
>                       "cleanup_input_device", which dereferences it.
> device_parsing.c:102: deref_parm: Directly dereferencing parameter "dev".
>
> Error: FORWARD_NULL:
> device_parsing.c:310: var_compare_op: Comparing "vsi_dev" to null implies
that
>                       "vsi_dev" might be null.
> device_parsing.c:344: var_deref_model: Passing null variable "vsi_dev" to
>                       function "cleanup_vsi_device", which dereferences
it.
> device_parsing.c:66: deref_parm: Directly dereferencing parameter "dev".
>
> Error: FORWARD_NULL:
> device_parsing.c:352: assign_zero: Assigning: "ndev" = 0.
> device_parsing.c:416: var_deref_model: Passing null variable "ndev"
> to function
>                       "cleanup_net_device", which dereferences it.
> device_parsing.c:77: deref_parm: Directly dereferencing parameter "dev".
>
> Signed-off-by: Eduardo Lima (Etrunko) <eblima at br.ibm.com>
> ---
>  libxkutil/device_parsing.c |   21 ++++++++++++++++++++-
>  1 files changed, 20 insertions(+), 1 deletions(-)
>
> diff --git a/libxkutil/device_parsing.c b/libxkutil/device_parsing.c
> index d25461e..371838f 100644
> --- a/libxkutil/device_parsing.c
> +++ b/libxkutil/device_parsing.c
> @@ -54,6 +54,9 @@ typedef int (*dev_parse_func_t)(xmlNode *, struct
> virt_device **);
>
>  static void cleanup_disk_device(struct disk_device *dev)
>  {
> +        if (dev == NULL)
> +                return;
> +
>          free(dev->type);
>          free(dev->device);
>          free(dev->driver);
> @@ -66,6 +69,9 @@ static void cleanup_disk_device(struct disk_device
*dev)
>
>  static void cleanup_vsi_device(struct vsi_device *dev)
>  {
> +        if (dev == NULL)
> +                return;
> +
>          free(dev->vsi_type);
>          free(dev->manager_id);
>          free(dev->type_id);
> @@ -77,6 +83,9 @@ static void cleanup_vsi_device(struct vsi_device *dev)
>
>  static void cleanup_net_device(struct net_device *dev)
>  {
> +        if (dev == NULL)
> +                return;
> +
>          free(dev->type);
>          free(dev->mac);
>          free(dev->source);
> @@ -88,6 +97,9 @@ static void cleanup_net_device(struct net_device *dev)
>
>  static void cleanup_emu_device(struct emu_device *dev)
>  {
> +        if (dev == NULL)
> +                return;
> +
>          free(dev->path);
>  }
>
> @@ -108,6 +120,9 @@ static void cleanup_sdl_device(struct
> graphics_device *dev)
>
>  static void cleanup_graphics_device(struct graphics_device *dev)
>  {
> +        if (dev == NULL)
> +                return;
> +
>          if (STREQC(dev->type, "sdl")) {
>              cleanup_sdl_device(dev);
>          }
> @@ -119,6 +134,9 @@ static void cleanup_graphics_device(struct
> graphics_device *dev)
>
>  static void cleanup_input_device(struct input_device *dev)
>  {
> +        if (dev == NULL)
> +                return;
> +
>          free(dev->type);
>          free(dev->bus);
>  }
> @@ -1207,11 +1225,12 @@ int get_dominfo(virDomainPtr dom, struct
> domain **dominfo)
>
>  void cleanup_dominfo(struct domain **dominfo)
>  {
> -        struct domain *dom = *dominfo;
> +        struct domain *dom;
>
>          if ((dominfo == NULL) || (*dominfo == NULL))
>                  return;
>
> +        dom = *dominfo;
>          free(dom->name);
>          free(dom->uuid);
>          free(dom->bootloader);
> --
> 1.7.4.4
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim
>




More information about the Libvirt-cim mailing list