AppArmor: dfa match engine
authorJohn Johansen <john.johansen@canonical.com>
Thu, 29 Jul 2010 21:48:01 +0000 (14:48 -0700)
committerJames Morris <jmorris@namei.org>
Mon, 2 Aug 2010 05:35:13 +0000 (15:35 +1000)
commite06f75a6a2b43bd3a7a197bd21466f9da130e4af
treebf5aabceae66c62e317a0403b05ffb320aef54d2
parentc75afcd153f6147d3b094f45a1d87e5df7f4f053
AppArmor: dfa match engine

A basic dfa matching engine based off the dfa engine in the Dragon
Book.  It uses simple row comb compression with a check field.

This allows AppArmor to do pattern matching in linear time, and also
avoids stack issues that an nfa based engine may have.  The dfa
engine uses a byte based comparison, with all values being valid.
Any potential character encoding are handled user side when the dfa
tables are created.  By convention AppArmor uses \0 to separate two
dependent path matches since \0 is not a valid path character
(this is done in the link permission check).

The dfa tables are generated in user space and are verified at load
time to be internally consistent.

There are several future improvements planned for the dfa engine:
* The dfa engine may be converted to a hybrid nfa-dfa engine, with
  a fixed size limited stack.  This would allow for size time
  tradeoffs, by inserting limited nfa states to help control
  state explosion that can occur with dfas.
* The dfa engine may pickup the ability to do limited dynamic
  variable matching, instead of fixing all variables at policy
  load time.

Signed-off-by: John Johansen <john.johansen@canonical.com>
Signed-off-by: James Morris <jmorris@namei.org>
security/apparmor/include/match.h [new file with mode: 0644]
security/apparmor/match.c [new file with mode: 0644]