X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=include%2Flinux%2Fvs_base.h;h=b732600c4cc37be1d11dc03710007fdd02086b6b;hb=4203cbbdfb5b93b8682b9698f3fce5a1d0674321;hp=4f04513ffec0d0d3cb4ce3d024326e6790929da1;hpb=2d943f77c79305c074ece127e50d939fc16d627b;p=linux-2.6.git diff --git a/include/linux/vs_base.h b/include/linux/vs_base.h index 4f04513ff..b732600c4 100644 --- a/include/linux/vs_base.h +++ b/include/linux/vs_base.h @@ -3,16 +3,6 @@ #include "vserver/context.h" -// #define VX_DEBUG - - -#if defined(VX_DEBUG) -#define vxdprintk(x...) printk("vxd: " x) -#else -#define vxdprintk(x...) -#endif - - #define vx_task_xid(t) ((t)->xid) #define vx_current_xid() vx_task_xid(current) @@ -24,9 +14,9 @@ /* * check current context for ADMIN/WATCH and - * optionally agains supplied argument + * optionally against supplied argument */ -static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode) +static inline int __vx_check(xid_t cid, xid_t id, unsigned int mode) { if (mode & VX_ARG_MASK) { if ((mode & VX_IDENT) && @@ -42,37 +32,74 @@ static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode) (id > 1) && (id < MIN_D_CONTEXT)) return 1; } + return (((mode & VX_ADMIN) && (cid == 0)) || - ((mode & VX_WATCH) && (cid == 1))); + ((mode & VX_WATCH) && (cid == 1)) || + ((mode & VX_HOSTID) && (id == 0))); } -#define __vx_flags(v,m,f) (((v) & (m)) ^ (f)) +#define __vx_state(v) ((v) ? ((v)->vx_state) : 0) + +#define vx_info_state(v,m) (__vx_state(v) & (m)) + + +/* generic flag merging */ + +#define vx_check_flags(v,m,f) (((v) & (m)) ^ (f)) + +#define vx_mask_flags(v,f,m) (((v) & ~(m)) | ((f) & (m))) + +#define vx_mask_mask(v,f,m) (((v) & ~(m)) | ((v) & (f) & (m))) + +#define vx_check_bit(v,n) ((v) & (1LL << (n))) -#define __vx_task_flags(t,m,f) \ - (((t) && ((t)->vx_info)) ? \ - __vx_flags((t)->vx_info->vx_flags,(m),(f)) : 0) -#define vx_current_flags() \ - ((current->vx_info) ? current->vx_info->vx_flags : 0) +/* context flags */ -#define vx_flags(m,f) __vx_flags(vx_current_flags(),(m),(f)) +#define __vx_flags(v) ((v) ? (v)->vx_flags : 0) +#define vx_current_flags() __vx_flags(current->vx_info) -#define vx_current_ccaps() \ - ((current->vx_info) ? current->vx_info->vx_ccaps : 0) +#define vx_info_flags(v,m,f) \ + vx_check_flags(__vx_flags(v),(m),(f)) + +#define task_vx_flags(t,m,f) \ + ((t) && vx_info_flags((t)->vx_info, (m), (f))) + +#define vx_flags(m,f) vx_info_flags(current->vx_info,(m),(f)) + + +/* context caps */ + +#define __vx_ccaps(v) ((v) ? (v)->vx_ccaps : 0) + +#define vx_current_ccaps() __vx_ccaps(current->vx_info) + +#define vx_info_ccaps(v,c) (__vx_ccaps(v) & (c)) + +#define vx_ccaps(c) vx_info_ccaps(current->vx_info,(c)) + + +#define __vx_mcaps(v) ((v) ? (v)->vx_ccaps >> 32UL : ~0 ) + +#define vx_info_mcaps(v,c) (__vx_mcaps(v) & (c)) + +#define vx_mcaps(c) vx_info_mcaps(current->vx_info,(c)) -#define vx_ccaps(c) (vx_current_ccaps() & (c)) #define vx_current_bcaps() \ (((current->vx_info) && !vx_flags(VXF_STATE_SETUP, 0)) ? \ current->vx_info->vx_bcaps : cap_bset) -/* generic flag merging */ - -#define vx_mask_flags(v,f,m) (((v) & ~(m)) | ((f) & (m))) +#define vx_current_initpid(n) \ + (current->vx_info && \ + (current->vx_info->vx_initpid == (n))) -#define vx_mask_mask(v,f,m) (((v) & ~(m)) | ((v) & (f) & (m))) +#define vx_capable(b,c) (capable(b) || \ + ((current->euid == 0) && vx_ccaps(c))) +#else +#warning duplicate inclusion #endif