sanitize audit_ipc_set_perm()
PATCH 4/15 sanitize audit_ipc_set_perm()
* get rid of allocations
* make it return void
* simplify callers
Signed-off-by Al Viro <[email protected]>
--- include/linux/audit.h | 9 +++---- ipc/util.c | 10 ++----- kernel/auditsc.c | 59 +++++++++++++++++++++--------------------------- 3 files changed, 33 insertions(+), 45 deletions(-)
include/linux/audit.h +4 -5
@@ -442,7 +442,7 @@ extern int audit_set_loginuid(struct task_struct *task, uid_t loginuid);#define audit_get_sessionid (t) ((t)->sessionid)extern void audit_log_task_context (struct audit_buffer *ab);extern void __audit_ipc_obj (struct kern_ipc_perm *ipcp); -extern int __audit_ipc_set_perm (unsigned long qbytes,uid_t uid,gid_t gid,mode_t mode); +extern void __audit_ipc_set_perm (unsigned long qbytes,uid_t uid,gid_t gid,mode_t mode);extern int audit_bprm (struct linux_binprm *bprm);extern void audit_socketcall (int nargs,unsigned long *args);extern int audit_sockaddr (int len,void *addr);
@@ -465,11 +465,10 @@ static inline int audit_fd_pair(int fd1, int fd2)return __audit_fd_pair (fd1, fd2);return 0 ; } -static inline int audit_ipc_set_perm (unsigned long qbytes,uid_t uid,gid_t gid,mode_t mode) +static inline void audit_ipc_set_perm (unsigned long qbytes,uid_t uid,gid_t gid,mode_t mode) {if (unlikely (!audit_dummy_context ())) -return __audit_ipc_set_perm (qbytes, uid, gid, mode); -return 0 ; +__audit_ipc_set_perm (qbytes, uid, gid, mode); }static inline int audit_mq_open (int oflag,mode_t mode,struct mq_attr __user *u_attr) {
@@ -522,7 +521,7 @@ extern int audit_signals;#define audit_get_sessionid (t) (-1)#define audit_log_task_context (b) do { ; } while (0)#define audit_ipc_obj (i) ((void)0) -#define audit_ipc_set_perm (q,u,g,m) ({ 0; }) +#define audit_ipc_set_perm (q,u,g,m) ((void)0)#define audit_bprm (p) ({ 0; })#define audit_socketcall (n,a) ((void)0)#define audit_fd_pair (n,a) ({ 0; })
ipc/util.c +3 -7
@@ -797,19 +797,15 @@ struct kern_ipc_perm *ipcctl_pre_down(struct ipc_ids *ids, int id, int cmd, }audit_ipc_obj (ipcp); - -if (cmd ==IPC_SET ) { - err =audit_ipc_set_perm (extra_perm, perm->uid, +if (cmd ==IPC_SET ) +audit_ipc_set_perm (extra_perm, perm->uid, perm->gid, perm->mode); -if (err) - goto out_unlock; - } +if (current->euid == ipcp->cuid || current->euid == ipcp->uid ||capable (CAP_SYS_ADMIN ))return ipcp; err = -EPERM ; -out_unlock:ipc_unlock (ipcp); out_up:up_write (&ids->rw_mutex);
kernel/auditsc.c +26 -33
99 lines not on this page · raw message
Signature · 1 line
1.5.6.5
Quoted 6 lines · Al Viro
* get rid of allocations
* make it return void
* simplify callersSigned-off-by Al Viro <[email protected]>
Reviewed-by James Morris <[email protected]>
Signature · 2 lines
James Morris <[email protected]>