3.9 kacs.descriptor.rejected

  • Event type: kacs.descriptor.rejected
  • Defined in: kacs.evman
  • Tier: standard
  • Gating: none — every unreadable stored descriptor is recorded
  • Cardinality: one record per occurrence

The record that KACS read an object's stored security descriptor, found it corrupt, and refused to use it. The object is then treated as having a descriptor nobody can satisfy, so every access to it is denied until the descriptor is replaced by someone allowed to write one.

This is often the only explanation for a sudden, universal denial. A file that everyone could open and nobody now can, with no change to its descriptor anyone remembers making, is usually this: the stored bytes no longer parse, whether from disk corruption, a tool writing the extended attribute directly, or an interrupted write.

KACS records the event once per descriptor read, when the object's descriptor cache is filled, not on every denied access that follows. The subject is whoever's access made KACS read the descriptor: the first to touch the file after it was cached, not whoever corrupted it.

3.9.1 Fields #

FieldTypePresenceMeaning
subject.token.sidbin.sidvia subjectThe user SID of the effective token the operation ran under.
subject.token.groupsbin.sid[]via subjectThe group SIDs carried by the effective token.
subject.token.group-attributesuint.flags[]via subjectPer-group attribute bitmasks, positionally parallel to subject.token.groups.
subject.token.integrityuint.integrityvia subjectThe integrity RID of the effective token.
subject.token.iduint.luidvia subjectThe token's own LUID, identifying this specific token rather than the logon session it belongs to.
subject.token.auth-iduint.luidvia subjectThe LUID of the logon session the effective token belongs to.
subject.token.typestr.enumvia subjectWhether the effective token is a primary token or an impersonation token.
subject.token.impersonationuint.enumvia subjectThe impersonation level of the effective token.
subject.token.uiduintvia subjectThe Linux UID this token projects onto, for correlating a Peios event with Linux-side audit data.
emitter.process.piduintvia subjectThe process ID the record was written from.
emitter.process.namestrvia subjectThe kernel's name for the emitting process, typically the executable's basename.
emitter.process.executablestr.pathvia subjectThe path the emitting process was executed from, resolved at exec with symbolic links already followed.
subject.pip.typeuint.enumvia subjectThe Protected Isolated Process type in force for the access check.
subject.pip.trustuintvia subjectThe PIP trust level in force for the access check.
object.kindstr.enumrequiredAlways file today: file descriptors are the only stored descriptors KACS reads this way.
object.file.pathstr.pathoptionalNot carried today. The descriptor is read through an anchor that has no mount, so no absolute path can be resolved at that point.
object.file.inodeuintrequiredThe inode number the object presents.
object.file.deviceuintrequiredWith object.file.inode, what names the file in place of a path: find it with find <mount> -xdev -inum <inode> on the filesystem of that device.
object.sd.lengthuint.bytesrequiredThe length of the stored attribute that failed: 0 when it was empty, and more than 65,535 when it was too long to be a descriptor at all.
outcome.reasonstr.enumrequiredWhy the descriptor was refused. corrupt is the only reason today.

Values here (open set): corrupt.

Every record also carries the header fields of the envelope, which no payload repeats.

Generated from kacs.evman by pkm/tools/gen-events-book.py. Edit the fragment, not this page.

Edit this page