|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |