On Wed, 2004-09-15 at 10:02, Stephen Smalley wrote:
On Wed, 2004-09-15 at 09:59, Serge Hallyn wrote:
case AUDIT_SET:
- if (!capable(CAP_SYS_ADMIN))
- return -EPERM;
+ err = security_audit_set(status_get->mask);
+ if (err)
+ return err;
status_get = (struct audit_status *)data;
Hook is called _before_ setting of status_get?
Good point, we should send the status_get to the hook for finer-grained
controls.
And what checks that the
data length is at least sizeof(struct audit_status)? Looks like the
existing code is assuming that the caller didn't send a short message.
True.
@@ -364,8 +365,9 @@ static int audit_receive_msg(struct sk_b
audit_log_end(ab);
break;
case AUDIT_LOGIN:
- if (!capable(CAP_SYS_ADMIN))
- return -EPERM;
+ err = security_audit_login();
+ if (err)
+ return err;
login = (struct audit_login *)data;
ab = audit_log_start(NULL);
if (ab) {
Why not call the hook after extracting the data (and again, checking the
length) and pass the audit_login info to the hook.
I would also suggest a hook on AUDIT_USER.
Thanks, I will send a new patch with each of these incorporated.
-serge
--
=======================================================
Serge Hallyn
Security Software Engineer, IBM Linux Technology Center
serue(a)us.ibm.com