@@ -213,11 +213,11 @@ cdef class AVRule(BaseTERule):
213213 return self .rule_string
214214
215215
216- cdef class IoctlSet (frozenset ):
216+ cdef class XpermSet (frozenset ):
217217
218218 """
219219 A set with overridden string functions which compresses
220- the output into ioctl ranges instead of individual elements.
220+ the output into ioctl/nlmsg ranges instead of individual elements.
221221 """
222222
223223 def __format__ (self , spec ):
@@ -249,7 +249,7 @@ cdef class IoctlSet(frozenset):
249249 elif spec == " ," :
250250 return " , " .join(shortlist)
251251 else :
252- return super (IoctlSet, self ).__format__(spec)
252+ return super ().__format__(spec)
253253
254254 def __str__ (self ):
255255 return f" {self}"
@@ -267,12 +267,20 @@ cdef class IoctlSet(frozenset):
267267 sorted (self ), key = lambda k , c = itertools.count(): k - next(c)))
268268
269269
270+ cdef class IoctlSet(XpermSet):
271+
272+ def __init__ (self , *args , **kwargs ):
273+ log = logging.getLogger(__name__ )
274+ log.warning(" IoctlSet is deprecated, use XpermSet instead." )
275+ super ().__init__(* args, ** kwargs)
276+
277+
270278cdef class AVRuleXperm(BaseTERule):
271279
272280 """ An extended permission access vector type enforcement rule."""
273281
274282 cdef:
275- readonly IoctlSet perms
283+ readonly XpermSet perms
276284 readonly str xperm_type
277285
278286 @staticmethod
@@ -292,9 +300,10 @@ cdef class AVRuleXperm(BaseTERule):
292300 #
293301 for curr in range (len ):
294302 if sepol.xperm_test(curr, xperms.perms):
295- if xperms.specified & sepol.AVTAB_XPERMS_IOCTLFUNCTION:
303+ if (xperms.specified == sepol.AVTAB_XPERMS_IOCTLFUNCTION \
304+ or xperms.specified == sepol.AVTAB_XPERMS_NLMSG):
296305 perms.add(xperms.driver << 8 | curr)
297- elif xperms.specified & sepol.AVTAB_XPERMS_IOCTLDRIVER:
306+ elif xperms.specified == sepol.AVTAB_XPERMS_IOCTLDRIVER:
298307 base_value = curr << 8
299308 perms.update(range (base_value, base_value + 0x100 ))
300309 else :
@@ -309,6 +318,8 @@ cdef class AVRuleXperm(BaseTERule):
309318 if datum.xperms.specified == sepol.AVTAB_XPERMS_IOCTLFUNCTION \
310319 or datum.xperms.specified == sepol.AVTAB_XPERMS_IOCTLDRIVER:
311320 xperm_type = intern (" ioctl" )
321+ elif datum.xperms.specified == sepol.AVTAB_XPERMS_NLMSG:
322+ xperm_type = intern (" nlmsg" )
312323 else :
313324 raise LowLevelPolicyError(f" Unknown extended permission: {datum.xperms.specified}" )
314325
@@ -322,7 +333,7 @@ cdef class AVRuleXperm(BaseTERule):
322333 r.source = type_or_attr_factory(policy, policy.type_value_to_datum(key.source_type - 1 ))
323334 r.target = type_or_attr_factory(policy, policy.type_value_to_datum(key.target_type - 1 ))
324335 r.tclass = ObjClass.factory(policy, policy.class_value_to_datum(key.target_class - 1 ))
325- r.perms = IoctlSet (perms)
336+ r.perms = XpermSet (perms)
326337 r.extended = True
327338 r.xperm_type = xperm_type
328339 r._conditional = conditional
0 commit comments