[SETUPAPI] Add a proper (SEH protected) check for LOG_CONF handles

This commit is contained in:
Eric Kohl 2018-02-04 20:23:51 +01:00
parent 60a218948e
commit 19fc20f222

View file

@ -341,7 +341,7 @@ done:
BOOL BOOL
IsValidRangeList( IsValidRangeList(
_In_ PINTERNAL_RANGE_LIST pRangeList) _In_opt_ PINTERNAL_RANGE_LIST pRangeList)
{ {
BOOL bValid = TRUE; BOOL bValid = TRUE;
@ -363,6 +363,30 @@ IsValidRangeList(
} }
BOOL
IsValidLogConf(
_In_opt_ PLOG_CONF_INFO pLogConfInfo)
{
BOOL bValid = TRUE;
if (pLogConfInfo == NULL)
return FALSE;
_SEH2_TRY
{
if (pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
bValid = FALSE;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
bValid = FALSE;
}
_SEH2_END;
return bValid;
}
/*********************************************************************** /***********************************************************************
* CMP_GetBlockedDriverInfo [SETUPAPI.@] * CMP_GetBlockedDriverInfo [SETUPAPI.@]
*/ */
@ -2049,7 +2073,7 @@ CM_Free_Log_Conf_Ex(
return CR_ACCESS_DENIED; return CR_ACCESS_DENIED;
pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed; pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed;
if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC) if (!IsValidLogConf(pLogConfInfo))
return CR_INVALID_LOG_CONF; return CR_INVALID_LOG_CONF;
if (ulFlags != 0) if (ulFlags != 0)
@ -2103,7 +2127,7 @@ CM_Free_Log_Conf_Handle(
TRACE("CM_Free_Log_Conf_Handle(%lx)\n", lcLogConf); TRACE("CM_Free_Log_Conf_Handle(%lx)\n", lcLogConf);
pLogConfInfo = (PLOG_CONF_INFO)lcLogConf; pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC) if (!IsValidLogConf(pLogConfInfo))
return CR_INVALID_LOG_CONF; return CR_INVALID_LOG_CONF;
HeapFree(GetProcessHeap(), 0, pLogConfInfo); HeapFree(GetProcessHeap(), 0, pLogConfInfo);
@ -4709,7 +4733,7 @@ CM_Get_Log_Conf_Priority_Ex(
lcLogConf, pPriority, ulFlags, hMachine); lcLogConf, pPriority, ulFlags, hMachine);
pLogConfInfo = (PLOG_CONF_INFO)lcLogConf; pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC) if (!IsValidLogConf(pLogConfInfo))
return CR_INVALID_LOG_CONF; return CR_INVALID_LOG_CONF;
if (pPriority == NULL) if (pPriority == NULL)
@ -4800,7 +4824,7 @@ CM_Get_Next_Log_Conf_Ex(
*plcLogConf = 0; *plcLogConf = 0;
pLogConfInfo = (PLOG_CONF_INFO)lcLogConf; pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC) if (!IsValidLogConf(pLogConfInfo))
return CR_INVALID_LOG_CONF; return CR_INVALID_LOG_CONF;
if (ulFlags != 0) if (ulFlags != 0)