[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Fix SAL annotations



SyncDisableInterrupts needs to return a value to correctly identify as
_IRQL_Saves_

ModuleLookup may return a null value in Name

LogAddDisposition may return a null value in Disposition, which leads to
LogRemoveDisposition needing to tread Disposition as nullable

Signed-off-by: Owen Smith <owen.smith@xxxxxxxxx>
---
 include/xen.h        | 16 ++++++++--------
 src/xen/log.c        | 24 ++++++++++++------------
 src/xen/module.c     | 12 ++++++------
 src/xenbus/suspend.c |  3 ++-
 src/xenbus/sync.c    |  7 ++++---
 src/xenbus/sync.h    |  5 +++--
 6 files changed, 35 insertions(+), 32 deletions(-)

diff --git a/include/xen.h b/include/xen.h
index 7f46990..6f28e55 100644
--- a/include/xen.h
+++ b/include/xen.h
@@ -346,9 +346,9 @@ XenVersionExtra(
 XEN_API
 VOID
 ModuleLookup(
-    _In_ ULONG_PTR          Address,
-    _Outptr_result_z_ PSTR  *Name,
-    _Out_ PULONG_PTR        Offset
+    _In_ ULONG_PTR                      Address,
+    _Outptr_result_maybenull_z_ PSTR    *Name,
+    _Out_ PULONG_PTR                    Offset
     );
 
 // UNPLUG
@@ -447,16 +447,16 @@ typedef struct _LOG_DISPOSITION LOG_DISPOSITION, 
*PLOG_DISPOSITION;
 XEN_API
 NTSTATUS
 LogAddDisposition(
-    _In_ LOG_LEVEL              Mask,
-    _In_ VOID                   (*Function)(PVOID, PSTR, ULONG),
-    _In_opt_ PVOID              Argument,
-    _Outptr_ PLOG_DISPOSITION   *Disposition
+    _In_ LOG_LEVEL                              Mask,
+    _In_ VOID                                   (*Function)(PVOID, PSTR, 
ULONG),
+    _In_opt_ PVOID                              Argument,
+    _Outptr_result_maybenull_ PLOG_DISPOSITION  *Disposition
     );
 
 XEN_API
 VOID
 LogRemoveDisposition(
-    _In_ PLOG_DISPOSITION   Disposition
+    _In_opt_ PLOG_DISPOSITION   Disposition
     );
 
 
diff --git a/src/xen/log.c b/src/xen/log.c
index 7bf8cdb..a65b233 100644
--- a/src/xen/log.c
+++ b/src/xen/log.c
@@ -602,16 +602,16 @@ LogTeardown(
 
 NTSTATUS
 LogAddDisposition(
-    _In_ LOG_LEVEL              Mask,
-    _In_ VOID                   (*Function)(PVOID, PSTR, ULONG),
-    _In_opt_ PVOID              Argument,
-    _Outptr_ PLOG_DISPOSITION   *Disposition
+    _In_ LOG_LEVEL                              Mask,
+    _In_ VOID                                   (*Function)(PVOID, PSTR, 
ULONG),
+    _In_opt_ PVOID                              Argument,
+    _Outptr_result_maybenull_ PLOG_DISPOSITION  *Disposition
     )
 {
-    PLOG_CONTEXT                Context = &LogContext;
-    KIRQL                       Irql;
-    ULONG                       Index;
-    NTSTATUS                    status;
+    PLOG_CONTEXT                                Context = &LogContext;
+    KIRQL                                       Irql;
+    ULONG                                       Index;
+    NTSTATUS                                    status;
 
     *Disposition = NULL;
     if (Mask == LOG_LEVEL_NONE)
@@ -653,12 +653,12 @@ fail1:
 
 extern VOID
 LogRemoveDisposition(
-    _In_ PLOG_DISPOSITION   Disposition
+    _In_opt_ PLOG_DISPOSITION   Disposition
     )
 {
-    PLOG_CONTEXT            Context = &LogContext;
-    KIRQL                   Irql;
-    ULONG                   Index;
+    PLOG_CONTEXT                Context = &LogContext;
+    KIRQL                       Irql;
+    ULONG                       Index;
 
     if (Disposition == NULL)
         return;
diff --git a/src/xen/module.c b/src/xen/module.c
index 35a16f4..4efa566 100644
--- a/src/xen/module.c
+++ b/src/xen/module.c
@@ -330,14 +330,14 @@ fail1:
 XEN_API
 VOID
 ModuleLookup(
-    _In_ ULONG_PTR          Address,
-    _Outptr_result_z_ PSTR  *Name,
-    _Out_ PULONG_PTR        Offset
+    _In_ ULONG_PTR                      Address,
+    _Outptr_result_maybenull_z_ PSTR    *Name,
+    _Out_ PULONG_PTR                    Offset
     )
 {
-    PMODULE_CONTEXT         Context = &ModuleContext;
-    PLIST_ENTRY             ListEntry;
-    KIRQL                   Irql;
+    PMODULE_CONTEXT                     Context = &ModuleContext;
+    PLIST_ENTRY                         ListEntry;
+    KIRQL                               Irql;
 
     *Name = NULL;
     *Offset = 0;
diff --git a/src/xenbus/suspend.c b/src/xenbus/suspend.c
index ffab58f..cd292c0 100644
--- a/src/xenbus/suspend.c
+++ b/src/xenbus/suspend.c
@@ -266,7 +266,8 @@ SuspendTrigger(
               "SUSPEND: ====>\n");
 
     SyncCapture(Context, SuspendEarly, SuspendLate);
-    SyncDisableInterrupts(&InterruptIrql);
+    status = SyncDisableInterrupts(&InterruptIrql);
+    _Analysis_assume_(NT_SUCCESS(status));
 
     __SuspendLogTimers("PRE-SUSPEND");
 
diff --git a/src/xenbus/sync.c b/src/xenbus/sync.c
index 804df88..eefa2fe 100644
--- a/src/xenbus/sync.c
+++ b/src/xenbus/sync.c
@@ -392,9 +392,10 @@ SyncCapture(
     Trace("<==== (%u:%u)\n", Group, Number);
 }
 
+_Must_inspect_result_
 _IRQL_requires_(DISPATCH_LEVEL)
-_IRQL_raises_(HIGH_LEVEL)
-VOID
+_When_(NT_SUCCESS(return), _IRQL_raises_(HIGH_LEVEL))
+NTSTATUS
 SyncDisableInterrupts(
     _At_(*Irql, _IRQL_saves_)
     _Out_ PKIRQL    Irql
@@ -417,7 +418,7 @@ SyncDisableInterrupts(
         status = __SyncProcessorDisableInterrupts(Irql);
         _Analysis_assume_(NT_SUCCESS(status));
         if (NT_SUCCESS(status))
-            break;
+            return status;
 
         LogPrintf(LOG_LEVEL_WARNING, "SYNC: RE-TRY\n");
     }
diff --git a/src/xenbus/sync.h b/src/xenbus/sync.h
index 701562f..722653c 100644
--- a/src/xenbus/sync.h
+++ b/src/xenbus/sync.h
@@ -52,9 +52,10 @@ SyncCapture(
     );
 
 extern
+_Must_inspect_result_
 _IRQL_requires_(DISPATCH_LEVEL)
-_IRQL_raises_(HIGH_LEVEL)
-VOID
+_When_(NT_SUCCESS(return), _IRQL_raises_(HIGH_LEVEL))
+NTSTATUS
 SyncDisableInterrupts(
     _At_(*Irql, _IRQL_saves_)
     _Out_ PKIRQL    Irql
-- 
2.46.0.windows.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.