diff options
author | Dustin Kirkland <dustin.kirkland@us.ibm.com> | 2006-02-16 13:40:01 -0600 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2006-03-20 14:08:55 -0500 |
commit | d9d9ec6e2c45b22282cd36cf92fcb23d504350a8 (patch) | |
tree | 88e861cee6de93d931325b9bdb2cd867afc6decd /kernel/audit.c | |
parent | 5bdb98868062c1b14025883049551af343233187 (diff) | |
download | linux-stable-d9d9ec6e2c45b22282cd36cf92fcb23d504350a8.tar.gz linux-stable-d9d9ec6e2c45b22282cd36cf92fcb23d504350a8.tar.bz2 linux-stable-d9d9ec6e2c45b22282cd36cf92fcb23d504350a8.zip |
[PATCH] Fix audit operators
Darrel Goeddel initiated a discussion on IRC regarding the possibility
of audit_comparator() returning -EINVAL signaling an invalid operator.
It is possible when creating the rule to assure that the operator is one
of the 6 sane values. Here's a snip from include/linux/audit.h Note
that 0 (nonsense) and 7 (all operators) are not valid values for an
operator.
...
/* These are the supported operators.
* 4 2 1
* = > <
* -------
* 0 0 0 0 nonsense
* 0 0 1 1 <
* 0 1 0 2 >
* 0 1 1 3 !=
* 1 0 0 4 =
* 1 0 1 5 <=
* 1 1 0 6 >=
* 1 1 1 7 all operators
*/
...
Furthermore, prior to adding these extended operators, flagging the
AUDIT_NEGATE bit implied !=, and otherwise == was assumed.
The following code forces the operator to be != if the AUDIT_NEGATE bit
was flipped on. And if no operator was specified, == is assumed. The
only invalid condition is if the AUDIT_NEGATE bit is off and all of the
AUDIT_EQUAL, AUDIT_LESS_THAN, and AUDIT_GREATER_THAN bits are
on--clearly a nonsensical operator.
Now that this is handled at rule insertion time, the default -EINVAL
return of audit_comparator() is eliminated such that the function can
only return 1 or 0.
If this is acceptable, let's get this applied to the current tree.
:-Dustin
--
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
(cherry picked from 9bf0a8e137040f87d1b563336d4194e38fb2ba1a commit)
Diffstat (limited to 'kernel/audit.c')
0 files changed, 0 insertions, 0 deletions