PERFORCE change 15425 for review

Robert Watson rwatson at freebsd.org
Fri Aug 2 03:16:31 GMT 2002



On Thu, 1 Aug 2002, Chris Vance wrote:

> http://people.freebsd.org/~peter/p4db/chv.cgi?CH=15425
> 
> Change 15425 by cvance at cvance_laptop on 2002/08/01 18:04:47
> 
> 	Add support for a basic mac_policy syscall handler.
> 	Things to think about: 
> 	    - who guarantees MPSAFE, trustedbsd harness or the modules?  
> 	    - the module must perform the copyin on the arg parameter.

Also, you need to rebuild and commit the rebuilt init_sysent.c,
syscalls.c, and related sys/sys/ stuff.


> 
> Affected files ...
> 
> .. //depot/projects/trustedbsd/mac/sys/kern/kern_mac.c#225 edit
> .. //depot/projects/trustedbsd/mac/sys/kern/syscalls.master#21 edit
> .. //depot/projects/trustedbsd/mac/sys/sys/mac.h#141 edit
> .. //depot/projects/trustedbsd/mac/sys/sys/mac_policy.h#106 edit
> 
> Differences ...
> 
> ==== //depot/projects/trustedbsd/mac/sys/kern/kern_mac.c#225 (text+ko) ====
> 
> @@ -363,6 +363,9 @@
>  			 * that all enumerated values are handled.
>  			 */
>  			break;
> +		case MAC_SYSCALL:
> +			mpc->mpc_ops->mpo_mac_policy =
> +			    mpe->mpe_function;
>  		case MAC_DESTROY:
>  			mpc->mpc_ops->mpo_destroy =
>  			    mpe->mpe_function;
> @@ -3060,6 +3063,40 @@
>  	return (error);
>  }
>  
> +/*
> + * MPSAFE
> + */
> +int
> +mac_policy(struct thread *td, struct mac_policy_args *uap)
> +{
> +	int error;
> +	char target[128]; /* TBD: should be MAX_MAXNAME or some such */
> +	struct mac_policy_conf *mpc;
> +
> +	error = copyinstr(uap->policy, target, sizeof(target), NULL);
> +	if (error == ENAMETOOLONG) {
> +		return (EINVAL);
> +	}
> +	if (error) {
> +		return (error);
> +	}
> +
> +	error = ENOSYS;
> +	MAC_POLICY_LIST_BUSY();
> +	LIST_FOREACH(mpc, &mac_policy_list, mpc_list) {
> +		if (strcmp(mpc->mpc_name, target) == 0 &&
> +			mpc->mpc_ops->mpo_mac_policy) {
> +			error = mpc->mpc_ops->mpo_mac_policy(SCARG(uap, call),
> +							     SCARG(uap, arg));
> +			goto out;
> +		}
> +	}
> +
> + out:
> +	MAC_POLICY_LIST_UNBUSY();
> +	return (error);
> +}
> +
>  SYSINIT(mac, SI_SUB_MAC, SI_ORDER_FIRST, mac_init, NULL);
>  SYSINIT(mac_late, SI_SUB_MAC_LATE, SI_ORDER_FIRST, mac_late_init, NULL);
>  
> @@ -3107,4 +3144,11 @@
>  	return (ENOSYS);
>  }
>  
> +int
> +mac_policy(struct thread *td, struct mac_policy *uap)
> +{
> +
> +	return (ENOSYS);
> +}
> +
>  #endif /* !MAC */
> 
> ==== //depot/projects/trustedbsd/mac/sys/kern/syscalls.master#21 (text+ko) ====
> 
> @@ -567,5 +567,5 @@
>  392	STD	BSD	{ int uuidgen(struct uuid *store, int count); }
>  393	MSTD	BSD	{ int sendfile(int fd, int s, off_t offset, size_t nbytes, \
>  				struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
> -394	MNOIMPL	BSD	{ int mac_policy(const char *policy, int call, \
> +394	MSTD	BSD	{ int mac_policy(const char *policy, int call, \
>  				void *arg); }
> 
> ==== //depot/projects/trustedbsd/mac/sys/sys/mac.h#141 (text+ko) ====
> 
> 
> ==== //depot/projects/trustedbsd/mac/sys/sys/mac_policy.h#106 (text+ko) ====
> 
> @@ -63,6 +63,11 @@
>  	void	(*mpo_init)(struct mac_policy_conf *mpc);
>  
>  	/*
> +	 * Generic policy-directed security syscall
> +	 */
> +	int	(*mpo_mac_policy)(int call, void *arg);
> +
> +	/*
>  	 * Label operations.
>  	 */
>  	void	(*mpo_init_bpfdesc)(struct bpf_d *, struct label *label);
> @@ -330,6 +335,7 @@
>  
>  enum mac_op_constant {
>  	MAC_OP_LAST,
> +	MAC_SYSCALL,
>  	MAC_DESTROY,
>  	MAC_INIT,
>  	MAC_INIT_BPFDESC,
> 

To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message



More information about the trustedbsd-cvs mailing list