[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 |