Jails have kevent support, with events for set, attach, remove, and child creation. The last one allows for child jails to be automatically added to the vent list via the NOTE_TRACK that was already used by process forking.
Jail descriptors can also easily be tracked via kevent, but have a harder time with child jail tracking because kevent isn't able to open new jail descriptors (as they are process-specific). So something needs to be done to work around this.
Plan A: As with kevent for jails (by jid), NOTE_TRACK will automatically add a new EVFILT_JAIL event for the created jail, not an EVFILT_JAILDESC event. If the caller wants to track that jail via descriptor, they will need to get one with jail_get(2). This isn't optimal, since there are possible race conditions, but the fact that the returned EVFILT_JAIL event can report the jail's removal makes the workaround possible.