aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/auditsc.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2008-12-10 06:58:59 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2009-01-04 15:14:40 -0500
commit7392906ea915b9a2c14dea32b3604b4e178f82f7 (patch)
tree1e4fbe56e3738fade213ef805ec274ea74ac6a1b /kernel/auditsc.c
parente816f370cbadd2afea9f1a42f232d0636137d563 (diff)
sanitize audit_mq_getsetattr()
* get rid of allocations * make it return void * don't duplicate parts of audit_dummy_context() Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'kernel/auditsc.c')
-rw-r--r--kernel/auditsc.c54
1 files changed, 17 insertions, 37 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index fbed62e05bce..c50178c7e245 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -145,12 +145,6 @@ struct audit_aux_data_mq_notify {
145 struct sigevent notification; 145 struct sigevent notification;
146}; 146};
147 147
148struct audit_aux_data_mq_getsetattr {
149 struct audit_aux_data d;
150 mqd_t mqdes;
151 struct mq_attr mqstat;
152};
153
154struct audit_aux_data_execve { 148struct audit_aux_data_execve {
155 struct audit_aux_data d; 149 struct audit_aux_data d;
156 int argc; 150 int argc;
@@ -248,6 +242,10 @@ struct audit_context {
248 mode_t perm_mode; 242 mode_t perm_mode;
249 unsigned long qbytes; 243 unsigned long qbytes;
250 } ipc; 244 } ipc;
245 struct {
246 mqd_t mqdes;
247 struct mq_attr mqstat;
248 } mq_getsetattr;
251 }; 249 };
252 250
253#if AUDIT_DEBUG 251#if AUDIT_DEBUG
@@ -1269,6 +1267,15 @@ static void show_special(struct audit_context *context, int *call_panic)
1269 return; 1267 return;
1270 } 1268 }
1271 break; } 1269 break; }
1270 case AUDIT_MQ_GETSETATTR: {
1271 struct mq_attr *attr = &context->mq_getsetattr.mqstat;
1272 audit_log_format(ab,
1273 "mqdes=%d mq_flags=0x%lx mq_maxmsg=%ld mq_msgsize=%ld "
1274 "mq_curmsgs=%ld ",
1275 context->mq_getsetattr.mqdes,
1276 attr->mq_flags, attr->mq_maxmsg,
1277 attr->mq_msgsize, attr->mq_curmsgs);
1278 break; }
1272 } 1279 }
1273 audit_log_end(ab); 1280 audit_log_end(ab);
1274} 1281}
@@ -1377,16 +1384,6 @@ static void audit_log_exit(struct audit_context *context, struct task_struct *ts
1377 axi->notification.sigev_signo); 1384 axi->notification.sigev_signo);
1378 break; } 1385 break; }
1379 1386
1380 case AUDIT_MQ_GETSETATTR: {
1381 struct audit_aux_data_mq_getsetattr *axi = (void *)aux;
1382 audit_log_format(ab,
1383 "mqdes=%d mq_flags=0x%lx mq_maxmsg=%ld mq_msgsize=%ld "
1384 "mq_curmsgs=%ld ",
1385 axi->mqdes,
1386 axi->mqstat.mq_flags, axi->mqstat.mq_maxmsg,
1387 axi->mqstat.mq_msgsize, axi->mqstat.mq_curmsgs);
1388 break; }
1389
1390 case AUDIT_EXECVE: { 1387 case AUDIT_EXECVE: {
1391 struct audit_aux_data_execve *axi = (void *)aux; 1388 struct audit_aux_data_execve *axi = (void *)aux;
1392 audit_log_execve_info(context, &ab, axi); 1389 audit_log_execve_info(context, &ab, axi);
@@ -2316,30 +2313,13 @@ int __audit_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification)
2316 * @mqdes: MQ descriptor 2313 * @mqdes: MQ descriptor
2317 * @mqstat: MQ flags 2314 * @mqstat: MQ flags
2318 * 2315 *
2319 * Returns 0 for success or NULL context or < 0 on error.
2320 */ 2316 */
2321int __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) 2317void __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat)
2322{ 2318{
2323 struct audit_aux_data_mq_getsetattr *ax;
2324 struct audit_context *context = current->audit_context; 2319 struct audit_context *context = current->audit_context;
2325 2320 context->mq_getsetattr.mqdes = mqdes;
2326 if (!audit_enabled) 2321 context->mq_getsetattr.mqstat = *mqstat;
2327 return 0; 2322 context->type = AUDIT_MQ_GETSETATTR;
2328
2329 if (likely(!context))
2330 return 0;
2331
2332 ax = kmalloc(sizeof(*ax), GFP_ATOMIC);
2333 if (!ax)
2334 return -ENOMEM;
2335
2336 ax->mqdes = mqdes;
2337 ax->mqstat = *mqstat;
2338
2339 ax->d.type = AUDIT_MQ_GETSETATTR;
2340 ax->d.next = context->aux;
2341 context->aux = (void *)ax;
2342 return 0;
2343} 2323}
2344 2324
2345/** 2325/**