X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=include%2Flinux%2Fsecurity.h;h=df591d289ec98e18aec72af323c2cb941c560236;hb=b53767719b6cd8789392ea3e7e2eb7b8906898f0;hp=1a15526e9f677ce6bb402234cc4d000d5c7f7ad0;hpb=b981d8b3f5e008ff10d993be633ad00564fc22cd;p=powerpc.git diff --git a/include/linux/security.h b/include/linux/security.h index 1a15526e9f..df591d289e 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -51,10 +51,16 @@ extern void cap_bprm_apply_creds (struct linux_binprm *bprm, int unsafe); extern int cap_bprm_secureexec(struct linux_binprm *bprm); extern int cap_inode_setxattr(struct dentry *dentry, char *name, void *value, size_t size, int flags); extern int cap_inode_removexattr(struct dentry *dentry, char *name); +extern int cap_inode_need_killpriv(struct dentry *dentry); +extern int cap_inode_killpriv(struct dentry *dentry); extern int cap_task_post_setuid (uid_t old_ruid, uid_t old_euid, uid_t old_suid, int flags); extern void cap_task_reparent_to_init (struct task_struct *p); +extern int cap_task_kill(struct task_struct *p, struct siginfo *info, int sig, u32 secid); +extern int cap_task_setscheduler (struct task_struct *p, int policy, struct sched_param *lp); +extern int cap_task_setioprio (struct task_struct *p, int ioprio); +extern int cap_task_setnice (struct task_struct *p, int nice); extern int cap_syslog (int type); -extern int cap_vm_enough_memory (struct mm_struct *mm, long pages); +extern int cap_vm_enough_memory(struct mm_struct *mm, long pages); struct msghdr; struct sk_buff; @@ -413,6 +419,18 @@ struct request_sock; * is specified by @buffer_size. @buffer may be NULL to request * the size of the buffer required. * Returns number of bytes used/required on success. + * @inode_need_killpriv: + * Called when an inode has been changed. + * @dentry is the dentry being changed. + * Return <0 on error to abort the inode change operation. + * Return 0 if inode_killpriv does not need to be called. + * Return >0 if inode_killpriv does need to be called. + * @inode_killpriv: + * The setuid bit is being removed. Remove similar security labels. + * Called with the dentry->d_inode->i_mutex held. + * @dentry is the dentry being changed. + * Return 0 on success. If error is returned, then the operation + * causing setuid bit removal is failed. * * Security hooks for file operations * @@ -504,6 +522,13 @@ struct request_sock; * @file contains the file structure being received. * Return 0 if permission is granted. * + * Security hook for dentry + * + * @dentry_open + * Save open-time permission checking state for later use upon + * file_permission, and recheck access if anything has changed + * since inode_permission. + * * Security hooks for task operations. * * @task_create: @@ -1232,6 +1257,8 @@ struct security_operations { int (*inode_getxattr) (struct dentry *dentry, char *name); int (*inode_listxattr) (struct dentry *dentry); int (*inode_removexattr) (struct dentry *dentry, char *name); + int (*inode_need_killpriv) (struct dentry *dentry); + int (*inode_killpriv) (struct dentry *dentry); const char *(*inode_xattr_getsuffix) (void); int (*inode_getsecurity)(const struct inode *inode, const char *name, void *buffer, size_t size, int err); int (*inode_setsecurity)(struct inode *inode, const char *name, const void *value, size_t size, int flags); @@ -1256,6 +1283,7 @@ struct security_operations { int (*file_send_sigiotask) (struct task_struct * tsk, struct fown_struct * fown, int sig); int (*file_receive) (struct file * file); + int (*dentry_open) (struct file *file); int (*task_create) (unsigned long clone_flags); int (*task_alloc_security) (struct task_struct * p); @@ -1401,13 +1429,187 @@ struct security_operations { }; -/* global variables */ -extern struct security_operations *security_ops; +/* prototypes */ +extern int security_init (void); +extern int register_security (struct security_operations *ops); +extern int unregister_security (struct security_operations *ops); +extern int mod_reg_security (const char *name, struct security_operations *ops); +extern int mod_unreg_security (const char *name, struct security_operations *ops); +extern struct dentry *securityfs_create_file(const char *name, mode_t mode, + struct dentry *parent, void *data, + const struct file_operations *fops); +extern struct dentry *securityfs_create_dir(const char *name, struct dentry *parent); +extern void securityfs_remove(struct dentry *dentry); + + +/* Security operations */ +int security_ptrace(struct task_struct *parent, struct task_struct *child); +int security_capget(struct task_struct *target, + kernel_cap_t *effective, + kernel_cap_t *inheritable, + kernel_cap_t *permitted); +int security_capset_check(struct task_struct *target, + kernel_cap_t *effective, + kernel_cap_t *inheritable, + kernel_cap_t *permitted); +void security_capset_set(struct task_struct *target, + kernel_cap_t *effective, + kernel_cap_t *inheritable, + kernel_cap_t *permitted); +int security_capable(struct task_struct *tsk, int cap); +int security_acct(struct file *file); +int security_sysctl(struct ctl_table *table, int op); +int security_quotactl(int cmds, int type, int id, struct super_block *sb); +int security_quota_on(struct dentry *dentry); +int security_syslog(int type); +int security_settime(struct timespec *ts, struct timezone *tz); +int security_vm_enough_memory(long pages); +int security_vm_enough_memory_mm(struct mm_struct *mm, long pages); +int security_bprm_alloc(struct linux_binprm *bprm); +void security_bprm_free(struct linux_binprm *bprm); +void security_bprm_apply_creds(struct linux_binprm *bprm, int unsafe); +void security_bprm_post_apply_creds(struct linux_binprm *bprm); +int security_bprm_set(struct linux_binprm *bprm); +int security_bprm_check(struct linux_binprm *bprm); +int security_bprm_secureexec(struct linux_binprm *bprm); +int security_sb_alloc(struct super_block *sb); +void security_sb_free(struct super_block *sb); +int security_sb_copy_data(struct file_system_type *type, void *orig, void *copy); +int security_sb_kern_mount(struct super_block *sb, void *data); +int security_sb_statfs(struct dentry *dentry); +int security_sb_mount(char *dev_name, struct nameidata *nd, + char *type, unsigned long flags, void *data); +int security_sb_check_sb(struct vfsmount *mnt, struct nameidata *nd); +int security_sb_umount(struct vfsmount *mnt, int flags); +void security_sb_umount_close(struct vfsmount *mnt); +void security_sb_umount_busy(struct vfsmount *mnt); +void security_sb_post_remount(struct vfsmount *mnt, unsigned long flags, void *data); +void security_sb_post_mountroot(void); +void security_sb_post_addmount(struct vfsmount *mnt, struct nameidata *mountpoint_nd); +int security_sb_pivotroot(struct nameidata *old_nd, struct nameidata *new_nd); +void security_sb_post_pivotroot(struct nameidata *old_nd, struct nameidata *new_nd); +int security_inode_alloc(struct inode *inode); +void security_inode_free(struct inode *inode); +int security_inode_init_security(struct inode *inode, struct inode *dir, + char **name, void **value, size_t *len); +int security_inode_create(struct inode *dir, struct dentry *dentry, int mode); +int security_inode_link(struct dentry *old_dentry, struct inode *dir, + struct dentry *new_dentry); +int security_inode_unlink(struct inode *dir, struct dentry *dentry); +int security_inode_symlink(struct inode *dir, struct dentry *dentry, + const char *old_name); +int security_inode_mkdir(struct inode *dir, struct dentry *dentry, int mode); +int security_inode_rmdir(struct inode *dir, struct dentry *dentry); +int security_inode_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev); +int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry, + struct inode *new_dir, struct dentry *new_dentry); +int security_inode_readlink(struct dentry *dentry); +int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd); +int security_inode_permission(struct inode *inode, int mask, struct nameidata *nd); +int security_inode_setattr(struct dentry *dentry, struct iattr *attr); +int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry); +void security_inode_delete(struct inode *inode); +int security_inode_setxattr(struct dentry *dentry, char *name, + void *value, size_t size, int flags); +void security_inode_post_setxattr(struct dentry *dentry, char *name, + void *value, size_t size, int flags); +int security_inode_getxattr(struct dentry *dentry, char *name); +int security_inode_listxattr(struct dentry *dentry); +int security_inode_removexattr(struct dentry *dentry, char *name); +int security_inode_need_killpriv(struct dentry *dentry); +int security_inode_killpriv(struct dentry *dentry); +const char *security_inode_xattr_getsuffix(void); +int security_inode_getsecurity(const struct inode *inode, const char *name, void *buffer, size_t size, int err); +int security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags); +int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size); +int security_file_permission(struct file *file, int mask); +int security_file_alloc(struct file *file); +void security_file_free(struct file *file); +int security_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg); +int security_file_mmap(struct file *file, unsigned long reqprot, + unsigned long prot, unsigned long flags, + unsigned long addr, unsigned long addr_only); +int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, + unsigned long prot); +int security_file_lock(struct file *file, unsigned int cmd); +int security_file_fcntl(struct file *file, unsigned int cmd, unsigned long arg); +int security_file_set_fowner(struct file *file); +int security_file_send_sigiotask(struct task_struct *tsk, + struct fown_struct *fown, int sig); +int security_file_receive(struct file *file); +int security_dentry_open(struct file *file); +int security_task_create(unsigned long clone_flags); +int security_task_alloc(struct task_struct *p); +void security_task_free(struct task_struct *p); +int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); +int security_task_post_setuid(uid_t old_ruid, uid_t old_euid, + uid_t old_suid, int flags); +int security_task_setgid(gid_t id0, gid_t id1, gid_t id2, int flags); +int security_task_setpgid(struct task_struct *p, pid_t pgid); +int security_task_getpgid(struct task_struct *p); +int security_task_getsid(struct task_struct *p); +void security_task_getsecid(struct task_struct *p, u32 *secid); +int security_task_setgroups(struct group_info *group_info); +int security_task_setnice(struct task_struct *p, int nice); +int security_task_setioprio(struct task_struct *p, int ioprio); +int security_task_getioprio(struct task_struct *p); +int security_task_setrlimit(unsigned int resource, struct rlimit *new_rlim); +int security_task_setscheduler(struct task_struct *p, + int policy, struct sched_param *lp); +int security_task_getscheduler(struct task_struct *p); +int security_task_movememory(struct task_struct *p); +int security_task_kill(struct task_struct *p, struct siginfo *info, + int sig, u32 secid); +int security_task_wait(struct task_struct *p); +int security_task_prctl(int option, unsigned long arg2, unsigned long arg3, + unsigned long arg4, unsigned long arg5); +void security_task_reparent_to_init(struct task_struct *p); +void security_task_to_inode(struct task_struct *p, struct inode *inode); +int security_ipc_permission(struct kern_ipc_perm *ipcp, short flag); +int security_msg_msg_alloc(struct msg_msg *msg); +void security_msg_msg_free(struct msg_msg *msg); +int security_msg_queue_alloc(struct msg_queue *msq); +void security_msg_queue_free(struct msg_queue *msq); +int security_msg_queue_associate(struct msg_queue *msq, int msqflg); +int security_msg_queue_msgctl(struct msg_queue *msq, int cmd); +int security_msg_queue_msgsnd(struct msg_queue *msq, + struct msg_msg *msg, int msqflg); +int security_msg_queue_msgrcv(struct msg_queue *msq, struct msg_msg *msg, + struct task_struct *target, long type, int mode); +int security_shm_alloc(struct shmid_kernel *shp); +void security_shm_free(struct shmid_kernel *shp); +int security_shm_associate(struct shmid_kernel *shp, int shmflg); +int security_shm_shmctl(struct shmid_kernel *shp, int cmd); +int security_shm_shmat(struct shmid_kernel *shp, char __user *shmaddr, int shmflg); +int security_sem_alloc(struct sem_array *sma); +void security_sem_free(struct sem_array *sma); +int security_sem_associate(struct sem_array *sma, int semflg); +int security_sem_semctl(struct sem_array *sma, int cmd); +int security_sem_semop(struct sem_array *sma, struct sembuf *sops, + unsigned nsops, int alter); +void security_d_instantiate (struct dentry *dentry, struct inode *inode); +int security_getprocattr(struct task_struct *p, char *name, char **value); +int security_setprocattr(struct task_struct *p, char *name, void *value, size_t size); +int security_netlink_send(struct sock *sk, struct sk_buff *skb); +int security_netlink_recv(struct sk_buff *skb, int cap); +int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); +void security_release_secctx(char *secdata, u32 seclen); + +#else /* CONFIG_SECURITY */ + +/* + * This is the default capabilities functionality. Most of these functions + * are just stubbed out, but a few must call the proper capable code. + */ + +static inline int security_init(void) +{ + return 0; +} -/* inline stuff */ -static inline int security_ptrace (struct task_struct * parent, struct task_struct * child) +static inline int security_ptrace (struct task_struct *parent, struct task_struct * child) { - return security_ops->ptrace (parent, child); + return cap_ptrace (parent, child); } static inline int security_capget (struct task_struct *target, @@ -1415,7 +1617,7 @@ static inline int security_capget (struct task_struct *target, kernel_cap_t *inheritable, kernel_cap_t *permitted) { - return security_ops->capget (target, effective, inheritable, permitted); + return cap_capget (target, effective, inheritable, permitted); } static inline int security_capset_check (struct task_struct *target, @@ -1423,7 +1625,7 @@ static inline int security_capset_check (struct task_struct *target, kernel_cap_t *inheritable, kernel_cap_t *permitted) { - return security_ops->capset_check (target, effective, inheritable, permitted); + return cap_capset_check (target, effective, inheritable, permitted); } static inline void security_capset_set (struct task_struct *target, @@ -1431,179 +1633,164 @@ static inline void security_capset_set (struct task_struct *target, kernel_cap_t *inheritable, kernel_cap_t *permitted) { - security_ops->capset_set (target, effective, inheritable, permitted); + cap_capset_set (target, effective, inheritable, permitted); } static inline int security_capable(struct task_struct *tsk, int cap) { - return security_ops->capable(tsk, cap); + return cap_capable(tsk, cap); } static inline int security_acct (struct file *file) { - return security_ops->acct (file); + return 0; } static inline int security_sysctl(struct ctl_table *table, int op) { - return security_ops->sysctl(table, op); + return 0; } static inline int security_quotactl (int cmds, int type, int id, - struct super_block *sb) + struct super_block * sb) { - return security_ops->quotactl (cmds, type, id, sb); + return 0; } static inline int security_quota_on (struct dentry * dentry) { - return security_ops->quota_on (dentry); + return 0; } static inline int security_syslog(int type) { - return security_ops->syslog(type); + return cap_syslog(type); } static inline int security_settime(struct timespec *ts, struct timezone *tz) { - return security_ops->settime(ts, tz); + return cap_settime(ts, tz); } static inline int security_vm_enough_memory(long pages) { - return security_ops->vm_enough_memory(current->mm, pages); + return cap_vm_enough_memory(current->mm, pages); } static inline int security_vm_enough_memory_mm(struct mm_struct *mm, long pages) { - return security_ops->vm_enough_memory(mm, pages); + return cap_vm_enough_memory(mm, pages); } static inline int security_bprm_alloc (struct linux_binprm *bprm) { - return security_ops->bprm_alloc_security (bprm); + return 0; } + static inline void security_bprm_free (struct linux_binprm *bprm) -{ - security_ops->bprm_free_security (bprm); -} +{ } + static inline void security_bprm_apply_creds (struct linux_binprm *bprm, int unsafe) -{ - security_ops->bprm_apply_creds (bprm, unsafe); +{ + cap_bprm_apply_creds (bprm, unsafe); } + static inline void security_bprm_post_apply_creds (struct linux_binprm *bprm) { - security_ops->bprm_post_apply_creds (bprm); + return; } + static inline int security_bprm_set (struct linux_binprm *bprm) { - return security_ops->bprm_set_security (bprm); + return cap_bprm_set_security (bprm); } static inline int security_bprm_check (struct linux_binprm *bprm) { - return security_ops->bprm_check_security (bprm); + return 0; } static inline int security_bprm_secureexec (struct linux_binprm *bprm) { - return security_ops->bprm_secureexec (bprm); + return cap_bprm_secureexec(bprm); } static inline int security_sb_alloc (struct super_block *sb) { - return security_ops->sb_alloc_security (sb); + return 0; } static inline void security_sb_free (struct super_block *sb) -{ - security_ops->sb_free_security (sb); -} +{ } static inline int security_sb_copy_data (struct file_system_type *type, void *orig, void *copy) { - return security_ops->sb_copy_data (type, orig, copy); + return 0; } static inline int security_sb_kern_mount (struct super_block *sb, void *data) { - return security_ops->sb_kern_mount (sb, data); + return 0; } static inline int security_sb_statfs (struct dentry *dentry) { - return security_ops->sb_statfs (dentry); + return 0; } static inline int security_sb_mount (char *dev_name, struct nameidata *nd, char *type, unsigned long flags, void *data) { - return security_ops->sb_mount (dev_name, nd, type, flags, data); + return 0; } static inline int security_sb_check_sb (struct vfsmount *mnt, struct nameidata *nd) { - return security_ops->sb_check_sb (mnt, nd); + return 0; } static inline int security_sb_umount (struct vfsmount *mnt, int flags) { - return security_ops->sb_umount (mnt, flags); + return 0; } static inline void security_sb_umount_close (struct vfsmount *mnt) -{ - security_ops->sb_umount_close (mnt); -} +{ } static inline void security_sb_umount_busy (struct vfsmount *mnt) -{ - security_ops->sb_umount_busy (mnt); -} +{ } static inline void security_sb_post_remount (struct vfsmount *mnt, unsigned long flags, void *data) -{ - security_ops->sb_post_remount (mnt, flags, data); -} +{ } static inline void security_sb_post_mountroot (void) -{ - security_ops->sb_post_mountroot (); -} +{ } static inline void security_sb_post_addmount (struct vfsmount *mnt, struct nameidata *mountpoint_nd) -{ - security_ops->sb_post_addmount (mnt, mountpoint_nd); -} +{ } static inline int security_sb_pivotroot (struct nameidata *old_nd, struct nameidata *new_nd) { - return security_ops->sb_pivotroot (old_nd, new_nd); + return 0; } static inline void security_sb_post_pivotroot (struct nameidata *old_nd, struct nameidata *new_nd) -{ - security_ops->sb_post_pivotroot (old_nd, new_nd); -} +{ } static inline int security_inode_alloc (struct inode *inode) { - inode->i_security = NULL; - return security_ops->inode_alloc_security (inode); + return 0; } static inline void security_inode_free (struct inode *inode) -{ - security_ops->inode_free_security (inode); -} +{ } static inline int security_inode_init_security (struct inode *inode, struct inode *dir, @@ -1611,70 +1798,54 @@ static inline int security_inode_init_security (struct inode *inode, void **value, size_t *len) { - if (unlikely (IS_PRIVATE (inode))) - return -EOPNOTSUPP; - return security_ops->inode_init_security (inode, dir, name, value, len); + return -EOPNOTSUPP; } static inline int security_inode_create (struct inode *dir, struct dentry *dentry, int mode) { - if (unlikely (IS_PRIVATE (dir))) - return 0; - return security_ops->inode_create (dir, dentry, mode); + return 0; } static inline int security_inode_link (struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry) { - if (unlikely (IS_PRIVATE (old_dentry->d_inode))) - return 0; - return security_ops->inode_link (old_dentry, dir, new_dentry); + return 0; } static inline int security_inode_unlink (struct inode *dir, struct dentry *dentry) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_unlink (dir, dentry); + return 0; } static inline int security_inode_symlink (struct inode *dir, struct dentry *dentry, const char *old_name) { - if (unlikely (IS_PRIVATE (dir))) - return 0; - return security_ops->inode_symlink (dir, dentry, old_name); + return 0; } static inline int security_inode_mkdir (struct inode *dir, struct dentry *dentry, int mode) { - if (unlikely (IS_PRIVATE (dir))) - return 0; - return security_ops->inode_mkdir (dir, dentry, mode); + return 0; } static inline int security_inode_rmdir (struct inode *dir, struct dentry *dentry) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_rmdir (dir, dentry); + return 0; } static inline int security_inode_mknod (struct inode *dir, struct dentry *dentry, int mode, dev_t dev) { - if (unlikely (IS_PRIVATE (dir))) - return 0; - return security_ops->inode_mknod (dir, dentry, mode, dev); + return 0; } static inline int security_inode_rename (struct inode *old_dir, @@ -1682,141 +1853,113 @@ static inline int security_inode_rename (struct inode *old_dir, struct inode *new_dir, struct dentry *new_dentry) { - if (unlikely (IS_PRIVATE (old_dentry->d_inode) || - (new_dentry->d_inode && IS_PRIVATE (new_dentry->d_inode)))) - return 0; - return security_ops->inode_rename (old_dir, old_dentry, - new_dir, new_dentry); + return 0; } static inline int security_inode_readlink (struct dentry *dentry) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_readlink (dentry); + return 0; } static inline int security_inode_follow_link (struct dentry *dentry, struct nameidata *nd) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_follow_link (dentry, nd); + return 0; } static inline int security_inode_permission (struct inode *inode, int mask, struct nameidata *nd) { - if (unlikely (IS_PRIVATE (inode))) - return 0; - return security_ops->inode_permission (inode, mask, nd); + return 0; } static inline int security_inode_setattr (struct dentry *dentry, struct iattr *attr) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_setattr (dentry, attr); + return 0; } static inline int security_inode_getattr (struct vfsmount *mnt, struct dentry *dentry) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_getattr (mnt, dentry); + return 0; } static inline void security_inode_delete (struct inode *inode) -{ - if (unlikely (IS_PRIVATE (inode))) - return; - security_ops->inode_delete (inode); -} +{ } static inline int security_inode_setxattr (struct dentry *dentry, char *name, void *value, size_t size, int flags) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_setxattr (dentry, name, value, size, flags); + return cap_inode_setxattr(dentry, name, value, size, flags); } static inline void security_inode_post_setxattr (struct dentry *dentry, char *name, - void *value, size_t size, int flags) -{ - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return; - security_ops->inode_post_setxattr (dentry, name, value, size, flags); -} + void *value, size_t size, int flags) +{ } static inline int security_inode_getxattr (struct dentry *dentry, char *name) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_getxattr (dentry, name); + return 0; } static inline int security_inode_listxattr (struct dentry *dentry) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_listxattr (dentry); + return 0; } static inline int security_inode_removexattr (struct dentry *dentry, char *name) { - if (unlikely (IS_PRIVATE (dentry->d_inode))) - return 0; - return security_ops->inode_removexattr (dentry, name); + return cap_inode_removexattr(dentry, name); +} + +static inline int security_inode_need_killpriv(struct dentry *dentry) +{ + return cap_inode_need_killpriv(dentry); +} + +static inline int security_inode_killpriv(struct dentry *dentry) +{ + return cap_inode_killpriv(dentry); } -static inline const char *security_inode_xattr_getsuffix(void) +static inline const char *security_inode_xattr_getsuffix (void) { - return security_ops->inode_xattr_getsuffix(); + return NULL ; } static inline int security_inode_getsecurity(const struct inode *inode, const char *name, void *buffer, size_t size, int err) { - if (unlikely (IS_PRIVATE (inode))) - return 0; - return security_ops->inode_getsecurity(inode, name, buffer, size, err); + return -EOPNOTSUPP; } static inline int security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags) { - if (unlikely (IS_PRIVATE (inode))) - return 0; - return security_ops->inode_setsecurity(inode, name, value, size, flags); + return -EOPNOTSUPP; } static inline int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size) { - if (unlikely (IS_PRIVATE (inode))) - return 0; - return security_ops->inode_listsecurity(inode, buffer, buffer_size); + return 0; } static inline int security_file_permission (struct file *file, int mask) { - return security_ops->file_permission (file, mask); + return 0; } static inline int security_file_alloc (struct file *file) { - return security_ops->file_alloc_security (file); + return 0; } static inline void security_file_free (struct file *file) -{ - security_ops->file_free_security (file); -} +{ } static inline int security_file_ioctl (struct file *file, unsigned int cmd, unsigned long arg) { - return security_ops->file_ioctl (file, cmd, arg); + return 0; } static inline int security_file_mmap (struct file *file, unsigned long reqprot, @@ -1825,151 +1968,151 @@ static inline int security_file_mmap (struct file *file, unsigned long reqprot, unsigned long addr, unsigned long addr_only) { - return security_ops->file_mmap (file, reqprot, prot, flags, addr, - addr_only); + return 0; } static inline int security_file_mprotect (struct vm_area_struct *vma, unsigned long reqprot, unsigned long prot) { - return security_ops->file_mprotect (vma, reqprot, prot); + return 0; } static inline int security_file_lock (struct file *file, unsigned int cmd) { - return security_ops->file_lock (file, cmd); + return 0; } static inline int security_file_fcntl (struct file *file, unsigned int cmd, unsigned long arg) { - return security_ops->file_fcntl (file, cmd, arg); + return 0; } static inline int security_file_set_fowner (struct file *file) { - return security_ops->file_set_fowner (file); + return 0; } static inline int security_file_send_sigiotask (struct task_struct *tsk, struct fown_struct *fown, int sig) { - return security_ops->file_send_sigiotask (tsk, fown, sig); + return 0; } static inline int security_file_receive (struct file *file) { - return security_ops->file_receive (file); + return 0; +} + +static inline int security_dentry_open (struct file *file) +{ + return 0; } static inline int security_task_create (unsigned long clone_flags) { - return security_ops->task_create (clone_flags); + return 0; } static inline int security_task_alloc (struct task_struct *p) { - return security_ops->task_alloc_security (p); + return 0; } static inline void security_task_free (struct task_struct *p) -{ - security_ops->task_free_security (p); -} +{ } static inline int security_task_setuid (uid_t id0, uid_t id1, uid_t id2, int flags) { - return security_ops->task_setuid (id0, id1, id2, flags); + return 0; } static inline int security_task_post_setuid (uid_t old_ruid, uid_t old_euid, uid_t old_suid, int flags) { - return security_ops->task_post_setuid (old_ruid, old_euid, old_suid, flags); + return cap_task_post_setuid (old_ruid, old_euid, old_suid, flags); } static inline int security_task_setgid (gid_t id0, gid_t id1, gid_t id2, int flags) { - return security_ops->task_setgid (id0, id1, id2, flags); + return 0; } static inline int security_task_setpgid (struct task_struct *p, pid_t pgid) { - return security_ops->task_setpgid (p, pgid); + return 0; } static inline int security_task_getpgid (struct task_struct *p) { - return security_ops->task_getpgid (p); + return 0; } static inline int security_task_getsid (struct task_struct *p) { - return security_ops->task_getsid (p); + return 0; } static inline void security_task_getsecid (struct task_struct *p, u32 *secid) -{ - security_ops->task_getsecid (p, secid); -} +{ } static inline int security_task_setgroups (struct group_info *group_info) { - return security_ops->task_setgroups (group_info); + return 0; } static inline int security_task_setnice (struct task_struct *p, int nice) { - return security_ops->task_setnice (p, nice); + return cap_task_setnice(p, nice); } static inline int security_task_setioprio (struct task_struct *p, int ioprio) { - return security_ops->task_setioprio (p, ioprio); + return cap_task_setioprio(p, ioprio); } static inline int security_task_getioprio (struct task_struct *p) { - return security_ops->task_getioprio (p); + return 0; } static inline int security_task_setrlimit (unsigned int resource, struct rlimit *new_rlim) { - return security_ops->task_setrlimit (resource, new_rlim); + return 0; } static inline int security_task_setscheduler (struct task_struct *p, int policy, struct sched_param *lp) { - return security_ops->task_setscheduler (p, policy, lp); + return cap_task_setscheduler(p, policy, lp); } static inline int security_task_getscheduler (struct task_struct *p) { - return security_ops->task_getscheduler (p); + return 0; } static inline int security_task_movememory (struct task_struct *p) { - return security_ops->task_movememory (p); + return 0; } static inline int security_task_kill (struct task_struct *p, struct siginfo *info, int sig, u32 secid) { - return security_ops->task_kill (p, info, sig, secid); + return cap_task_kill(p, info, sig, secid); } static inline int security_task_wait (struct task_struct *p) { - return security_ops->task_wait (p); + return 0; } static inline int security_task_prctl (int option, unsigned long arg2, @@ -1977,60 +2120,54 @@ static inline int security_task_prctl (int option, unsigned long arg2, unsigned long arg4, unsigned long arg5) { - return security_ops->task_prctl (option, arg2, arg3, arg4, arg5); + return 0; } static inline void security_task_reparent_to_init (struct task_struct *p) { - security_ops->task_reparent_to_init (p); + cap_task_reparent_to_init (p); } static inline void security_task_to_inode(struct task_struct *p, struct inode *inode) -{ - security_ops->task_to_inode(p, inode); -} +{ } static inline int security_ipc_permission (struct kern_ipc_perm *ipcp, short flag) { - return security_ops->ipc_permission (ipcp, flag); + return 0; } static inline int security_msg_msg_alloc (struct msg_msg * msg) { - return security_ops->msg_msg_alloc_security (msg); + return 0; } static inline void security_msg_msg_free (struct msg_msg * msg) -{ - security_ops->msg_msg_free_security(msg); -} +{ } static inline int security_msg_queue_alloc (struct msg_queue *msq) { - return security_ops->msg_queue_alloc_security (msq); + return 0; } static inline void security_msg_queue_free (struct msg_queue *msq) -{ - security_ops->msg_queue_free_security (msq); -} +{ } static inline int security_msg_queue_associate (struct msg_queue * msq, int msqflg) { - return security_ops->msg_queue_associate (msq, msqflg); + return 0; } static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd) { - return security_ops->msg_queue_msgctl (msq, cmd); + return 0; } static inline int security_msg_queue_msgsnd (struct msg_queue * msq, struct msg_msg * msg, int msqflg) { - return security_ops->msg_queue_msgsnd (msq, msg, msqflg); + return 0; } static inline int security_msg_queue_msgrcv (struct msg_queue * msq, @@ -2038,960 +2175,161 @@ static inline int security_msg_queue_msgrcv (struct msg_queue * msq, struct task_struct * target, long type, int mode) { - return security_ops->msg_queue_msgrcv (msq, msg, target, type, mode); + return 0; } static inline int security_shm_alloc (struct shmid_kernel *shp) { - return security_ops->shm_alloc_security (shp); + return 0; } static inline void security_shm_free (struct shmid_kernel *shp) -{ - security_ops->shm_free_security (shp); -} +{ } static inline int security_shm_associate (struct shmid_kernel * shp, int shmflg) { - return security_ops->shm_associate(shp, shmflg); + return 0; } static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd) { - return security_ops->shm_shmctl (shp, cmd); + return 0; } static inline int security_shm_shmat (struct shmid_kernel * shp, char __user *shmaddr, int shmflg) { - return security_ops->shm_shmat(shp, shmaddr, shmflg); + return 0; } static inline int security_sem_alloc (struct sem_array *sma) { - return security_ops->sem_alloc_security (sma); + return 0; } static inline void security_sem_free (struct sem_array *sma) -{ - security_ops->sem_free_security (sma); -} +{ } static inline int security_sem_associate (struct sem_array * sma, int semflg) { - return security_ops->sem_associate (sma, semflg); + return 0; } static inline int security_sem_semctl (struct sem_array * sma, int cmd) { - return security_ops->sem_semctl(sma, cmd); + return 0; } static inline int security_sem_semop (struct sem_array * sma, struct sembuf * sops, unsigned nsops, int alter) { - return security_ops->sem_semop(sma, sops, nsops, alter); + return 0; } static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode) -{ - if (unlikely (inode && IS_PRIVATE (inode))) - return; - security_ops->d_instantiate (dentry, inode); -} +{ } static inline int security_getprocattr(struct task_struct *p, char *name, char **value) { - return security_ops->getprocattr(p, name, value); + return -EINVAL; } static inline int security_setprocattr(struct task_struct *p, char *name, void *value, size_t size) { - return security_ops->setprocattr(p, name, value, size); + return -EINVAL; } -static inline int security_netlink_send(struct sock *sk, struct sk_buff * skb) +static inline int security_netlink_send (struct sock *sk, struct sk_buff *skb) { - return security_ops->netlink_send(sk, skb); + return cap_netlink_send (sk, skb); } -static inline int security_netlink_recv(struct sk_buff * skb, int cap) +static inline int security_netlink_recv (struct sk_buff *skb, int cap) { - return security_ops->netlink_recv(skb, cap); + return cap_netlink_recv (skb, cap); } -static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) +static inline struct dentry *securityfs_create_dir(const char *name, + struct dentry *parent) { - return security_ops->secid_to_secctx(secid, secdata, seclen); + return ERR_PTR(-ENODEV); } -static inline void security_release_secctx(char *secdata, u32 seclen) +static inline struct dentry *securityfs_create_file(const char *name, + mode_t mode, + struct dentry *parent, + void *data, + struct file_operations *fops) { - return security_ops->release_secctx(secdata, seclen); + return ERR_PTR(-ENODEV); } -/* prototypes */ -extern int security_init (void); -extern int register_security (struct security_operations *ops); -extern int unregister_security (struct security_operations *ops); -extern int mod_reg_security (const char *name, struct security_operations *ops); -extern int mod_unreg_security (const char *name, struct security_operations *ops); -extern struct dentry *securityfs_create_file(const char *name, mode_t mode, - struct dentry *parent, void *data, - const struct file_operations *fops); -extern struct dentry *securityfs_create_dir(const char *name, struct dentry *parent); -extern void securityfs_remove(struct dentry *dentry); +static inline void securityfs_remove(struct dentry *dentry) +{ +} +static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) +{ + return -EOPNOTSUPP; +} -#else /* CONFIG_SECURITY */ +static inline void security_release_secctx(char *secdata, u32 seclen) +{ +} +#endif /* CONFIG_SECURITY */ -/* - * This is the default capabilities functionality. Most of these functions - * are just stubbed out, but a few must call the proper capable code. - */ +#ifdef CONFIG_SECURITY_NETWORK -static inline int security_init(void) +int security_unix_stream_connect(struct socket *sock, struct socket *other, + struct sock *newsk); +int security_unix_may_send(struct socket *sock, struct socket *other); +int security_socket_create(int family, int type, int protocol, int kern); +int security_socket_post_create(struct socket *sock, int family, + int type, int protocol, int kern); +int security_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen); +int security_socket_connect(struct socket *sock, struct sockaddr *address, int addrlen); +int security_socket_listen(struct socket *sock, int backlog); +int security_socket_accept(struct socket *sock, struct socket *newsock); +void security_socket_post_accept(struct socket *sock, struct socket *newsock); +int security_socket_sendmsg(struct socket *sock, struct msghdr *msg, int size); +int security_socket_recvmsg(struct socket *sock, struct msghdr *msg, + int size, int flags); +int security_socket_getsockname(struct socket *sock); +int security_socket_getpeername(struct socket *sock); +int security_socket_getsockopt(struct socket *sock, int level, int optname); +int security_socket_setsockopt(struct socket *sock, int level, int optname); +int security_socket_shutdown(struct socket *sock, int how); +int security_sock_rcv_skb(struct sock *sk, struct sk_buff *skb); +int security_socket_getpeersec_stream(struct socket *sock, char __user *optval, + int __user *optlen, unsigned len); +int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid); +int security_sk_alloc(struct sock *sk, int family, gfp_t priority); +void security_sk_free(struct sock *sk); +void security_sk_clone(const struct sock *sk, struct sock *newsk); +void security_sk_classify_flow(struct sock *sk, struct flowi *fl); +void security_req_classify_flow(const struct request_sock *req, struct flowi *fl); +void security_sock_graft(struct sock*sk, struct socket *parent); +int security_inet_conn_request(struct sock *sk, + struct sk_buff *skb, struct request_sock *req); +void security_inet_csk_clone(struct sock *newsk, + const struct request_sock *req); +void security_inet_conn_established(struct sock *sk, + struct sk_buff *skb); + +#else /* CONFIG_SECURITY_NETWORK */ +static inline int security_unix_stream_connect(struct socket * sock, + struct socket * other, + struct sock * newsk) { return 0; } -static inline int security_ptrace (struct task_struct *parent, struct task_struct * child) +static inline int security_unix_may_send(struct socket * sock, + struct socket * other) { - return cap_ptrace (parent, child); -} - -static inline int security_capget (struct task_struct *target, - kernel_cap_t *effective, - kernel_cap_t *inheritable, - kernel_cap_t *permitted) -{ - return cap_capget (target, effective, inheritable, permitted); -} - -static inline int security_capset_check (struct task_struct *target, - kernel_cap_t *effective, - kernel_cap_t *inheritable, - kernel_cap_t *permitted) -{ - return cap_capset_check (target, effective, inheritable, permitted); -} - -static inline void security_capset_set (struct task_struct *target, - kernel_cap_t *effective, - kernel_cap_t *inheritable, - kernel_cap_t *permitted) -{ - cap_capset_set (target, effective, inheritable, permitted); -} - -static inline int security_capable(struct task_struct *tsk, int cap) -{ - return cap_capable(tsk, cap); -} - -static inline int security_acct (struct file *file) -{ - return 0; -} - -static inline int security_sysctl(struct ctl_table *table, int op) -{ - return 0; -} - -static inline int security_quotactl (int cmds, int type, int id, - struct super_block * sb) -{ - return 0; -} - -static inline int security_quota_on (struct dentry * dentry) -{ - return 0; -} - -static inline int security_syslog(int type) -{ - return cap_syslog(type); -} - -static inline int security_settime(struct timespec *ts, struct timezone *tz) -{ - return cap_settime(ts, tz); -} - -static inline int security_vm_enough_memory(long pages) -{ - return cap_vm_enough_memory(current->mm, pages); -} - -static inline int security_vm_enough_memory_mm(struct mm_struct *mm, long pages) -{ - return cap_vm_enough_memory(mm, pages); -} - -static inline int security_bprm_alloc (struct linux_binprm *bprm) -{ - return 0; -} - -static inline void security_bprm_free (struct linux_binprm *bprm) -{ } - -static inline void security_bprm_apply_creds (struct linux_binprm *bprm, int unsafe) -{ - cap_bprm_apply_creds (bprm, unsafe); -} - -static inline void security_bprm_post_apply_creds (struct linux_binprm *bprm) -{ - return; -} - -static inline int security_bprm_set (struct linux_binprm *bprm) -{ - return cap_bprm_set_security (bprm); -} - -static inline int security_bprm_check (struct linux_binprm *bprm) -{ - return 0; -} - -static inline int security_bprm_secureexec (struct linux_binprm *bprm) -{ - return cap_bprm_secureexec(bprm); -} - -static inline int security_sb_alloc (struct super_block *sb) -{ - return 0; -} - -static inline void security_sb_free (struct super_block *sb) -{ } - -static inline int security_sb_copy_data (struct file_system_type *type, - void *orig, void *copy) -{ - return 0; -} - -static inline int security_sb_kern_mount (struct super_block *sb, void *data) -{ - return 0; -} - -static inline int security_sb_statfs (struct dentry *dentry) -{ - return 0; -} - -static inline int security_sb_mount (char *dev_name, struct nameidata *nd, - char *type, unsigned long flags, - void *data) -{ - return 0; -} - -static inline int security_sb_check_sb (struct vfsmount *mnt, - struct nameidata *nd) -{ - return 0; -} - -static inline int security_sb_umount (struct vfsmount *mnt, int flags) -{ - return 0; -} - -static inline void security_sb_umount_close (struct vfsmount *mnt) -{ } - -static inline void security_sb_umount_busy (struct vfsmount *mnt) -{ } - -static inline void security_sb_post_remount (struct vfsmount *mnt, - unsigned long flags, void *data) -{ } - -static inline void security_sb_post_mountroot (void) -{ } - -static inline void security_sb_post_addmount (struct vfsmount *mnt, - struct nameidata *mountpoint_nd) -{ } - -static inline int security_sb_pivotroot (struct nameidata *old_nd, - struct nameidata *new_nd) -{ - return 0; -} - -static inline void security_sb_post_pivotroot (struct nameidata *old_nd, - struct nameidata *new_nd) -{ } - -static inline int security_inode_alloc (struct inode *inode) -{ - return 0; -} - -static inline void security_inode_free (struct inode *inode) -{ } - -static inline int security_inode_init_security (struct inode *inode, - struct inode *dir, - char **name, - void **value, - size_t *len) -{ - return -EOPNOTSUPP; -} - -static inline int security_inode_create (struct inode *dir, - struct dentry *dentry, - int mode) -{ - return 0; -} - -static inline int security_inode_link (struct dentry *old_dentry, - struct inode *dir, - struct dentry *new_dentry) -{ - return 0; -} - -static inline int security_inode_unlink (struct inode *dir, - struct dentry *dentry) -{ - return 0; -} - -static inline int security_inode_symlink (struct inode *dir, - struct dentry *dentry, - const char *old_name) -{ - return 0; -} - -static inline int security_inode_mkdir (struct inode *dir, - struct dentry *dentry, - int mode) -{ - return 0; -} - -static inline int security_inode_rmdir (struct inode *dir, - struct dentry *dentry) -{ - return 0; -} - -static inline int security_inode_mknod (struct inode *dir, - struct dentry *dentry, - int mode, dev_t dev) -{ - return 0; -} - -static inline int security_inode_rename (struct inode *old_dir, - struct dentry *old_dentry, - struct inode *new_dir, - struct dentry *new_dentry) -{ - return 0; -} - -static inline int security_inode_readlink (struct dentry *dentry) -{ - return 0; -} - -static inline int security_inode_follow_link (struct dentry *dentry, - struct nameidata *nd) -{ - return 0; -} - -static inline int security_inode_permission (struct inode *inode, int mask, - struct nameidata *nd) -{ - return 0; -} - -static inline int security_inode_setattr (struct dentry *dentry, - struct iattr *attr) -{ - return 0; -} - -static inline int security_inode_getattr (struct vfsmount *mnt, - struct dentry *dentry) -{ - return 0; -} - -static inline void security_inode_delete (struct inode *inode) -{ } - -static inline int security_inode_setxattr (struct dentry *dentry, char *name, - void *value, size_t size, int flags) -{ - return cap_inode_setxattr(dentry, name, value, size, flags); -} - -static inline void security_inode_post_setxattr (struct dentry *dentry, char *name, - void *value, size_t size, int flags) -{ } - -static inline int security_inode_getxattr (struct dentry *dentry, char *name) -{ - return 0; -} - -static inline int security_inode_listxattr (struct dentry *dentry) -{ - return 0; -} - -static inline int security_inode_removexattr (struct dentry *dentry, char *name) -{ - return cap_inode_removexattr(dentry, name); -} - -static inline const char *security_inode_xattr_getsuffix (void) -{ - return NULL ; -} - -static inline int security_inode_getsecurity(const struct inode *inode, const char *name, void *buffer, size_t size, int err) -{ - return -EOPNOTSUPP; -} - -static inline int security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags) -{ - return -EOPNOTSUPP; -} - -static inline int security_inode_listsecurity(struct inode *inode, char *buffer, size_t buffer_size) -{ - return 0; -} - -static inline int security_file_permission (struct file *file, int mask) -{ - return 0; -} - -static inline int security_file_alloc (struct file *file) -{ - return 0; -} - -static inline void security_file_free (struct file *file) -{ } - -static inline int security_file_ioctl (struct file *file, unsigned int cmd, - unsigned long arg) -{ - return 0; -} - -static inline int security_file_mmap (struct file *file, unsigned long reqprot, - unsigned long prot, - unsigned long flags, - unsigned long addr, - unsigned long addr_only) -{ - return 0; -} - -static inline int security_file_mprotect (struct vm_area_struct *vma, - unsigned long reqprot, - unsigned long prot) -{ - return 0; -} - -static inline int security_file_lock (struct file *file, unsigned int cmd) -{ - return 0; -} - -static inline int security_file_fcntl (struct file *file, unsigned int cmd, - unsigned long arg) -{ - return 0; -} - -static inline int security_file_set_fowner (struct file *file) -{ - return 0; -} - -static inline int security_file_send_sigiotask (struct task_struct *tsk, - struct fown_struct *fown, - int sig) -{ - return 0; -} - -static inline int security_file_receive (struct file *file) -{ - return 0; -} - -static inline int security_task_create (unsigned long clone_flags) -{ - return 0; -} - -static inline int security_task_alloc (struct task_struct *p) -{ - return 0; -} - -static inline void security_task_free (struct task_struct *p) -{ } - -static inline int security_task_setuid (uid_t id0, uid_t id1, uid_t id2, - int flags) -{ - return 0; -} - -static inline int security_task_post_setuid (uid_t old_ruid, uid_t old_euid, - uid_t old_suid, int flags) -{ - return cap_task_post_setuid (old_ruid, old_euid, old_suid, flags); -} - -static inline int security_task_setgid (gid_t id0, gid_t id1, gid_t id2, - int flags) -{ - return 0; -} - -static inline int security_task_setpgid (struct task_struct *p, pid_t pgid) -{ - return 0; -} - -static inline int security_task_getpgid (struct task_struct *p) -{ - return 0; -} - -static inline int security_task_getsid (struct task_struct *p) -{ - return 0; -} - -static inline void security_task_getsecid (struct task_struct *p, u32 *secid) -{ } - -static inline int security_task_setgroups (struct group_info *group_info) -{ - return 0; -} - -static inline int security_task_setnice (struct task_struct *p, int nice) -{ - return 0; -} - -static inline int security_task_setioprio (struct task_struct *p, int ioprio) -{ - return 0; -} - -static inline int security_task_getioprio (struct task_struct *p) -{ - return 0; -} - -static inline int security_task_setrlimit (unsigned int resource, - struct rlimit *new_rlim) -{ - return 0; -} - -static inline int security_task_setscheduler (struct task_struct *p, - int policy, - struct sched_param *lp) -{ - return 0; -} - -static inline int security_task_getscheduler (struct task_struct *p) -{ - return 0; -} - -static inline int security_task_movememory (struct task_struct *p) -{ - return 0; -} - -static inline int security_task_kill (struct task_struct *p, - struct siginfo *info, int sig, - u32 secid) -{ - return 0; -} - -static inline int security_task_wait (struct task_struct *p) -{ - return 0; -} - -static inline int security_task_prctl (int option, unsigned long arg2, - unsigned long arg3, - unsigned long arg4, - unsigned long arg5) -{ - return 0; -} - -static inline void security_task_reparent_to_init (struct task_struct *p) -{ - cap_task_reparent_to_init (p); -} - -static inline void security_task_to_inode(struct task_struct *p, struct inode *inode) -{ } - -static inline int security_ipc_permission (struct kern_ipc_perm *ipcp, - short flag) -{ - return 0; -} - -static inline int security_msg_msg_alloc (struct msg_msg * msg) -{ - return 0; -} - -static inline void security_msg_msg_free (struct msg_msg * msg) -{ } - -static inline int security_msg_queue_alloc (struct msg_queue *msq) -{ - return 0; -} - -static inline void security_msg_queue_free (struct msg_queue *msq) -{ } - -static inline int security_msg_queue_associate (struct msg_queue * msq, - int msqflg) -{ - return 0; -} - -static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd) -{ - return 0; -} - -static inline int security_msg_queue_msgsnd (struct msg_queue * msq, - struct msg_msg * msg, int msqflg) -{ - return 0; -} - -static inline int security_msg_queue_msgrcv (struct msg_queue * msq, - struct msg_msg * msg, - struct task_struct * target, - long type, int mode) -{ - return 0; -} - -static inline int security_shm_alloc (struct shmid_kernel *shp) -{ - return 0; -} - -static inline void security_shm_free (struct shmid_kernel *shp) -{ } - -static inline int security_shm_associate (struct shmid_kernel * shp, - int shmflg) -{ - return 0; -} - -static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd) -{ - return 0; -} - -static inline int security_shm_shmat (struct shmid_kernel * shp, - char __user *shmaddr, int shmflg) -{ - return 0; -} - -static inline int security_sem_alloc (struct sem_array *sma) -{ - return 0; -} - -static inline void security_sem_free (struct sem_array *sma) -{ } - -static inline int security_sem_associate (struct sem_array * sma, int semflg) -{ - return 0; -} - -static inline int security_sem_semctl (struct sem_array * sma, int cmd) -{ - return 0; -} - -static inline int security_sem_semop (struct sem_array * sma, - struct sembuf * sops, unsigned nsops, - int alter) -{ - return 0; -} - -static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode) -{ } - -static inline int security_getprocattr(struct task_struct *p, char *name, char **value) -{ - return -EINVAL; -} - -static inline int security_setprocattr(struct task_struct *p, char *name, void *value, size_t size) -{ - return -EINVAL; -} - -static inline int security_netlink_send (struct sock *sk, struct sk_buff *skb) -{ - return cap_netlink_send (sk, skb); -} - -static inline int security_netlink_recv (struct sk_buff *skb, int cap) -{ - return cap_netlink_recv (skb, cap); -} - -static inline struct dentry *securityfs_create_dir(const char *name, - struct dentry *parent) -{ - return ERR_PTR(-ENODEV); -} - -static inline struct dentry *securityfs_create_file(const char *name, - mode_t mode, - struct dentry *parent, - void *data, - struct file_operations *fops) -{ - return ERR_PTR(-ENODEV); -} - -static inline void securityfs_remove(struct dentry *dentry) -{ -} - -static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) -{ - return -EOPNOTSUPP; -} - -static inline void security_release_secctx(char *secdata, u32 seclen) -{ -} -#endif /* CONFIG_SECURITY */ - -#ifdef CONFIG_SECURITY_NETWORK -static inline int security_unix_stream_connect(struct socket * sock, - struct socket * other, - struct sock * newsk) -{ - return security_ops->unix_stream_connect(sock, other, newsk); -} - - -static inline int security_unix_may_send(struct socket * sock, - struct socket * other) -{ - return security_ops->unix_may_send(sock, other); -} - -static inline int security_socket_create (int family, int type, - int protocol, int kern) -{ - return security_ops->socket_create(family, type, protocol, kern); -} - -static inline int security_socket_post_create(struct socket * sock, - int family, - int type, - int protocol, int kern) -{ - return security_ops->socket_post_create(sock, family, type, - protocol, kern); -} - -static inline int security_socket_bind(struct socket * sock, - struct sockaddr * address, - int addrlen) -{ - return security_ops->socket_bind(sock, address, addrlen); -} - -static inline int security_socket_connect(struct socket * sock, - struct sockaddr * address, - int addrlen) -{ - return security_ops->socket_connect(sock, address, addrlen); -} - -static inline int security_socket_listen(struct socket * sock, int backlog) -{ - return security_ops->socket_listen(sock, backlog); -} - -static inline int security_socket_accept(struct socket * sock, - struct socket * newsock) -{ - return security_ops->socket_accept(sock, newsock); -} - -static inline void security_socket_post_accept(struct socket * sock, - struct socket * newsock) -{ - security_ops->socket_post_accept(sock, newsock); -} - -static inline int security_socket_sendmsg(struct socket * sock, - struct msghdr * msg, int size) -{ - return security_ops->socket_sendmsg(sock, msg, size); -} - -static inline int security_socket_recvmsg(struct socket * sock, - struct msghdr * msg, int size, - int flags) -{ - return security_ops->socket_recvmsg(sock, msg, size, flags); -} - -static inline int security_socket_getsockname(struct socket * sock) -{ - return security_ops->socket_getsockname(sock); -} - -static inline int security_socket_getpeername(struct socket * sock) -{ - return security_ops->socket_getpeername(sock); -} - -static inline int security_socket_getsockopt(struct socket * sock, - int level, int optname) -{ - return security_ops->socket_getsockopt(sock, level, optname); -} - -static inline int security_socket_setsockopt(struct socket * sock, - int level, int optname) -{ - return security_ops->socket_setsockopt(sock, level, optname); -} - -static inline int security_socket_shutdown(struct socket * sock, int how) -{ - return security_ops->socket_shutdown(sock, how); -} - -static inline int security_sock_rcv_skb (struct sock * sk, - struct sk_buff * skb) -{ - return security_ops->socket_sock_rcv_skb (sk, skb); -} - -static inline int security_socket_getpeersec_stream(struct socket *sock, char __user *optval, - int __user *optlen, unsigned len) -{ - return security_ops->socket_getpeersec_stream(sock, optval, optlen, len); -} - -static inline int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) -{ - return security_ops->socket_getpeersec_dgram(sock, skb, secid); -} - -static inline int security_sk_alloc(struct sock *sk, int family, gfp_t priority) -{ - return security_ops->sk_alloc_security(sk, family, priority); -} - -static inline void security_sk_free(struct sock *sk) -{ - return security_ops->sk_free_security(sk); -} - -static inline void security_sk_clone(const struct sock *sk, struct sock *newsk) -{ - return security_ops->sk_clone_security(sk, newsk); -} - -static inline void security_sk_classify_flow(struct sock *sk, struct flowi *fl) -{ - security_ops->sk_getsecid(sk, &fl->secid); -} - -static inline void security_req_classify_flow(const struct request_sock *req, struct flowi *fl) -{ - security_ops->req_classify_flow(req, fl); -} - -static inline void security_sock_graft(struct sock* sk, struct socket *parent) -{ - security_ops->sock_graft(sk, parent); -} - -static inline int security_inet_conn_request(struct sock *sk, - struct sk_buff *skb, struct request_sock *req) -{ - return security_ops->inet_conn_request(sk, skb, req); -} - -static inline void security_inet_csk_clone(struct sock *newsk, - const struct request_sock *req) -{ - security_ops->inet_csk_clone(newsk, req); -} - -static inline void security_inet_conn_established(struct sock *sk, - struct sk_buff *skb) -{ - security_ops->inet_conn_established(sk, skb); -} -#else /* CONFIG_SECURITY_NETWORK */ -static inline int security_unix_stream_connect(struct socket * sock, - struct socket * other, - struct sock * newsk) -{ - return 0; -} - -static inline int security_unix_may_send(struct socket * sock, - struct socket * other) -{ - return 0; + return 0; } static inline int security_socket_create (int family, int type, @@ -3137,77 +2475,24 @@ static inline void security_inet_conn_established(struct sock *sk, #endif /* CONFIG_SECURITY_NETWORK */ #ifdef CONFIG_SECURITY_NETWORK_XFRM -static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm_user_sec_ctx *sec_ctx) -{ - return security_ops->xfrm_policy_alloc_security(xp, sec_ctx); -} - -static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new) -{ - return security_ops->xfrm_policy_clone_security(old, new); -} - -static inline void security_xfrm_policy_free(struct xfrm_policy *xp) -{ - security_ops->xfrm_policy_free_security(xp); -} - -static inline int security_xfrm_policy_delete(struct xfrm_policy *xp) -{ - return security_ops->xfrm_policy_delete_security(xp); -} - -static inline int security_xfrm_state_alloc(struct xfrm_state *x, - struct xfrm_user_sec_ctx *sec_ctx) -{ - return security_ops->xfrm_state_alloc_security(x, sec_ctx, 0); -} - -static inline int security_xfrm_state_alloc_acquire(struct xfrm_state *x, - struct xfrm_sec_ctx *polsec, u32 secid) -{ - if (!polsec) - return 0; - /* - * We want the context to be taken from secid which is usually - * from the sock. - */ - return security_ops->xfrm_state_alloc_security(x, NULL, secid); -} - -static inline int security_xfrm_state_delete(struct xfrm_state *x) -{ - return security_ops->xfrm_state_delete_security(x); -} - -static inline void security_xfrm_state_free(struct xfrm_state *x) -{ - security_ops->xfrm_state_free_security(x); -} - -static inline int security_xfrm_policy_lookup(struct xfrm_policy *xp, u32 fl_secid, u8 dir) -{ - return security_ops->xfrm_policy_lookup(xp, fl_secid, dir); -} - -static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x, - struct xfrm_policy *xp, struct flowi *fl) -{ - return security_ops->xfrm_state_pol_flow_match(x, xp, fl); -} - -static inline int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid) -{ - return security_ops->xfrm_decode_session(skb, secid, 1); -} -static inline void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl) -{ - int rc = security_ops->xfrm_decode_session(skb, &fl->secid, 0); +int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm_user_sec_ctx *sec_ctx); +int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new); +void security_xfrm_policy_free(struct xfrm_policy *xp); +int security_xfrm_policy_delete(struct xfrm_policy *xp); +int security_xfrm_state_alloc(struct xfrm_state *x, struct xfrm_user_sec_ctx *sec_ctx); +int security_xfrm_state_alloc_acquire(struct xfrm_state *x, + struct xfrm_sec_ctx *polsec, u32 secid); +int security_xfrm_state_delete(struct xfrm_state *x); +void security_xfrm_state_free(struct xfrm_state *x); +int security_xfrm_policy_lookup(struct xfrm_policy *xp, u32 fl_secid, u8 dir); +int security_xfrm_state_pol_flow_match(struct xfrm_state *x, + struct xfrm_policy *xp, struct flowi *fl); +int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid); +void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl); - BUG_ON(rc); -} #else /* CONFIG_SECURITY_NETWORK_XFRM */ + static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm_user_sec_ctx *sec_ctx) { return 0; @@ -3272,24 +2557,11 @@ static inline void security_skb_classify_flow(struct sk_buff *skb, struct flowi #ifdef CONFIG_KEYS #ifdef CONFIG_SECURITY -static inline int security_key_alloc(struct key *key, - struct task_struct *tsk, - unsigned long flags) -{ - return security_ops->key_alloc(key, tsk, flags); -} - -static inline void security_key_free(struct key *key) -{ - security_ops->key_free(key); -} -static inline int security_key_permission(key_ref_t key_ref, - struct task_struct *context, - key_perm_t perm) -{ - return security_ops->key_permission(key_ref, context, perm); -} +int security_key_alloc(struct key *key, struct task_struct *tsk, unsigned long flags); +void security_key_free(struct key *key); +int security_key_permission(key_ref_t key_ref, + struct task_struct *context, key_perm_t perm); #else