diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index c8aeb3679b7ac8aa6b874a0555a317ab94ee9af7..3d43f7f2309bc707bfa0e1b7bff219a12f349c01 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -202,6 +202,15 @@ CopySid( DWORD nDestinationSidLength, PSID pDestinationSid, PSID pSourceSid )
 BOOL WINAPI
 IsValidSid( PSID pSid )
 {
+    if (IsBadReadPtr(pSid, 4))
+    {
+        WARN_(security)("(%p): invalid pointer!", pSid);
+        return FALSE;
+    }
+
+    if (pSid->SubAuthorityCount > SID_MAX_SUB_AUTHORITIES)
+        return FALSE;
+
     if (!pSid || pSid->Revision != SID_REVISION)
         return FALSE;