Index: ntoskrnl/se/acl.c =================================================================== --- ntoskrnl/se/acl.c (revision 72642) +++ ntoskrnl/se/acl.c (working copy) @@ -71,7 +71,10 @@ AclLength, TAG_ACL); if (SePublicDefaultUnrestrictedDacl == NULL) + { + ExFreePoolWithTag(SePublicDefaultDacl, TAG_ACL); return FALSE; + } RtlCreateAcl(SePublicDefaultUnrestrictedDacl, AclLength, @@ -107,7 +110,11 @@ AclLength, TAG_ACL); if (SePublicOpenDacl == NULL) + { + ExFreePoolWithTag(SePublicDefaultDacl, TAG_ACL); + ExFreePoolWithTag(SePublicDefaultUnrestrictedDacl, TAG_ACL); return FALSE; + } RtlCreateAcl(SePublicOpenDacl, AclLength, @@ -139,7 +146,12 @@ AclLength, TAG_ACL); if (SePublicOpenUnrestrictedDacl == NULL) + { + ExFreePoolWithTag(SePublicDefaultDacl, TAG_ACL); + ExFreePoolWithTag(SePublicDefaultUnrestrictedDacl, TAG_ACL); + ExFreePoolWithTag(SePublicOpenDacl, TAG_ACL); return FALSE; + } RtlCreateAcl(SePublicOpenUnrestrictedDacl, AclLength, @@ -174,7 +186,13 @@ AclLength, TAG_ACL); if (SeSystemDefaultDacl == NULL) + { + ExFreePoolWithTag(SePublicDefaultDacl, TAG_ACL); + ExFreePoolWithTag(SePublicDefaultUnrestrictedDacl, TAG_ACL); + ExFreePoolWithTag(SePublicOpenDacl, TAG_ACL); + ExFreePoolWithTag(SePublicOpenUnrestrictedDacl, TAG_ACL); return FALSE; + } RtlCreateAcl(SeSystemDefaultDacl, AclLength, @@ -199,7 +217,14 @@ AclLength, TAG_ACL); if (SeUnrestrictedDacl == NULL) + { + ExFreePoolWithTag(SePublicDefaultDacl, TAG_ACL); + ExFreePoolWithTag(SePublicDefaultUnrestrictedDacl, TAG_ACL); + ExFreePoolWithTag(SePublicOpenDacl, TAG_ACL); + ExFreePoolWithTag(SePublicOpenUnrestrictedDacl, TAG_ACL); + ExFreePoolWithTag(SeSystemDefaultDacl, TAG_ACL); return FALSE; + } RtlCreateAcl(SeUnrestrictedDacl, AclLength,