On 20 Aug 2024, at 15:55, Mike Pattrick wrote:

> The Clang analyzer has trouble detecting that functions can never return
> null in certain conditions, this results in several false "Dereference of
> null pointer" detections.
>
> This patch annotates functions that call ovsdb_error_valist()
> unconditionally as non-null, as this function will either return a valid
> pointer or call abort().
>
> Signed-off-by: Mike Pattrick <m...@redhat.com>

Other than the comment from Ilya, this patch looks good to me.
To be clear, I mean this change:

diff --git a/lib/ovsdb-error.h b/lib/ovsdb-error.h
index a63e92b15..e91b6336a 100644
--- a/lib/ovsdb-error.h
+++ b/lib/ovsdb-error.h
@@ -20,35 +20,35 @@

 struct json;

-OVS_RETURNS_NONNULL
 struct ovsdb_error *ovsdb_error(const char *tag, const char *details, ...)
     OVS_PRINTF_FORMAT(2, 3)
-    OVS_WARN_UNUSED_RESULT;
-OVS_RETURNS_NONNULL
+    OVS_WARN_UNUSED_RESULT
+    OVS_RETURNS_NONNULL;
 struct ovsdb_error *ovsdb_io_error(int error, const char *details, ...)
     OVS_PRINTF_FORMAT(2, 3)
-    OVS_WARN_UNUSED_RESULT;
-OVS_RETURNS_NONNULL
+    OVS_WARN_UNUSED_RESULT
+    OVS_RETURNS_NONNULL;
 struct ovsdb_error *ovsdb_syntax_error(const struct json *, const char *tag,
                                        const char *details, ...)
     OVS_PRINTF_FORMAT(3, 4)
-    OVS_WARN_UNUSED_RESULT;
+    OVS_WARN_UNUSED_RESULT
+    OVS_RETURNS_NONNULL;

 struct ovsdb_error *ovsdb_wrap_error(struct ovsdb_error *error,
                                      const char *details, ...)
     OVS_PRINTF_FORMAT(2, 3);

-OVS_RETURNS_NONNULL
 struct ovsdb_error *ovsdb_internal_error(struct ovsdb_error *error,
                                          const char *file, int line,
                                          const char *details, ...)
     OVS_PRINTF_FORMAT(4, 5)
-    OVS_WARN_UNUSED_RESULT;
+    OVS_WARN_UNUSED_RESULT
+    OVS_RETURNS_NONNULL;

-OVS_RETURNS_NONNULL
 struct ovsdb_error *ovsdb_perm_error(const char *details, ...)
     OVS_PRINTF_FORMAT(1, 2)
-    OVS_WARN_UNUSED_RESULT;
+    OVS_WARN_UNUSED_RESULT
+    OVS_RETURNS_NONNULL;

 /* Returns a pointer to an ovsdb_error that represents an internal error for
  * the current file name and line number with MSG as the associated message.


Acked-by: Eelco Chaudron <echau...@redhat.com>

> ---
>  lib/ovsdb-error.h | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/lib/ovsdb-error.h b/lib/ovsdb-error.h
> index 77a60e074..a63e92b15 100644
> --- a/lib/ovsdb-error.h
> +++ b/lib/ovsdb-error.h
> @@ -20,12 +20,15 @@
>
>  struct json;
>
> +OVS_RETURNS_NONNULL
>  struct ovsdb_error *ovsdb_error(const char *tag, const char *details, ...)
>      OVS_PRINTF_FORMAT(2, 3)
>      OVS_WARN_UNUSED_RESULT;
> +OVS_RETURNS_NONNULL
>  struct ovsdb_error *ovsdb_io_error(int error, const char *details, ...)
>      OVS_PRINTF_FORMAT(2, 3)
>      OVS_WARN_UNUSED_RESULT;
> +OVS_RETURNS_NONNULL
>  struct ovsdb_error *ovsdb_syntax_error(const struct json *, const char *tag,
>                                         const char *details, ...)
>      OVS_PRINTF_FORMAT(3, 4)
> @@ -35,12 +38,14 @@ struct ovsdb_error *ovsdb_wrap_error(struct ovsdb_error 
> *error,
>                                       const char *details, ...)
>      OVS_PRINTF_FORMAT(2, 3);
>
> +OVS_RETURNS_NONNULL
>  struct ovsdb_error *ovsdb_internal_error(struct ovsdb_error *error,
>                                           const char *file, int line,
>                                           const char *details, ...)
>      OVS_PRINTF_FORMAT(4, 5)
>      OVS_WARN_UNUSED_RESULT;
>
> +OVS_RETURNS_NONNULL
>  struct ovsdb_error *ovsdb_perm_error(const char *details, ...)
>      OVS_PRINTF_FORMAT(1, 2)
>      OVS_WARN_UNUSED_RESULT;
> -- 
> 2.43.5
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to