Skip to content
  • Zhao Liu's avatar
    hw/vfio/pci-quirks: Fix missing ERRP_GUARD() for error_prepend() · 44765508
    Zhao Liu authored and Thomas Huth's avatar Thomas Huth committed
    As the comment in qapi/error, passing @errp to error_prepend() requires
    ERRP_GUARD():
    
    * = Why, when and how to use ERRP_GUARD() =
    *
    * Without ERRP_GUARD(), use of the @errp parameter is restricted:
    ...
    * - It should not be passed to error_prepend(), error_vprepend() or
    *   error_append_hint(), because that doesn't work with &error_fatal.
    * ERRP_GUARD() lifts these restrictions.
    *
    * To use ERRP_GUARD(), add it right at the beginning of the function.
    * @errp can then be used without worrying about the argument being
    * NULL or &error_fatal.
    
    ERRP_GUARD() could avoid the case when @errp is &error_fatal, the user
    can't see this additional information, because exit() happens in
    error_setg earlier than information is added [1].
    
    In hw/vfio/pci-quirks.c, there are 2 functions passing @errp to
    error_prepend() without ERRP_GUARD():
    - vfio_add_nv_gpudirect_cap()
    - vfio_add_vmd_shadow_cap()
    
    There are too many possible callers to check the impact of this defect;
    it may or may not be harmless. Thus it is necessary to protect their
    @errp with ERRP_GUARD().
    
    To avoid the issue like [1] said, add missing ERRP_GUARD() at the
    beginning of this function.
    
    [1]: Issue description in the commit message of commit ae7c80a7
    
    
         ("error: New macro ERRP_GUARD()").
    
    Cc: Alex Williamson <alex.williamson@redhat.com>
    Cc: Cédric Le Goater <clg@redhat.com>
    Signed-off-by: default avatarZhao Liu <zhao1.liu@intel.com>
    Reviewed-by: Cédric Le Goater's avatarCédric Le Goater <clg@redhat.com>
    Message-ID: <20240311033822.3142585-23-zhao1.liu@linux.intel.com>
    Signed-off-by: Thomas Huth's avatarThomas Huth <thuth@redhat.com>
    44765508