Date: Wed, 5 Jul 2006 17:16:19 GMT From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 100642 for review Message-ID: <200607051716.k65HGJ5o032636@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=100642 Change 100642 by rwatson@rwatson_zoo on 2006/07/05 17:16:17 Start resort of entry points by object type. No renaming yet. Affected files ... .. //depot/projects/trustedbsd/mac2/sys/sys/mac_policy.h#3 edit Differences ... ==== //depot/projects/trustedbsd/mac2/sys/sys/mac_policy.h#3 (text+ko) ==== @@ -72,6 +72,9 @@ * inpcb > socket > mbuf * bpfdesc > ifnet > mbuf * * > cred + * + * It may be desirable also to consider some subsystems as "objects", such + * as system, netinet, etc. */ struct acl; struct bpf_d; @@ -104,6 +107,11 @@ /* * Policy module operations. + * + * XXXRW: There should probably be separate init/attach/detach/destroy + * operations so that policies can perform sleeping memory allocation before + * attaching, which occurs with locks held. We might also want to allow + * attach to fail. */ typedef void (*mpo_destroy_t)(struct mac_policy_conf *mpc); typedef void (*mpo_init_t)(struct mac_policy_conf *mpc); @@ -121,103 +129,28 @@ typedef void (*mpo_placeholder_t)(void); /* - * Label operations. Initialize label storage, destroy label - * storage, recycle for re-use without init/destroy, copy a label to - * initialized storage, and externalize/internalize from/to - * initialized storage. + * Object: struct bpfdesc (BPF descriptor) */ typedef void (*mpo_init_bpfdesc_label_t)(struct label *label); -typedef void (*mpo_init_cred_label_t)(struct label *label); -typedef void (*mpo_init_devfsdirent_label_t)(struct label *label); -typedef void (*mpo_init_ifnet_label_t)(struct label *label); -typedef int (*mpo_init_inpcb_label_t)(struct label *label, int flag); -typedef void (*mpo_init_sysv_msgmsg_label_t)(struct label *label); -typedef void (*mpo_init_sysv_msgqueue_label_t)(struct label *label); -typedef void (*mpo_init_sysv_sem_label_t)(struct label *label); -typedef void (*mpo_init_sysv_shm_label_t)(struct label *label); -typedef int (*mpo_init_ipq_label_t)(struct label *label, int flag); -typedef int (*mpo_init_mbuf_label_t)(struct label *label, int flag); -typedef void (*mpo_init_mount_label_t)(struct label *label); -typedef void (*mpo_init_mount_fs_label_t)(struct label *label); -typedef int (*mpo_init_socket_label_t)(struct label *label, int flag); -typedef int (*mpo_init_socket_peer_label_t)(struct label *label, - int flag); -typedef void (*mpo_init_pipe_label_t)(struct label *label); -typedef void (*mpo_init_posix_sem_label_t)(struct label *label); -typedef void (*mpo_init_proc_label_t)(struct label *label); -typedef void (*mpo_init_vnode_label_t)(struct label *label); typedef void (*mpo_destroy_bpfdesc_label_t)(struct label *label); -typedef void (*mpo_destroy_cred_label_t)(struct label *label); -typedef void (*mpo_destroy_devfsdirent_label_t)(struct label *label); -typedef void (*mpo_destroy_ifnet_label_t)(struct label *label); -typedef void (*mpo_destroy_inpcb_label_t)(struct label *label); -typedef void (*mpo_destroy_sysv_msgmsg_label_t)(struct label *label); -typedef void (*mpo_destroy_sysv_msgqueue_label_t)(struct label *label); -typedef void (*mpo_destroy_sysv_sem_label_t)(struct label *label); -typedef void (*mpo_destroy_sysv_shm_label_t)(struct label *label); -typedef void (*mpo_destroy_ipq_label_t)(struct label *label); -typedef void (*mpo_destroy_mbuf_label_t)(struct label *label); -typedef void (*mpo_destroy_mount_label_t)(struct label *label); -typedef void (*mpo_destroy_mount_fs_label_t)(struct label *label); -typedef void (*mpo_destroy_socket_label_t)(struct label *label); -typedef void (*mpo_destroy_socket_peer_label_t)(struct label *label); -typedef void (*mpo_destroy_pipe_label_t)(struct label *label); -typedef void (*mpo_destroy_posix_sem_label_t)(struct label *label); -typedef void (*mpo_destroy_proc_label_t)(struct label *label); -typedef void (*mpo_destroy_vnode_label_t)(struct label *label); -typedef void (*mpo_cleanup_sysv_msgmsg_t)(struct label *msglabel); -typedef void (*mpo_cleanup_sysv_msgqueue_t)(struct label *msqlabel); -typedef void (*mpo_cleanup_sysv_sem_t)(struct label *semalabel); -typedef void (*mpo_cleanup_sysv_shm_t)(struct label *shmlabel); -typedef void (*mpo_copy_cred_label_t)(struct label *src, - struct label *dest); -typedef void (*mpo_copy_ifnet_label_t)(struct label *src, - struct label *dest); -typedef void (*mpo_copy_mbuf_label_t)(struct label *src, - struct label *dest); -typedef void (*mpo_copy_pipe_label_t)(struct label *src, - struct label *dest); -typedef void (*mpo_copy_socket_label_t)(struct label *src, - struct label *dest); -typedef void (*mpo_copy_vnode_label_t)(struct label *src, - struct label *dest); -typedef int (*mpo_externalize_cred_label_t)(struct label *label, - char *element_name, struct sbuf *sb, int *claimed); -typedef int (*mpo_externalize_ifnet_label_t)(struct label *label, - char *element_name, struct sbuf *sb, int *claimed); -typedef int (*mpo_externalize_pipe_label_t)(struct label *label, - char *element_name, struct sbuf *sb, int *claimed); -typedef int (*mpo_externalize_socket_label_t)(struct label *label, - char *element_name, struct sbuf *sb, int *claimed); -typedef int (*mpo_externalize_socket_peer_label_t)(struct label *label, - char *element_name, struct sbuf *sb, int *claimed); -typedef int (*mpo_externalize_vnode_label_t)(struct label *label, - char *element_name, struct sbuf *sb, int *claimed); -typedef int (*mpo_internalize_cred_label_t)(struct label *label, - char *element_name, char *element_data, int *claimed); -typedef int (*mpo_internalize_ifnet_label_t)(struct label *label, - char *element_name, char *element_data, int *claimed); -typedef int (*mpo_internalize_pipe_label_t)(struct label *label, - char *element_name, char *element_data, int *claimed); -typedef int (*mpo_internalize_socket_label_t)(struct label *label, - char *element_name, char *element_data, int *claimed); -typedef int (*mpo_internalize_vnode_label_t)(struct label *label, - char *element_name, char *element_data, int *claimed); +typedef void (*mpo_create_bpfdesc_t)(struct ucred *cred, + struct bpf_d *bpf_d, struct label *bpflabel); +typedef void (*mpo_create_mbuf_from_bpfdesc_t)(struct bpf_d *bpf_d, + struct label *bpflabel, struct mbuf *mbuf, + struct label *mbuflabel); +typedef int (*mpo_check_bpfdesc_receive_t)(struct bpf_d *bpf_d, + struct label *bpflabel, struct ifnet *ifnet, + struct label *ifnetlabel); /* - * Labeling event operations: file system objects, and things that - * look a lot like file system objects. + * Object: struct devfsdirent (Devfs directory entry) */ +typedef void (*mpo_init_devfsdirent_label_t)(struct label *label); +typedef void (*mpo_destroy_devfsdirent_label_t)(struct label *label); typedef void (*mpo_associate_vnode_devfs_t)(struct mount *mp, struct label *fslabel, struct devfs_dirent *de, struct label *delabel, struct vnode *vp, struct label *vlabel); -typedef int (*mpo_associate_vnode_extattr_t)(struct mount *mp, - struct label *fslabel, struct vnode *vp, - struct label *vlabel); -typedef void (*mpo_associate_vnode_singlelabel_t)(struct mount *mp, - struct label *fslabel, struct vnode *vp, - struct label *vlabel); typedef void (*mpo_create_devfs_device_t)(struct ucred *cred, struct mount *mp, struct cdev *dev, struct devfs_dirent *de, struct label *label); @@ -228,157 +161,181 @@ struct mount *mp, struct devfs_dirent *dd, struct label *ddlabel, struct devfs_dirent *de, struct label *delabel); -typedef int (*mpo_create_vnode_extattr_t)(struct ucred *cred, - struct mount *mp, struct label *fslabel, - struct vnode *dvp, struct label *dlabel, - struct vnode *vp, struct label *vlabel, - struct componentname *cnp); -typedef void (*mpo_create_mount_t)(struct ucred *cred, struct mount *mp, - struct label *mntlabel, struct label *fslabel); -typedef void (*mpo_relabel_vnode_t)(struct ucred *cred, struct vnode *vp, - struct label *vnodelabel, struct label *label); -typedef int (*mpo_setlabel_vnode_extattr_t)(struct ucred *cred, - struct vnode *vp, struct label *vlabel, - struct label *intlabel); typedef void (*mpo_update_devfsdirent_t)(struct mount *mp, struct devfs_dirent *devfs_dirent, struct label *direntlabel, struct vnode *vp, struct label *vnodelabel); /* - * Labeling event operations: IPC objects. + * Object: struct ucred (User credential) */ -typedef void (*mpo_create_mbuf_from_socket_t)(struct socket *so, - struct label *socketlabel, struct mbuf *m, - struct label *mbuflabel); -typedef void (*mpo_create_socket_t)(struct ucred *cred, struct socket *so, - struct label *socketlabel); -typedef void (*mpo_create_socket_from_socket_t)(struct socket *oldsocket, - struct label *oldsocketlabel, struct socket *newsocket, - struct label *newsocketlabel); -typedef void (*mpo_relabel_socket_t)(struct ucred *cred, struct socket *so, - struct label *oldlabel, struct label *newlabel); -typedef void (*mpo_relabel_pipe_t)(struct ucred *cred, struct pipepair *pp, - struct label *oldlabel, struct label *newlabel); -typedef void (*mpo_set_socket_peer_from_mbuf_t)(struct mbuf *mbuf, - struct label *mbuflabel, struct socket *so, - struct label *socketpeerlabel); -typedef void (*mpo_set_socket_peer_from_socket_t)(struct socket *oldsocket, - struct label *oldsocketlabel, struct socket *newsocket, - struct label *newsocketpeerlabel); -typedef void (*mpo_create_pipe_t)(struct ucred *cred, struct pipepair *pp, - struct label *pipelabel); +typedef void (*mpo_init_cred_label_t)(struct label *label); +typedef void (*mpo_destroy_cred_label_t)(struct label *label); +typedef void (*mpo_copy_cred_label_t)(struct label *src, + struct label *dest); +typedef int (*mpo_externalize_cred_label_t)(struct label *label, + char *element_name, struct sbuf *sb, int *claimed); +typedef int (*mpo_internalize_cred_label_t)(struct label *label, + char *element_name, char *element_data, int *claimed); +typedef void (*mpo_relabel_cred_t)(struct ucred *cred, + struct label *newlabel); +typedef int (*mpo_check_cred_relabel_t)(struct ucred *cred, + struct label *newlabel); +typedef int (*mpo_check_cred_visible_t)(struct ucred *u1, + struct ucred *u2); /* - * Labeling event operations: System V IPC primitives. + * Object: struct ifnet (Network interface) */ -typedef void (*mpo_create_sysv_msgmsg_t)(struct ucred *cred, - struct msqid_kernel *msqkptr, struct label *msqlabel, - struct msg *msgptr, struct label *msglabel); -typedef void (*mpo_create_sysv_msgqueue_t)(struct ucred *cred, - struct msqid_kernel *msqkptr, struct label *msqlabel); -typedef void (*mpo_create_sysv_sem_t)(struct ucred *cred, - struct semid_kernel *semakptr, struct label *semalabel); -typedef void (*mpo_create_sysv_shm_t)(struct ucred *cred, - struct shmid_kernel *shmsegptr, struct label *shmlabel); +typedef void (*mpo_init_ifnet_label_t)(struct label *label); +typedef void (*mpo_destroy_ifnet_label_t)(struct label *label); +typedef void (*mpo_copy_ifnet_label_t)(struct label *src, + struct label *dest); +typedef int (*mpo_externalize_ifnet_label_t)(struct label *label, + char *element_name, struct sbuf *sb, int *claimed); +typedef int (*mpo_internalize_ifnet_label_t)(struct label *label, + char *element_name, char *element_data, int *claimed); +typedef void (*mpo_create_ifnet_t)(struct ifnet *ifnet, + struct label *ifnetlabel); +typedef void (*mpo_create_mbuf_linklayer_t)(struct ifnet *ifnet, + struct label *ifnetlabel, struct mbuf *mbuf, + struct label *mbuflabel); +typedef void (*mpo_create_mbuf_from_ifnet_t)(struct ifnet *ifnet, + struct label *ifnetlabel, struct mbuf *mbuf, + struct label *mbuflabel); +typedef void (*mpo_create_mbuf_multicast_encap_t)(struct mbuf *oldmbuf, + struct label *oldmbuflabel, struct ifnet *ifnet, + struct label *ifnetlabel, struct mbuf *newmbuf, + struct label *newmbuflabel); +typedef void (*mpo_relabel_ifnet_t)(struct ucred *cred, + struct ifnet *ifnet, struct label *ifnetlabel, + struct label *newlabel); +typedef int (*mpo_check_ifnet_relabel_t)(struct ucred *cred, + struct ifnet *ifnet, struct label *ifnetlabel, + struct label *newlabel); +typedef int (*mpo_check_ifnet_transmit_t)(struct ifnet *ifnet, + struct label *ifnetlabel, struct mbuf *m, + struct label *mbuflabel); /* - * Labeling event operations: POSIX (global/inter-process) semaphores. + * Object: struct inpcb (Internet protocol control block) */ -typedef void (*mpo_create_posix_sem_t)(struct ucred *cred, - struct ksem *ksemptr, struct label *ks_label); +typedef int (*mpo_init_inpcb_label_t)(struct label *label, int flag); +typedef void (*mpo_destroy_inpcb_label_t)(struct label *label); +typedef void (*mpo_create_inpcb_from_socket_t)(struct socket *so, + struct label *solabel, struct inpcb *inp, + struct label *inplabel); +typedef void (*mpo_create_mbuf_from_inpcb_t)(struct inpcb *inp, + struct label *inplabel, struct mbuf *m, + struct label *mlabel); +typedef void (*mpo_inpcb_sosetlabel_t)(struct socket *so, + struct label *label, struct inpcb *inp, + struct label *inplabel); +typedef int (*mpo_check_inpcb_deliver_t)(struct inpcb *inp, + struct label *inplabel, struct mbuf *m, + struct label *mlabel); /* - * Labeling event operations: network objects. + * Object: struct ipq (IP fragment reassembly queue) */ -typedef void (*mpo_create_bpfdesc_t)(struct ucred *cred, - struct bpf_d *bpf_d, struct label *bpflabel); -typedef void (*mpo_create_ifnet_t)(struct ifnet *ifnet, - struct label *ifnetlabel); -typedef void (*mpo_create_inpcb_from_socket_t)(struct socket *so, - struct label *solabel, struct inpcb *inp, - struct label *inplabel); +typedef int (*mpo_init_ipq_label_t)(struct label *label, int flag); +typedef void (*mpo_destroy_ipq_label_t)(struct label *label); typedef void (*mpo_create_ipq_t)(struct mbuf *fragment, struct label *fragmentlabel, struct ipq *ipq, struct label *ipqlabel); typedef void (*mpo_create_datagram_from_ipq) (struct ipq *ipq, struct label *ipqlabel, struct mbuf *datagram, struct label *datagramlabel); +typedef int (*mpo_fragment_match_t)(struct mbuf *fragment, + struct label *fragmentlabel, struct ipq *ipq, + struct label *ipqlabel); +typedef void (*mpo_update_ipq_t)(struct mbuf *fragment, + struct label *fragmentlabel, struct ipq *ipq, + struct label *ipqlabel); + +/* + * Object: kenv (Kernel environment) + */ +typedef int (*mpo_check_kenv_dump_t)(struct ucred *cred); +typedef int (*mpo_check_kenv_get_t)(struct ucred *cred, char *name); +typedef int (*mpo_check_kenv_set_t)(struct ucred *cred, char *name, + char *value); +typedef int (*mpo_check_kenv_unset_t)(struct ucred *cred, char *name); + +/* + * Object: kld (Loadable kernel module) + */ +typedef int (*mpo_check_kld_load_t)(struct ucred *cred, struct vnode *vp, + struct label *vlabel); +typedef int (*mpo_check_kld_stat_t)(struct ucred *cred); +typedef int (*mpo_check_kld_unload_t)(struct ucred *cred); + +/* + * Object: struct ksem (POSIX semaphore) + */ +typedef void (*mpo_init_posix_sem_label_t)(struct label *label); +typedef void (*mpo_destroy_posix_sem_label_t)(struct label *label); +typedef void (*mpo_create_posix_sem_t)(struct ucred *cred, + struct ksem *ksemptr, struct label *ks_label); +typedef int (*mpo_check_posix_sem_destroy_t)(struct ucred *cred, + struct ksem *ksemptr, struct label *ks_label); +typedef int (*mpo_check_posix_sem_getvalue_t)(struct ucred *cred, + struct ksem *ksemptr, struct label *ks_label); +typedef int (*mpo_check_posix_sem_open_t)(struct ucred *cred, + struct ksem *ksemptr, struct label *ks_label); +typedef int (*mpo_check_posix_sem_post_t)(struct ucred *cred, + struct ksem *ksemptr, struct label *ks_label); +typedef int (*mpo_check_posix_sem_unlink_t)(struct ucred *cred, + struct ksem *ksemptr, struct label *ks_label); +typedef int (*mpo_check_posix_sem_wait_t)(struct ucred *cred, + struct ksem *ksemptr, struct label *ks_label); + +/* + * Object: struct mbuf (Message buffer) + */ +typedef int (*mpo_init_mbuf_label_t)(struct label *label, int flag); +typedef void (*mpo_destroy_mbuf_label_t)(struct label *label); +typedef void (*mpo_copy_mbuf_label_t)(struct label *src, + struct label *dest); +typedef void (*mpo_create_mbuf_from_socket_t)(struct socket *so, + struct label *socketlabel, struct mbuf *m, + struct label *mbuflabel); +typedef void (*mpo_set_socket_peer_from_mbuf_t)(struct mbuf *mbuf, + struct label *mbuflabel, struct socket *so, + struct label *socketpeerlabel); typedef void (*mpo_create_fragment_t)(struct mbuf *datagram, struct label *datagramlabel, struct mbuf *fragment, struct label *fragmentlabel); -typedef void (*mpo_create_mbuf_from_inpcb_t)(struct inpcb *inp, - struct label *inplabel, struct mbuf *m, - struct label *mlabel); -typedef void (*mpo_create_mbuf_linklayer_t)(struct ifnet *ifnet, - struct label *ifnetlabel, struct mbuf *mbuf, - struct label *mbuflabel); -typedef void (*mpo_create_mbuf_from_bpfdesc_t)(struct bpf_d *bpf_d, - struct label *bpflabel, struct mbuf *mbuf, - struct label *mbuflabel); -typedef void (*mpo_create_mbuf_from_ifnet_t)(struct ifnet *ifnet, - struct label *ifnetlabel, struct mbuf *mbuf, - struct label *mbuflabel); -typedef void (*mpo_create_mbuf_multicast_encap_t)(struct mbuf *oldmbuf, - struct label *oldmbuflabel, struct ifnet *ifnet, - struct label *ifnetlabel, struct mbuf *newmbuf, - struct label *newmbuflabel); typedef void (*mpo_create_mbuf_netlayer_t)(struct mbuf *oldmbuf, struct label *oldmbuflabel, struct mbuf *newmbuf, struct label *newmbuflabel); -typedef int (*mpo_fragment_match_t)(struct mbuf *fragment, - struct label *fragmentlabel, struct ipq *ipq, - struct label *ipqlabel); typedef void (*mpo_reflect_mbuf_icmp_t)(struct mbuf *m, struct label *mlabel); typedef void (*mpo_reflect_mbuf_tcp_t)(struct mbuf *m, struct label *mlabel); -typedef void (*mpo_relabel_ifnet_t)(struct ucred *cred, - struct ifnet *ifnet, struct label *ifnetlabel, - struct label *newlabel); -typedef void (*mpo_update_ipq_t)(struct mbuf *fragment, - struct label *fragmentlabel, struct ipq *ipq, - struct label *ipqlabel); -typedef void (*mpo_inpcb_sosetlabel_t)(struct socket *so, - struct label *label, struct inpcb *inp, - struct label *inplabel); /* - * Labeling event operations: processes. + * Object: struct mount (File system mountpoint) */ -typedef void (*mpo_execve_transition_t)(struct ucred *old, - struct ucred *new, struct vnode *vp, - struct label *vnodelabel, struct label *interpvnodelabel, - struct image_params *imgp, struct label *execlabel); -typedef int (*mpo_execve_will_transition_t)(struct ucred *old, - struct vnode *vp, struct label *vnodelabel, - struct label *interpvnodelabel, - struct image_params *imgp, struct label *execlabel); -typedef void (*mpo_create_proc0_t)(struct ucred *cred); -typedef void (*mpo_create_proc1_t)(struct ucred *cred); -typedef void (*mpo_relabel_cred_t)(struct ucred *cred, - struct label *newlabel); -typedef void (*mpo_thread_userret_t)(struct thread *thread); +typedef void (*mpo_init_mount_label_t)(struct label *label); +typedef void (*mpo_init_mount_fs_label_t)(struct label *label); +typedef void (*mpo_destroy_mount_label_t)(struct label *label); +typedef void (*mpo_destroy_mount_fs_label_t)(struct label *label); +typedef int (*mpo_check_mount_stat_t)(struct ucred *cred, + struct mount *mp, struct label *mntlabel); /* - * Access control checks. + * Object: struct msqid_kernel (System V message queue) */ -typedef int (*mpo_check_bpfdesc_receive_t)(struct bpf_d *bpf_d, - struct label *bpflabel, struct ifnet *ifnet, - struct label *ifnetlabel); -typedef int (*mpo_check_cred_relabel_t)(struct ucred *cred, - struct label *newlabel); -typedef int (*mpo_check_cred_visible_t)(struct ucred *u1, - struct ucred *u2); -typedef int (*mpo_check_ifnet_relabel_t)(struct ucred *cred, - struct ifnet *ifnet, struct label *ifnetlabel, - struct label *newlabel); -typedef int (*mpo_check_ifnet_transmit_t)(struct ifnet *ifnet, - struct label *ifnetlabel, struct mbuf *m, - struct label *mbuflabel); -typedef int (*mpo_check_inpcb_deliver_t)(struct inpcb *inp, - struct label *inplabel, struct mbuf *m, - struct label *mlabel); +typedef void (*mpo_init_sysv_msgqueue_label_t)(struct label *label); +typedef void (*mpo_destroy_sysv_msgqueue_label_t)(struct label *label); +typedef void (*mpo_cleanup_sysv_msgqueue_t)(struct label *msqlabel); +typedef void (*mpo_create_sysv_msgmsg_t)(struct ucred *cred, + struct msqid_kernel *msqkptr, struct label *msqlabel, + struct msg *msgptr, struct label *msglabel); +typedef void (*mpo_create_sysv_msgqueue_t)(struct ucred *cred, + struct msqid_kernel *msqkptr, struct label *msqlabel); + typedef int (*mpo_check_sysv_msgmsq_t)(struct ucred *cred, struct msg *msgptr, struct label *msglabel, struct msqid_kernel *msqkptr, struct label *msqklabel); @@ -395,40 +352,28 @@ typedef int (*mpo_check_sysv_msqctl_t)(struct ucred *cred, struct msqid_kernel *msqkptr, struct label *msqklabel, int cmd); -typedef int (*mpo_check_sysv_semctl_t)(struct ucred *cred, - struct semid_kernel *semakptr, struct label *semaklabel, - int cmd); -typedef int (*mpo_check_sysv_semget_t)(struct ucred *cred, - struct semid_kernel *semakptr, struct label *semaklabel); -typedef int (*mpo_check_sysv_semop_t)(struct ucred *cred, - struct semid_kernel *semakptr, struct label *semaklabel, - size_t accesstype); -typedef int (*mpo_check_sysv_shmat_t)(struct ucred *cred, - struct shmid_kernel *shmsegptr, - struct label *shmseglabel, int shmflg); -typedef int (*mpo_check_sysv_shmctl_t)(struct ucred *cred, - struct shmid_kernel *shmsegptr, - struct label *shmseglabel, int cmd); -typedef int (*mpo_check_sysv_shmdt_t)(struct ucred *cred, - struct shmid_kernel *shmsegptr, - struct label *shmseglabel); -typedef int (*mpo_check_sysv_shmget_t)(struct ucred *cred, - struct shmid_kernel *shmsegptr, - struct label *shmseglabel, int shmflg); -typedef int (*mpo_check_kenv_dump_t)(struct ucred *cred); -typedef int (*mpo_check_kenv_get_t)(struct ucred *cred, char *name); -typedef int (*mpo_check_kenv_set_t)(struct ucred *cred, char *name, - char *value); -typedef int (*mpo_check_kenv_unset_t)(struct ucred *cred, char *name); -typedef int (*mpo_check_kld_load_t)(struct ucred *cred, struct vnode *vp, - struct label *vlabel); -typedef int (*mpo_check_kld_stat_t)(struct ucred *cred); -typedef int (*mpo_check_kld_unload_t)(struct ucred *cred); -typedef int (*mpo_mpo_placeholder19_t)(void); -typedef int (*mpo_mpo_placeholder20_t)(void); -typedef int (*mpo_check_mount_stat_t)(struct ucred *cred, - struct mount *mp, struct label *mntlabel); -typedef int (*mpo_mpo_placeholder21_t)(void); +/* + * Object: struct msg (System V message) + */ +typedef void (*mpo_init_sysv_msgmsg_label_t)(struct label *label); +typedef void (*mpo_destroy_sysv_msgmsg_label_t)(struct label *label); +typedef void (*mpo_cleanup_sysv_msgmsg_t)(struct label *msglabel); + +/* + * Object: struct pipepair (Pipe) + */ +typedef void (*mpo_init_pipe_label_t)(struct label *label); +typedef void (*mpo_destroy_pipe_label_t)(struct label *label); +typedef void (*mpo_copy_pipe_label_t)(struct label *src, + struct label *dest); +typedef int (*mpo_externalize_pipe_label_t)(struct label *label, + char *element_name, struct sbuf *sb, int *claimed); +typedef int (*mpo_internalize_pipe_label_t)(struct label *label, + char *element_name, char *element_data, int *claimed); +typedef void (*mpo_relabel_pipe_t)(struct ucred *cred, struct pipepair *pp, + struct label *oldlabel, struct label *newlabel); +typedef void (*mpo_create_pipe_t)(struct ucred *cred, struct pipepair *pp, + struct label *pipelabel); typedef int (*mpo_check_pipe_ioctl_t)(struct ucred *cred, struct pipepair *pp, struct label *pipelabel, unsigned long cmd, void *data); @@ -443,18 +388,15 @@ struct pipepair *pp, struct label *pipelabel); typedef int (*mpo_check_pipe_write_t)(struct ucred *cred, struct pipepair *pp, struct label *pipelabel); -typedef int (*mpo_check_posix_sem_destroy_t)(struct ucred *cred, - struct ksem *ksemptr, struct label *ks_label); -typedef int (*mpo_check_posix_sem_getvalue_t)(struct ucred *cred, - struct ksem *ksemptr, struct label *ks_label); -typedef int (*mpo_check_posix_sem_open_t)(struct ucred *cred, - struct ksem *ksemptr, struct label *ks_label); -typedef int (*mpo_check_posix_sem_post_t)(struct ucred *cred, - struct ksem *ksemptr, struct label *ks_label); -typedef int (*mpo_check_posix_sem_unlink_t)(struct ucred *cred, - struct ksem *ksemptr, struct label *ks_label); -typedef int (*mpo_check_posix_sem_wait_t)(struct ucred *cred, - struct ksem *ksemptr, struct label *ks_label); + +/* + * Object: struct proc (Process) + */ +typedef void (*mpo_init_proc_label_t)(struct label *label); +typedef void (*mpo_destroy_proc_label_t)(struct label *label); +typedef void (*mpo_create_proc0_t)(struct ucred *cred); +typedef void (*mpo_create_proc1_t)(struct ucred *cred); +typedef void (*mpo_thread_userret_t)(struct thread *thread); typedef int (*mpo_check_proc_debug_t)(struct ucred *cred, struct proc *proc); typedef int (*mpo_check_proc_sched_t)(struct ucred *cred, @@ -477,6 +419,71 @@ struct proc *proc, int signum); typedef int (*mpo_check_proc_wait_t)(struct ucred *cred, struct proc *proc); + +/* + * Object: struct semid_kernel (System V IPC semaphore) + */ +typedef void (*mpo_init_sysv_sem_label_t)(struct label *label); +typedef void (*mpo_destroy_sysv_sem_label_t)(struct label *label); +typedef void (*mpo_cleanup_sysv_sem_t)(struct label *semalabel); +typedef void (*mpo_create_sysv_sem_t)(struct ucred *cred, + struct semid_kernel *semakptr, struct label *semalabel); +typedef int (*mpo_check_sysv_semctl_t)(struct ucred *cred, + struct semid_kernel *semakptr, struct label *semaklabel, + int cmd); +typedef int (*mpo_check_sysv_semget_t)(struct ucred *cred, + struct semid_kernel *semakptr, struct label *semaklabel); +typedef int (*mpo_check_sysv_semop_t)(struct ucred *cred, + struct semid_kernel *semakptr, struct label *semaklabel, + size_t accesstype); + +/* + * Object: struct shmid_kernel (System V shared memory segment) + */ +typedef void (*mpo_init_sysv_shm_label_t)(struct label *label); +typedef void (*mpo_destroy_sysv_shm_label_t)(struct label *label); +typedef void (*mpo_cleanup_sysv_shm_t)(struct label *shmlabel); +typedef void (*mpo_create_sysv_shm_t)(struct ucred *cred, + struct shmid_kernel *shmsegptr, struct label *shmlabel); +typedef int (*mpo_check_sysv_shmat_t)(struct ucred *cred, + struct shmid_kernel *shmsegptr, + struct label *shmseglabel, int shmflg); +typedef int (*mpo_check_sysv_shmctl_t)(struct ucred *cred, + struct shmid_kernel *shmsegptr, + struct label *shmseglabel, int cmd); +typedef int (*mpo_check_sysv_shmdt_t)(struct ucred *cred, + struct shmid_kernel *shmsegptr, + struct label *shmseglabel); +typedef int (*mpo_check_sysv_shmget_t)(struct ucred *cred, + struct shmid_kernel *shmsegptr, + struct label *shmseglabel, int shmflg); + +/* + * Object: struct socket (Socket) + */ +typedef int (*mpo_init_socket_label_t)(struct label *label, int flag); +typedef int (*mpo_init_socket_peer_label_t)(struct label *label, + int flag); +typedef void (*mpo_destroy_socket_label_t)(struct label *label); +typedef void (*mpo_destroy_socket_peer_label_t)(struct label *label); +typedef void (*mpo_copy_socket_label_t)(struct label *src, + struct label *dest); +typedef int (*mpo_externalize_socket_label_t)(struct label *label, + char *element_name, struct sbuf *sb, int *claimed); +typedef int (*mpo_externalize_socket_peer_label_t)(struct label *label, + char *element_name, struct sbuf *sb, int *claimed); +typedef int (*mpo_internalize_socket_label_t)(struct label *label, + char *element_name, char *element_data, int *claimed); +typedef void (*mpo_create_socket_t)(struct ucred *cred, struct socket *so, + struct label *socketlabel); +typedef void (*mpo_create_socket_from_socket_t)(struct socket *oldsocket, + struct label *oldsocketlabel, struct socket *newsocket, + struct label *newsocketlabel); +typedef void (*mpo_relabel_socket_t)(struct ucred *cred, struct socket *so, + struct label *oldlabel, struct label *newlabel); +typedef void (*mpo_set_socket_peer_from_socket_t)(struct socket *oldsocket, + struct label *oldsocketlabel, struct socket *newsocket, + struct label *newsocketpeerlabel); typedef int (*mpo_check_socket_accept_t)(struct ucred *cred, struct socket *so, struct label *socketlabel); typedef int (*mpo_check_socket_bind_t)(struct ucred *cred, @@ -505,6 +512,10 @@ struct socket *so, struct label *socketlabel); typedef int (*mpo_check_socket_visible_t)(struct ucred *cred, struct socket *so, struct label *socketlabel); + +/* + * Object: system (Global system state) + */ typedef int (*mpo_check_sysarch_ioperm_t)(struct ucred *cred); typedef int (*mpo_check_system_acct_t)(struct ucred *cred, struct vnode *vp, struct label *vlabel); @@ -518,6 +529,44 @@ typedef int (*mpo_check_system_sysctl_t)(struct ucred *cred, struct sysctl_oid *oidp, void *arg1, int arg2, struct sysctl_req *req); + +/* + * Object: struct vnode (VFS node) + */ +typedef void (*mpo_init_vnode_label_t)(struct label *label); +typedef void (*mpo_destroy_vnode_label_t)(struct label *label); +typedef int (*mpo_associate_vnode_extattr_t)(struct mount *mp, + struct label *fslabel, struct vnode *vp, + struct label *vlabel); +typedef void (*mpo_associate_vnode_singlelabel_t)(struct mount *mp, + struct label *fslabel, struct vnode *vp, + struct label *vlabel); +typedef int (*mpo_create_vnode_extattr_t)(struct ucred *cred, + struct mount *mp, struct label *fslabel, + struct vnode *dvp, struct label *dlabel, + struct vnode *vp, struct label *vlabel, + struct componentname *cnp); +typedef void (*mpo_create_mount_t)(struct ucred *cred, struct mount *mp, + struct label *mntlabel, struct label *fslabel); +typedef void (*mpo_relabel_vnode_t)(struct ucred *cred, struct vnode *vp, + struct label *vnodelabel, struct label *label); +typedef int (*mpo_setlabel_vnode_extattr_t)(struct ucred *cred, + struct vnode *vp, struct label *vlabel, + struct label *intlabel); +typedef void (*mpo_copy_vnode_label_t)(struct label *src, + struct label *dest); +typedef int (*mpo_externalize_vnode_label_t)(struct label *label, + char *element_name, struct sbuf *sb, int *claimed); +typedef int (*mpo_internalize_vnode_label_t)(struct label *label, + char *element_name, char *element_data, int *claimed); +typedef void (*mpo_execve_transition_t)(struct ucred *old, + struct ucred *new, struct vnode *vp, + struct label *vnodelabel, struct label *interpvnodelabel, + struct image_params *imgp, struct label *execlabel); +typedef int (*mpo_execve_will_transition_t)(struct ucred *old, + struct vnode *vp, struct label *vnodelabel, + struct label *interpvnodelabel, + struct image_params *imgp, struct label *execlabel); typedef int (*mpo_check_vnode_access_t)(struct ucred *cred, struct vnode *vp, struct label *label, int acc_mode); typedef int (*mpo_check_vnode_chdir_t)(struct ucred *cred,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200607051716.k65HGJ5o032636>