WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] The patches below clean-up sHype-related file names in t

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] The patches below clean-up sHype-related file names in the tools subtree
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 02 Aug 2005 05:36:10 -0400
Delivery-date: Tue, 02 Aug 2005 09:36:59 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User smh22@xxxxxxxxxxxxxxxxxxxx
# Node ID d18f732c0a5fa2b4a14c52c511c3b6db8cb950bb
# Parent  0301cccd14f1d89fd62fddd25abf276735636e83
The patches below clean-up sHype-related file names  in the tools subtree
and security policy-versioning and data structures in the xen subtree 
(ACM):

 *  the very generic tools directory name "policy"  is changed to 
    "security" and the included "policy_tool" to "secpol_tool"

 * the single constant POLICY_INTERFACE_VERSION is replaced 
   by ACM_INTERFACE_VERSION; the security policy headers are
   versioned independently since the policy can be supplied
   at boot time instead of through the  hypervisor interface

Signed-off-by: Reiner Sailer <sailer@xxxxxxxxxxxxxx>
Signed-off-by: Steven Hand <steven@xxxxxxxxxxxxx>

diff -r 0301cccd14f1 -r d18f732c0a5f tools/Makefile
--- a/tools/Makefile    Tue Aug  2 09:31:47 2005
+++ b/tools/Makefile    Tue Aug  2 09:37:00 2005
@@ -12,7 +12,7 @@
 SUBDIRS += xcutils
 SUBDIRS += pygrub
 SUBDIRS += firmware
-SUBDIRS += policy
+SUBDIRS += security
 
 .PHONY: all install clean check check_clean ioemu eioemuinstall ioemuclean
 
diff -r 0301cccd14f1 -r d18f732c0a5f tools/misc/policyprocessor/XmlToBin.java
--- a/tools/misc/policyprocessor/XmlToBin.java  Tue Aug  2 09:31:47 2005
+++ b/tools/misc/policyprocessor/XmlToBin.java  Tue Aug  2 09:37:00 2005
@@ -4,6 +4,9 @@
  * $Id: XmlToBin.java,v 1.3 2005/06/20 21:07:37 rvaldez Exp $
  *
  * Author: Ray Valdez
+ *
+ * Contributors:
+ *         Reiner Sailer - adjust type-lengths
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -490,175 +493,139 @@
        
 
   try {
-       /* Write magic */
-       writeIntToStream(binBuffer,ACM_MAGIC,index);
-       index = u32Size;
-
-       /* Write policy version */
-       writeIntToStream(binBuffer,POLICY_INTERFACE_VERSION,index);
-       index = index + u32Size;
-
-       /* write len */
-       writeIntToStream(binBuffer,binBuffer.length,index);
-       index = index + u32Size;
+         index = 0;
+         /* fill in General Policy Version */
+         writeIntToStream(binBuffer, ACM_POLICY_VERSION, index);
+         index += u32Size;
+
+         /* Write magic */
+         writeIntToStream(binBuffer, ACM_MAGIC, index);
+         index += u32Size;
+
+         /* write len */
+         writeIntToStream(binBuffer, binBuffer.length, index);
+         index += u32Size;
 
   } catch (IOException ee) {
-       System.out.println(" GBPB:: got exception : " + ee); 
-       return null;
+         System.out.println(" GBPB:: got exception : " + ee);
+         return null;
   }
 
   int offset, address;
   address = index;
 
   if (null != partMap) 
-       offset = binaryBufferHeaderSz + resourceOffsetSz; 
+         offset = binaryBufferHeaderSz + resourceOffsetSz;
   else
-       offset = binaryBufferHeaderSz; 
+         offset = binaryBufferHeaderSz;
 
   try {
-
-       if (null == chwPolicy || null == stePolicy) 
-       {
-         writeShortToStream(binBuffer,ACM_NULL_POLICY,index);
-         index = index + u16Size;
-
-         writeShortToStream(binBuffer,(short) 0,index);
-         index = index + u16Size;
-
-         writeShortToStream(binBuffer,ACM_NULL_POLICY,index);
-         index = index + u16Size;
-
-         writeShortToStream(binBuffer,(short) 0,index);
-         index = index + u16Size;
-
-       }
-       index = address;
-       if (null != chwPolicy) 
-       {
+         int skip = 0;
+
+         /* init with NULL policy setting */
+         writeIntToStream(binBuffer, ACM_NULL_POLICY, index);
+         writeIntToStream(binBuffer, 0, index + u32Size);
+         writeIntToStream(binBuffer, ACM_NULL_POLICY, index + 2*u32Size);
+         writeIntToStream(binBuffer, 0, index + 3*u32Size);
          
-         /* Write policy name */
-         writeShortToStream(binBuffer,ACM_CHINESE_WALL_POLICY,index);
-         index = index + u16Size;
-
-         /* Write offset */
-         writeShortToStream(binBuffer,(short) offset,index);
-         index = index + u16Size;
-
-         /* Write payload. No need increment index */
-         address = offset;
-         System.arraycopy(chwPolicy, 0, binBuffer,address, chwPolicy.length);
-         address = address + chwPolicy.length;
+         index = address;
+         if (null != chwPolicy) {
          
+                 /* Write policy name */
+                 writeIntToStream(binBuffer, ACM_CHINESE_WALL_POLICY, index);
+                 index += u32Size;
+
+                 /* Write offset */
+                 writeIntToStream(binBuffer, offset, index);
+                 index += u32Size;
+
+                 /* Write payload. No need increment index */
+                 address = offset;
+                 System.arraycopy(chwPolicy, 0, binBuffer,address, 
chwPolicy.length);
+                 address = address + chwPolicy.length;
+         } else
+                 skip += 2*u32Size;
+
          if (null != stePolicy) 
          {     
                /* Write policy name */
-               
writeShortToStream(binBuffer,ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY,index);
-               index = index + u16Size;
+               writeIntToStream(binBuffer, ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY, 
index);
+               index += u32Size;
 
                /* Write offset */
-               writeShortToStream(binBuffer,(short) address,index);
-               index = index + u16Size;
+               writeIntToStream(binBuffer, address, index);
+               index += u32Size;
 
                /* Copy array */
                System.arraycopy(stePolicy, 0, binBuffer,address, 
stePolicy.length);
                /* Update address */
                address = address + stePolicy.length;
+         } else
+                skip += 2*u32Size;
+
+         /* Skip writing policy name and offset for each null policy*/
+         index +=  skip;
+
+         int size;
+         /* Assumes that you will always have a partition defined in policy */
+         if ( 0 < partMap.length) {
+                 writeIntToStream(binBuffer, address, index);
+                 index = address;
+
+                 /* Compute num of VMs */
+                 size = partMap.length / (3 * u16Size);
+
+                 writeShortToStream(binBuffer, (short)size,index);
+                 index = index + u16Size;
+
+                 /* part, vlan and slot: each one consists of two entries */
+                 offset = 3 * (2 * u16Size);
+                 writeShortToStream(binBuffer, (short) offset,index);
+
+                 /* Write partition array at offset */
+                 System.arraycopy(partMap, 0, binBuffer,(offset + address), 
partMap.length);
+                 index = index + u16Size;
+                 offset = offset + partMap.length;
+         }
+
+         if ( 0 < vlanMap.length) {
+                 size = vlanMap.length / (2 * u16Size);
+                 writeShortToStream(binBuffer, (short) size,index);
+                 index = index + u16Size;
+
+                 writeShortToStream(binBuffer, (short) offset,index);
+                 index = index + u16Size;
+                 System.arraycopy(vlanMap, 0, binBuffer,(offset + address), 
vlanMap.length);
          } else {
-               /* Skip writing policy name and offset */
-               index = index +  2 * u16Size;
-
-          }
-
-       } else {
-
-         if (null != stePolicy) 
-         {     
-               /* Write policy name */
-               
writeShortToStream(binBuffer,ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY,index);
-               index = index + u16Size;
-
-               /* Write offset */
-               address = offset;
-               writeShortToStream(binBuffer, (short) offset,index);
-               index = index + u16Size;
-               
-               /* Copy array */
-               System.arraycopy(stePolicy, 0, binBuffer,address, 
stePolicy.length);
-               /* Update address */
-               address = address + stePolicy.length;
-
-               /* Increment index, since there is no secondary */
-               index = index + secondaryPolicyCodeSz + secondaryBufferOffsetSz;
-               
-         } 
-
-       }
-       int size;
-       /* Assumes that you will always have a partition defined in policy */ 
-       if ( 0 < partMap.length)
-       {
-         writeShortToStream(binBuffer, (short) address,index);
-         index = address;
-
-         /* Compute num of VMs */
-         size = partMap.length / (3 * u16Size);
-
-         writeShortToStream(binBuffer, (short)size,index);
-         index = index + u16Size;
-
-         /* part, vlan and slot: each one consists of two entries */
-         offset = 3 * (2 * u16Size); 
-         writeShortToStream(binBuffer, (short) offset,index);
-
-         /* Write partition array at offset */
-         System.arraycopy(partMap, 0, binBuffer,(offset + address), 
partMap.length);
-         index = index + u16Size;
-         offset = offset + partMap.length;
-       }
-
-       if ( 0 < vlanMap.length)
-       {
-         size = vlanMap.length / (2 * u16Size);
-         writeShortToStream(binBuffer, (short) size,index);
-         index = index + u16Size;
-
-         writeShortToStream(binBuffer, (short) offset,index);
-         index = index + u16Size;
-         System.arraycopy(vlanMap, 0, binBuffer,(offset + address), 
vlanMap.length);
-       } else {
-         /* Write vlan max */
-         writeShortToStream(binBuffer, (short) 0,index);
-         index = index + u16Size;
+                 /* Write vlan max */
+                 writeShortToStream(binBuffer, (short) 0,index);
+                 index = index + u16Size;
  
-         /* Write vlan offset */
-         writeShortToStream(binBuffer, (short) 0,index);
-         index = index + u16Size;
-         
-       }
-
-       offset = offset + vlanMap.length;
-       if ( 0 < slotMap.length)
-       {
-         size = slotMap.length / (3 * u16Size);
-         writeShortToStream(binBuffer, (short) size,index);
-         index = index + u16Size;
-
-         writeShortToStream(binBuffer, (short) offset,index);
-         index = index + u16Size;
-         System.arraycopy(slotMap, 0, binBuffer,(offset + address), 
slotMap.length);
-       }
-
-     } catch (IOException ee)
-    {
-       System.out.println(" GBPB:: got exception : " + ee); 
-       return null; 
-    }
-
-    printDebug(" GBP:: Binary Policy ==> length " + binBuffer.length); 
-    if (debug) 
-       printHex(binBuffer,binBuffer.length);
-
-   return  binBuffer;   
+                 /* Write vlan offset */
+                 writeShortToStream(binBuffer, (short) 0,index);
+                 index = index + u16Size;
+         }
+
+         offset = offset + vlanMap.length;
+         if ( 0 < slotMap.length) {
+                 size = slotMap.length / (3 * u16Size);
+                 writeShortToStream(binBuffer, (short) size,index);
+                 index = index + u16Size;
+
+                 writeShortToStream(binBuffer, (short) offset,index);
+                 index = index + u16Size;
+                 System.arraycopy(slotMap, 0, binBuffer,(offset + address), 
slotMap.length);
+         }
+  } catch (IOException ee) {
+         System.out.println(" GBPB:: got exception : " + ee);
+         return null;
+  }
+
+  printDebug(" GBP:: Binary Policy ==> length " + binBuffer.length);
+  if (debug)
+         printHex(binBuffer,binBuffer.length);
+
+  return  binBuffer;
  } 
 
  public  byte[] generateChwBuffer(Vector Ssids, Vector ConflictSsids, Vector 
ColorTypes)
@@ -668,28 +635,20 @@
   int position = 0;
 
   /* Get number of rTypes */
-  short maxTypes = (short) ColorTypes.size();
+  int maxTypes = ColorTypes.size();
 
   /* Get number of SSids entry */
-  short maxSsids = (short) Ssids.size();
+  int maxSsids = Ssids.size();
 
   /* Get number of conflict sets */
-  short maxConflict = (short) ConflictSsids.size();
+  int maxConflict = ConflictSsids.size();
 
    
   if (maxTypes * maxSsids == 0)
        return null; 
   /*
-     data structure acm_chwall_policy_buffer_t;
-    
-     uint16 policy_code;
-     uint16 chwall_max_types;
-     uint16 chwall_max_ssidrefs;
-     uint16 chwall_max_conflictsets;
-     uint16 chwall_ssid_offset;
-     uint16 chwall_conflict_sets_offset;
-     uint16 chwall_running_types_offset;
-     uint16 chwall_conflict_aggregate_offset;
+     data structure acm_chwall_policy_buffer
+     se XmlToBinInterface.java
   */
   int totalBytes = chwHeaderSize  + u16Size *(maxTypes * (maxSsids + 
maxConflict)); 
 
@@ -699,34 +658,38 @@
   printDebug(" gCB:: chwall totalbytes : "+totalBytes); 
 
   try {
-       index = 0;
-       writeShortToStream(chwBuffer,ACM_CHINESE_WALL_POLICY,index);
-       index = u16Size; 
-
-       writeShortToStream(chwBuffer,maxTypes,index);
-       index = index + u16Size; 
-
-       writeShortToStream(chwBuffer,maxSsids,index);
-       index = index + u16Size; 
-
-       writeShortToStream(chwBuffer,maxConflict,index);
-       index = index + u16Size; 
-
-        /*  Write chwall_ssid_offset */
-       writeShortToStream(chwBuffer,chwHeaderSize,index);
-       index = index + u16Size; 
-
-       /* Write chwall_conflict_sets_offset */
-       writeShortToStream(chwBuffer,(short) address,index);
-       index = index + u16Size; 
-
-       /*  Write chwall_running_types_offset */
-       writeShortToStream(chwBuffer,(short) 0,index);
-       index = index + u16Size; 
-
-       /*  Write chwall_conflict_aggregate_offset */
-       writeShortToStream(chwBuffer,(short) 0,index);
-       index = index + u16Size; 
+         index = 0;
+         /* fill in General Policy Version */
+         writeIntToStream(chwBuffer, ACM_CHWALL_VERSION, index);
+         index += u32Size;
+
+         writeIntToStream(chwBuffer, ACM_CHINESE_WALL_POLICY, index);
+         index += u32Size;
+
+         writeIntToStream(chwBuffer, maxTypes, index);
+         index += u32Size;
+
+         writeIntToStream(chwBuffer, maxSsids, index);
+         index += u32Size;
+
+         writeIntToStream(chwBuffer, maxConflict, index);
+         index += u32Size;
+
+         /*  Write chwall_ssid_offset */
+         writeIntToStream(chwBuffer, chwHeaderSize, index);
+         index += u32Size;
+
+         /* Write chwall_conflict_sets_offset */
+         writeIntToStream(chwBuffer, address, index);
+         index += u32Size;
+
+         /*  Write chwall_running_types_offset */
+         writeIntToStream(chwBuffer, 0, index);
+         index += u32Size;
+
+         /*  Write chwall_conflict_aggregate_offset */
+         writeIntToStream(chwBuffer, 0, index);
+         index += u32Size;
 
   } catch (IOException ee) {
        System.out.println(" gCB:: got exception : " + ee); 
@@ -737,7 +700,6 @@
   /* Create the SSids entry */
   for (int i = 0; i < maxSsids; i++)
   {
-       
        SecurityLabel ssidEntry = (SecurityLabel) Ssids.elementAt(i);
        /* Get chwall types */
        ssidEntry.chwSsidPosition = i;
@@ -821,22 +783,16 @@
   int position = 0;
 
   /* Get number of colorTypes */
-  short numColorTypes = (short) ColorTypes.size();
+  int numColorTypes = ColorTypes.size();
 
   /* Get number of SSids entry */
-  short numSsids = (short) Ssids.size();
+  int numSsids = Ssids.size();
    
   if (numColorTypes * numSsids == 0)
        return null; 
 
-  /* data structure: acm_ste_policy_buffer_t
-   * 
-   * policy code  (uint16)    >
-   *  max_types    (uint16)    >
-   * max_ssidrefs (uint16)    >  steHeaderSize
-   * ssid_offset  (uint16)    >
-   * DATA      (colorTypes(size) * Ssids(size) *unit16)
-   * 
+  /* data structure: acm_ste_policy_buffer
+   * see XmlToBinInterface.java
    * total bytes: steHeaderSize * 2B + colorTypes(size) * Ssids(size)
    * 
   */
@@ -844,18 +800,22 @@
 
   try {
        
-       index = 0;
-       writeShortToStream(steBuffer,ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY,index);
-       index = u16Size; 
-
-       writeShortToStream(steBuffer,numColorTypes,index);
-       index = index + u16Size; 
-
-       writeShortToStream(steBuffer,numSsids,index);
-       index = index + u16Size; 
-
-       writeShortToStream(steBuffer,(short)steHeaderSize,index);
-       index = index + u16Size; 
+         index = 0;
+         writeIntToStream(steBuffer, ACM_STE_VERSION, index);
+         index += u32Size;
+
+         writeIntToStream(steBuffer, ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY, 
index);
+         index += u32Size;
+
+         writeIntToStream(steBuffer, numColorTypes, index);
+         index += u32Size;
+
+         writeIntToStream(steBuffer, numSsids, index);
+         index += u32Size;
+
+         writeIntToStream(steBuffer, steHeaderSize, index);
+         index += u32Size;
+
 
   } catch (IOException ee) {
        System.out.println(" gSB:: got exception : " + ee); 
@@ -1469,6 +1429,17 @@
 
   XmlToBin genObj = new XmlToBin(); 
 
+  policy_version active_policy = new policy_version();
+
+  if ((active_policy.ACM_POLICY_VERSION != ACM_POLICY_VERSION) ||
+      (active_policy.ACM_CHWALL_VERSION != ACM_CHWALL_VERSION) ||
+      (active_policy.ACM_STE_VERSION != ACM_STE_VERSION)) {
+         System.out.println("ACM policy versions differ.");
+         System.out.println("Please verify that data structures are correct");
+         System.out.println("and then adjust the version numbers in 
XmlToBinInterface.java.");
+         return;
+  }
+
 
   for (int i = 0 ; i < args.length ; i++) {
 
diff -r 0301cccd14f1 -r d18f732c0a5f 
tools/misc/policyprocessor/XmlToBinInterface.java
--- a/tools/misc/policyprocessor/XmlToBinInterface.java Tue Aug  2 09:31:47 2005
+++ b/tools/misc/policyprocessor/XmlToBinInterface.java Tue Aug  2 09:37:00 2005
@@ -19,37 +19,37 @@
  *
  *     policy binary structures
  *
- *     typedef struct {
- *        u32 magic;
+ * struct acm_policy_buffer {
+ *     u32 policy_version; * ACM_POLICY_VERSION *
+ *      u32 magic;
+ *     u32 len;
+ *     u32 primary_policy_code;
+ *     u32 primary_buffer_offset;
+ *     u32 secondary_policy_code;
+ *     u32 secondary_buffer_offset;
+ *      +u32 resource offset (not used yet in Xen)
+ * };
  *
- *        u32 policyversion;
- *        u32 len;
  *
- *        u16 primary_policy_code;
- *        u16 primary_buffer_offset;
- *        u16 secondary_policy_code;
- *        u16 secondary_buffer_offset;
- *     u16 resource_offset;
+ * struct acm_ste_policy_buffer {
+ *     u32 policy_version; * ACM_STE_VERSION *
+ *     u32 policy_code;
+ *     u32 ste_max_types;
+ *     u32 ste_max_ssidrefs;
+ *     u32 ste_ssid_offset;
+ * };
  *
- *     } acm_policy_buffer_t;
- *
- *     typedef struct {
- *        u16 policy_code;
- *        u16 ste_max_types;
- *        u16 ste_max_ssidrefs;
- *        u16 ste_ssid_offset;
- *     } acm_ste_policy_buffer_t;
- *
- *     typedef struct {
- *        uint16 policy_code;
- *        uint16 chwall_max_types;
- *        uint16 chwall_max_ssidrefs;
- *        uint16 chwall_max_conflictsets;
- *        uint16 chwall_ssid_offset;
- *        uint16 chwall_conflict_sets_offset;
- *        uint16 chwall_running_types_offset;
- *        uint16 chwall_conflict_aggregate_offset;
- *     } acm_chwall_policy_buffer_t;
+ * struct acm_chwall_policy_buffer {
+ *     u32 policy_version; * ACM_CHWALL_VERSION *
+ *     u32 policy_code;
+ *     u32 chwall_max_types;
+ *     u32 chwall_max_ssidrefs;
+ *     u32 chwall_max_conflictsets;
+ *     u32 chwall_ssid_offset;
+ *     u32 chwall_conflict_sets_offset;
+ *     u32 chwall_running_types_offset;
+ *     u32 chwall_conflict_aggregate_offset;
+ * };
  *
  *     typedef struct {
  *     u16 partition_max;
@@ -100,16 +100,17 @@
   final int u16Size = 2;
 
   /* num of bytes for acm_ste_policy_buffer_t */
-  final short steHeaderSize = (4 * u16Size); 
+  final int steHeaderSize = (5 * u32Size);
+
   /* byte for acm_chinese_wall_policy_buffer_t */
-  final short chwHeaderSize = (8 * u16Size); 
+  final int chwHeaderSize = (9 * u32Size);
 
-  final short primaryPolicyCodeSize = u16Size;
-  final short primaryBufferOffsetSize = u16Size ;
+  final int primaryPolicyCodeSize = u32Size;
+  final int primaryBufferOffsetSize = u32Size ;
 
-  final int secondaryPolicyCodeSz = u16Size;
-  final int secondaryBufferOffsetSz = u16Size;
-  final short resourceOffsetSz = u16Size;
+  final int secondaryPolicyCodeSz = u32Size;
+  final int secondaryBufferOffsetSz = u32Size;
+  final int resourceOffsetSz = u32Size;
 
   final short partitionBufferSz = (2 * u16Size);
   final short partitionEntrySz = (3 * u16Size);
@@ -120,16 +121,18 @@
   final short vlanBufferSz = (2 * u16Size);
   final short vlanEntrySz = (2 * u16Size);
 
-  final short binaryBufferHeaderSz = (3 * u32Size + 4* u16Size);
-
-  /* copied directlty from policy_ops.h */
-  final int POLICY_INTERFACE_VERSION = 0xAAAA0003;
+  final int binaryBufferHeaderSz = (8 * u32Size); /* 8th not used in Xen */
 
   /* copied directly from acm.h */
   final int ACM_MAGIC  =  0x0001debc;
-  final short ACM_NULL_POLICY = 0;
-  final short ACM_CHINESE_WALL_POLICY = 1;
-  final short ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY = 2;
-  final short ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY = 3;
-  final short ACM_EMPTY_POLICY = 4;
+  final int ACM_NULL_POLICY = 0;
+  final int ACM_CHINESE_WALL_POLICY = 1;
+  final int ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY = 2;
+  final int ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY = 3;
+  final int ACM_EMPTY_POLICY = 4;
+
+  /* version for compatibility check */
+  final int ACM_POLICY_VERSION = 1;
+  final int ACM_STE_VERSION    = 1;
+  final int ACM_CHWALL_VERSION = 1;
 }
diff -r 0301cccd14f1 -r d18f732c0a5f 
tools/misc/policyprocessor/xen_sample_def.xml
--- a/tools/misc/policyprocessor/xen_sample_def.xml     Tue Aug  2 09:31:47 2005
+++ b/tools/misc/policyprocessor/xen_sample_def.xml     Tue Aug  2 09:37:00 2005
@@ -37,7 +37,7 @@
    </ConflictSet>
 
    <ConflictSet>
-                <ChWall>Q-Company</ChWall>
+                <ChWall>R-Company</ChWall>
                 <ChWall>V-Company</ChWall>
                 <ChWall>W-Company</ChWall>
    </ConflictSet>
diff -r 0301cccd14f1 -r d18f732c0a5f xen/acm/acm_chinesewall_hooks.c
--- a/xen/acm/acm_chinesewall_hooks.c   Tue Aug  2 09:31:47 2005
+++ b/xen/acm/acm_chinesewall_hooks.c   Tue Aug  2 09:37:00 2005
@@ -110,45 +110,45 @@
      struct acm_chwall_policy_buffer *chwall_buf = (struct 
acm_chwall_policy_buffer *)buf;
      int ret = 0;
 
-     chwall_buf->chwall_max_types = htons(chwall_bin_pol.max_types);
-     chwall_buf->chwall_max_ssidrefs = htons(chwall_bin_pol.max_ssidrefs);
-     chwall_buf->policy_code = htons(ACM_CHINESE_WALL_POLICY);
-     chwall_buf->chwall_ssid_offset = htons(sizeof(struct 
acm_chwall_policy_buffer));
-     chwall_buf->chwall_max_conflictsets = 
htons(chwall_bin_pol.max_conflictsets);
+     chwall_buf->chwall_max_types = htonl(chwall_bin_pol.max_types);
+     chwall_buf->chwall_max_ssidrefs = htonl(chwall_bin_pol.max_ssidrefs);
+     chwall_buf->policy_code = htonl(ACM_CHINESE_WALL_POLICY);
+     chwall_buf->chwall_ssid_offset = htonl(sizeof(struct 
acm_chwall_policy_buffer));
+     chwall_buf->chwall_max_conflictsets = 
htonl(chwall_bin_pol.max_conflictsets);
      chwall_buf->chwall_conflict_sets_offset =
-            htons(
-                  ntohs(chwall_buf->chwall_ssid_offset) + 
+            htonl(
+                  ntohl(chwall_buf->chwall_ssid_offset) +
                   sizeof(domaintype_t) * chwall_bin_pol.max_ssidrefs * 
                   chwall_bin_pol.max_types);
 
      chwall_buf->chwall_running_types_offset = 
-            htons(
-                  ntohs(chwall_buf->chwall_conflict_sets_offset) +
+            htonl(
+                  ntohl(chwall_buf->chwall_conflict_sets_offset) +
                   sizeof(domaintype_t) * chwall_bin_pol.max_conflictsets *
                   chwall_bin_pol.max_types);
 
      chwall_buf->chwall_conflict_aggregate_offset =
-            htons(
-                  ntohs(chwall_buf->chwall_running_types_offset) +
+            htonl(
+                  ntohl(chwall_buf->chwall_running_types_offset) +
                   sizeof(domaintype_t) * chwall_bin_pol.max_types);
 
-     ret = ntohs(chwall_buf->chwall_conflict_aggregate_offset) +
+     ret = ntohl(chwall_buf->chwall_conflict_aggregate_offset) +
             sizeof(domaintype_t) * chwall_bin_pol.max_types;
 
      /* now copy buffers over */
-     arrcpy16((u16 *)(buf + ntohs(chwall_buf->chwall_ssid_offset)),
+     arrcpy16((u16 *)(buf + ntohl(chwall_buf->chwall_ssid_offset)),
              chwall_bin_pol.ssidrefs,
              chwall_bin_pol.max_ssidrefs * chwall_bin_pol.max_types);
 
-     arrcpy16((u16 *)(buf + ntohs(chwall_buf->chwall_conflict_sets_offset)),
+     arrcpy16((u16 *)(buf + ntohl(chwall_buf->chwall_conflict_sets_offset)),
              chwall_bin_pol.conflict_sets,
              chwall_bin_pol.max_conflictsets * chwall_bin_pol.max_types);
 
-     arrcpy16((u16 *)(buf + ntohs(chwall_buf->chwall_running_types_offset)),
+     arrcpy16((u16 *)(buf + ntohl(chwall_buf->chwall_running_types_offset)),
              chwall_bin_pol.running_types,
              chwall_bin_pol.max_types);
 
-     arrcpy16((u16 *)(buf + 
ntohs(chwall_buf->chwall_conflict_aggregate_offset)),
+     arrcpy16((u16 *)(buf + 
ntohl(chwall_buf->chwall_conflict_aggregate_offset)),
              chwall_bin_pol.conflict_aggregate_set,
              chwall_bin_pol.max_types);
      return ret;
@@ -226,14 +226,20 @@
        void *ssids = NULL, *conflict_sets = NULL, *running_types = NULL, 
*conflict_aggregate_set = NULL;       
 
         /* rewrite the policy due to endianess */
-        chwall_buf->policy_code                      = 
ntohs(chwall_buf->policy_code);
-        chwall_buf->chwall_max_types                 = 
ntohs(chwall_buf->chwall_max_types);
-        chwall_buf->chwall_max_ssidrefs              = 
ntohs(chwall_buf->chwall_max_ssidrefs);
-        chwall_buf->chwall_max_conflictsets          = 
ntohs(chwall_buf->chwall_max_conflictsets);
-        chwall_buf->chwall_ssid_offset               = 
ntohs(chwall_buf->chwall_ssid_offset);
-        chwall_buf->chwall_conflict_sets_offset      = 
ntohs(chwall_buf->chwall_conflict_sets_offset);
-        chwall_buf->chwall_running_types_offset      = 
ntohs(chwall_buf->chwall_running_types_offset);
-        chwall_buf->chwall_conflict_aggregate_offset = 
ntohs(chwall_buf->chwall_conflict_aggregate_offset);
+        chwall_buf->policy_code                      = 
ntohl(chwall_buf->policy_code);
+        chwall_buf->policy_version                   = 
ntohl(chwall_buf->policy_version);
+        chwall_buf->chwall_max_types                 = 
ntohl(chwall_buf->chwall_max_types);
+        chwall_buf->chwall_max_ssidrefs              = 
ntohl(chwall_buf->chwall_max_ssidrefs);
+        chwall_buf->chwall_max_conflictsets          = 
ntohl(chwall_buf->chwall_max_conflictsets);
+        chwall_buf->chwall_ssid_offset               = 
ntohl(chwall_buf->chwall_ssid_offset);
+        chwall_buf->chwall_conflict_sets_offset      = 
ntohl(chwall_buf->chwall_conflict_sets_offset);
+        chwall_buf->chwall_running_types_offset      = 
ntohl(chwall_buf->chwall_running_types_offset);
+        chwall_buf->chwall_conflict_aggregate_offset = 
ntohl(chwall_buf->chwall_conflict_aggregate_offset);
+
+       /* policy type and version checks */
+       if ((chwall_buf->policy_code != ACM_CHINESE_WALL_POLICY) ||
+           (chwall_buf->policy_version != ACM_CHWALL_VERSION))
+               return -EINVAL;
 
        /* 1. allocate new buffers */
        ssids = xmalloc_array(domaintype_t, 
chwall_buf->chwall_max_types*chwall_buf->chwall_max_ssidrefs);
diff -r 0301cccd14f1 -r d18f732c0a5f xen/acm/acm_core.c
--- a/xen/acm/acm_core.c        Tue Aug  2 09:31:47 2005
+++ b/xen/acm/acm_core.c        Tue Aug  2 09:37:00 2005
@@ -120,7 +120,6 @@
         if (ntohl(pol->magic) == ACM_MAGIC) {
             rc = acm_set_policy((void *)_policy_start,
                                 (u16)_policy_len,
-                                ACM_USE_SECURITY_POLICY,
                                 0);
             if (rc == ACM_OK) {
                 printf("Policy len  0x%lx, start at 
%p.\n",_policy_len,_policy_start);
diff -r 0301cccd14f1 -r d18f732c0a5f xen/acm/acm_policy.c
--- a/xen/acm/acm_policy.c      Tue Aug  2 09:31:47 2005
+++ b/xen/acm/acm_policy.c      Tue Aug  2 09:37:00 2005
@@ -6,9 +6,8 @@
  * Author:
  * Reiner Sailer <sailer@xxxxxxxxxxxxxx>
  *
- * Contributions:
+ * Contributors:
  * Stefan Berger <stefanb@xxxxxxxxxxxxxx>
- *     support for network-byte-order binary policies
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -27,29 +26,20 @@
 #include <xen/lib.h>
 #include <xen/delay.h>
 #include <xen/sched.h>
-#include <public/policy_ops.h>
+#include <public/acm_ops.h>
 #include <acm/acm_core.h>
 #include <acm/acm_hooks.h>
 #include <acm/acm_endian.h>
 
 int
-acm_set_policy(void *buf, u16 buf_size, u16 policy, int isuserbuffer)
+acm_set_policy(void *buf, u16 buf_size, int isuserbuffer)
 {
        u8 *policy_buffer = NULL;
        struct acm_policy_buffer *pol;
        
-       if (policy != ACM_USE_SECURITY_POLICY) {
-               printk("%s: Loading incompatible policy (running: %s).\n", 
__func__,
-                      ACM_POLICY_NAME(ACM_USE_SECURITY_POLICY));
-               return -EFAULT;
-       }
-       /* now check correct buffer sizes for policy combinations */
-       if (policy == ACM_NULL_POLICY) {
-               printkd("%s: NULL Policy, no policy needed.\n", __func__);
-               goto out;
-       }
        if (buf_size < sizeof(struct acm_policy_buffer))
                return -EFAULT;
+
        /* 1. copy buffer from domain */
        if ((policy_buffer = xmalloc_array(u8, buf_size)) == NULL)
            goto error_free;
@@ -58,17 +48,17 @@
                        printk("%s: Error copying!\n",__func__);
                        goto error_free;
                }
-       } else {
+       } else
                memcpy(policy_buffer, buf, buf_size);
-       }
+
        /* 2. some sanity checking */
        pol = (struct acm_policy_buffer *)policy_buffer;
 
        if ((ntohl(pol->magic) != ACM_MAGIC) || 
-           (ntohs(pol->primary_policy_code) != 
acm_bin_pol.primary_policy_code) ||
-           (ntohs(pol->secondary_policy_code) != 
acm_bin_pol.secondary_policy_code) ||
-           (ntohl(pol->policyversion) != POLICY_INTERFACE_VERSION)) {
-               printkd("%s: Wrong policy magics!\n", __func__);
+           (ntohl(pol->policy_version) != ACM_POLICY_VERSION) ||
+           (ntohl(pol->primary_policy_code) != 
acm_bin_pol.primary_policy_code) ||
+           (ntohl(pol->secondary_policy_code) != 
acm_bin_pol.secondary_policy_code)) {
+               printkd("%s: Wrong policy magics or versions!\n", __func__);
                goto error_free;
        }
        if (buf_size != ntohl(pol->len)) {
@@ -79,21 +69,19 @@
        /* get bin_policy lock and rewrite policy (release old one) */
        write_lock(&acm_bin_pol_rwlock);
 
-       /* 3. now get/set primary policy data */
-       if (acm_primary_ops->set_binary_policy(buf + 
ntohs(pol->primary_buffer_offset), 
-                                               
ntohs(pol->secondary_buffer_offset) -
-                                              
ntohs(pol->primary_buffer_offset))) {
+       /* 3. set primary policy data */
+       if (acm_primary_ops->set_binary_policy(buf + 
ntohl(pol->primary_buffer_offset),
+                                               
ntohl(pol->secondary_buffer_offset) -
+                                              
ntohl(pol->primary_buffer_offset))) {
                goto error_lock_free;
        }
-       /* 4. now get/set secondary policy data */
-       if (acm_secondary_ops->set_binary_policy(buf + 
ntohs(pol->secondary_buffer_offset),
+       /* 4. set secondary policy data */
+       if (acm_secondary_ops->set_binary_policy(buf + 
ntohl(pol->secondary_buffer_offset),
                                                 ntohl(pol->len) - 
-                                                
ntohs(pol->secondary_buffer_offset))) {
+                                                
ntohl(pol->secondary_buffer_offset))) {
                goto error_lock_free;
        }
        write_unlock(&acm_bin_pol_rwlock);
- out:
-       printk("%s: Done .\n", __func__);
        if (policy_buffer != NULL)
                xfree(policy_buffer);
        return ACM_OK;
@@ -121,26 +109,25 @@
      /* future: read policy from file and set it */
      bin_pol = (struct acm_policy_buffer *)policy_buffer;
      bin_pol->magic = htonl(ACM_MAGIC);
-     bin_pol->policyversion = htonl(POLICY_INTERFACE_VERSION);
-     bin_pol->primary_policy_code = htons(acm_bin_pol.primary_policy_code);
-     bin_pol->secondary_policy_code = htons(acm_bin_pol.secondary_policy_code);
+     bin_pol->primary_policy_code = htonl(acm_bin_pol.primary_policy_code);
+     bin_pol->secondary_policy_code = htonl(acm_bin_pol.secondary_policy_code);
 
      bin_pol->len = htonl(sizeof(struct acm_policy_buffer));
-     bin_pol->primary_buffer_offset = htons(ntohl(bin_pol->len));
-     bin_pol->secondary_buffer_offset = htons(ntohl(bin_pol->len));
+     bin_pol->primary_buffer_offset = htonl(ntohl(bin_pol->len));
+     bin_pol->secondary_buffer_offset = htonl(ntohl(bin_pol->len));
      
-     ret = acm_primary_ops->dump_binary_policy (policy_buffer + 
ntohs(bin_pol->primary_buffer_offset),
-                                      buf_size - 
ntohs(bin_pol->primary_buffer_offset));
+     ret = acm_primary_ops->dump_binary_policy (policy_buffer + 
ntohl(bin_pol->primary_buffer_offset),
+                                      buf_size - 
ntohl(bin_pol->primary_buffer_offset));
      if (ret < 0) {
             printk("%s: ERROR creating chwallpolicy buffer.\n", __func__);
             read_unlock(&acm_bin_pol_rwlock);
             return -1;
      }
      bin_pol->len = htonl(ntohl(bin_pol->len) + ret);
-     bin_pol->secondary_buffer_offset = htons(ntohl(bin_pol->len));
+     bin_pol->secondary_buffer_offset = htonl(ntohl(bin_pol->len));
 
-     ret = acm_secondary_ops->dump_binary_policy(policy_buffer + 
ntohs(bin_pol->secondary_buffer_offset), 
-                                   buf_size - 
ntohs(bin_pol->secondary_buffer_offset));
+     ret = acm_secondary_ops->dump_binary_policy(policy_buffer + 
ntohl(bin_pol->secondary_buffer_offset),
+                                   buf_size - 
ntohl(bin_pol->secondary_buffer_offset));
      if (ret < 0) {
             printk("%s: ERROR creating chwallpolicy buffer.\n", __func__);
             read_unlock(&acm_bin_pol_rwlock);
@@ -178,11 +165,10 @@
             goto error_lock_free;
 
      acm_stats.magic = htonl(ACM_MAGIC);
-     acm_stats.policyversion = htonl(POLICY_INTERFACE_VERSION);
-     acm_stats.primary_policy_code = htons(acm_bin_pol.primary_policy_code);
-     acm_stats.secondary_policy_code = 
htons(acm_bin_pol.secondary_policy_code);
-     acm_stats.primary_stats_offset = htons(sizeof(struct acm_stats_buffer));
-     acm_stats.secondary_stats_offset = htons(sizeof(struct acm_stats_buffer) 
+ len1);
+     acm_stats.primary_policy_code = htonl(acm_bin_pol.primary_policy_code);
+     acm_stats.secondary_policy_code = 
htonl(acm_bin_pol.secondary_policy_code);
+     acm_stats.primary_stats_offset = htonl(sizeof(struct acm_stats_buffer));
+     acm_stats.secondary_stats_offset = htonl(sizeof(struct acm_stats_buffer) 
+ len1);
      acm_stats.len = htonl(sizeof(struct acm_stats_buffer) + len1 + len2);
      memcpy(stats_buffer, &acm_stats, sizeof(struct acm_stats_buffer));
 
diff -r 0301cccd14f1 -r d18f732c0a5f xen/acm/acm_simple_type_enforcement_hooks.c
--- a/xen/acm/acm_simple_type_enforcement_hooks.c       Tue Aug  2 09:31:47 2005
+++ b/xen/acm/acm_simple_type_enforcement_hooks.c       Tue Aug  2 09:37:00 2005
@@ -140,15 +140,15 @@
      struct acm_ste_policy_buffer *ste_buf = (struct acm_ste_policy_buffer 
*)buf;
      int ret = 0;
 
-     ste_buf->ste_max_types = htons(ste_bin_pol.max_types);
-     ste_buf->ste_max_ssidrefs = htons(ste_bin_pol.max_ssidrefs);
-     ste_buf->policy_code = htons(ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY);
-     ste_buf->ste_ssid_offset = htons(sizeof(struct acm_ste_policy_buffer));
-     ret = ntohs(ste_buf->ste_ssid_offset) +
+     ste_buf->ste_max_types = htonl(ste_bin_pol.max_types);
+     ste_buf->ste_max_ssidrefs = htonl(ste_bin_pol.max_ssidrefs);
+     ste_buf->policy_code = htonl(ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY);
+     ste_buf->ste_ssid_offset = htonl(sizeof(struct acm_ste_policy_buffer));
+     ret = ntohl(ste_buf->ste_ssid_offset) +
             
sizeof(domaintype_t)*ste_bin_pol.max_ssidrefs*ste_bin_pol.max_types;
 
      /* now copy buffer over */
-     arrcpy(buf + ntohs(ste_buf->ste_ssid_offset),
+     arrcpy(buf + ntohl(ste_buf->ste_ssid_offset),
            ste_bin_pol.ssidrefs,
            sizeof(domaintype_t),
              ste_bin_pol.max_ssidrefs*ste_bin_pol.max_types);
@@ -276,10 +276,16 @@
      int i;
 
      /* Convert endianess of policy */
-     ste_buf->policy_code = ntohs(ste_buf->policy_code);
-     ste_buf->ste_max_types = ntohs(ste_buf->ste_max_types);
-     ste_buf->ste_max_ssidrefs = ntohs(ste_buf->ste_max_ssidrefs);
-     ste_buf->ste_ssid_offset = ntohs(ste_buf->ste_ssid_offset);
+     ste_buf->policy_code = ntohl(ste_buf->policy_code);
+     ste_buf->policy_version = ntohl(ste_buf->policy_version);
+     ste_buf->ste_max_types = ntohl(ste_buf->ste_max_types);
+     ste_buf->ste_max_ssidrefs = ntohl(ste_buf->ste_max_ssidrefs);
+     ste_buf->ste_ssid_offset = ntohl(ste_buf->ste_ssid_offset);
+
+     /* policy type and version checks */
+     if ((ste_buf->policy_code != ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY) ||
+        (ste_buf->policy_version != ACM_STE_VERSION))
+            return -EINVAL;
 
      /* 1. create and copy-in new ssidrefs buffer */
      ssidrefsbuf = xmalloc_array(u8, 
sizeof(domaintype_t)*ste_buf->ste_max_types*ste_buf->ste_max_ssidrefs);
diff -r 0301cccd14f1 -r d18f732c0a5f xen/arch/x86/x86_32/entry.S
--- a/xen/arch/x86/x86_32/entry.S       Tue Aug  2 09:31:47 2005
+++ b/xen/arch/x86/x86_32/entry.S       Tue Aug  2 09:37:00 2005
@@ -751,7 +751,7 @@
         .long do_boot_vcpu
         .long do_ni_hypercall       /* 25 */
         .long do_mmuext_op
-        .long do_policy_op          /* 27 */
+        .long do_acm_op             /* 27 */
         .rept NR_hypercalls-((.-hypercall_table)/4)
         .long do_ni_hypercall
         .endr
diff -r 0301cccd14f1 -r d18f732c0a5f xen/arch/x86/x86_64/entry.S
--- a/xen/arch/x86/x86_64/entry.S       Tue Aug  2 09:31:47 2005
+++ b/xen/arch/x86/x86_64/entry.S       Tue Aug  2 09:37:00 2005
@@ -587,7 +587,7 @@
         .quad do_boot_vcpu
         .quad do_set_segment_base   /* 25 */
         .quad do_mmuext_op
-        .quad do_policy_op
+        .quad do_acm_op
         .rept NR_hypercalls-((.-hypercall_table)/4)
         .quad do_ni_hypercall
         .endr
diff -r 0301cccd14f1 -r d18f732c0a5f xen/include/acm/acm_core.h
--- a/xen/include/acm/acm_core.h        Tue Aug  2 09:31:47 2005
+++ b/xen/include/acm/acm_core.h        Tue Aug  2 09:37:00 2005
@@ -21,7 +21,7 @@
 #include <xen/spinlock.h>
 #include <public/acm.h>
 #include <xen/acm_policy.h>
-#include <public/policy_ops.h>
+#include <public/acm_ops.h>
 
 /* Xen-internal representation of the binary policy */
 struct acm_binary_policy {
@@ -113,7 +113,7 @@
 /* protos */
 int acm_init_domain_ssid(domid_t id, ssidref_t ssidref);
 int acm_free_domain_ssid(struct acm_ssid_domain *ssid);
-int acm_set_policy(void *buf, u16 buf_size, u16 policy, int isuserbuffer);
+int acm_set_policy(void *buf, u16 buf_size, int isuserbuffer);
 int acm_get_policy(void *buf, u16 buf_size);
 int acm_dump_statistics(void *buf, u16 buf_size);
 
diff -r 0301cccd14f1 -r d18f732c0a5f xen/include/public/acm.h
--- a/xen/include/public/acm.h  Tue Aug  2 09:31:47 2005
+++ b/xen/include/public/acm.h  Tue Aug  2 09:37:00 2005
@@ -71,6 +71,14 @@
        (X == ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY) ? "CHINESE 
WALL AND SIMPLE TYPE ENFORCEMENT policy" : \
        "UNDEFINED policy"
 
+/* the following policy versions must be increased
+ * whenever the interpretation of the related
+ * policy's data structure changes
+ */
+#define ACM_POLICY_VERSION     1
+#define ACM_CHWALL_VERSION     1
+#define ACM_STE_VERSION                1
+
 /* defines a ssid reference used by xen */
 typedef u32 ssidref_t;
 
@@ -102,46 +110,53 @@
 #define ACM_MAGIC              0x0001debc
 
 /* each offset in bytes from start of the struct they
- *   the are part of */
+ * are part of */
+
 /* each buffer consists of all policy information for
  * the respective policy given in the policy code
+ *
+ * acm_policy_buffer, acm_chwall_policy_buffer,
+ * and acm_ste_policy_buffer need to stay 32-bit aligned
+ * because we create binary policies also with external
+ * tools that assume packed representations (e.g. the java tool)
  */
 struct acm_policy_buffer {
+       u32 policy_version; /* ACM_POLICY_VERSION */
         u32 magic;
-       u32 policyversion;
        u32 len;
-       u16 primary_policy_code;
-       u16 primary_buffer_offset;
-       u16 secondary_policy_code;
-       u16 secondary_buffer_offset;
+       u32 primary_policy_code;
+       u32 primary_buffer_offset;
+       u32 secondary_policy_code;
+       u32 secondary_buffer_offset;
 };
 
 struct acm_chwall_policy_buffer {
-       u16 policy_code;
-       u16 chwall_max_types;
-       u16 chwall_max_ssidrefs;
-       u16 chwall_max_conflictsets;
-       u16 chwall_ssid_offset;
-       u16 chwall_conflict_sets_offset;
-       u16 chwall_running_types_offset;
-       u16 chwall_conflict_aggregate_offset;
+       u32 policy_version; /* ACM_CHWALL_VERSION */
+       u32 policy_code;
+       u32 chwall_max_types;
+       u32 chwall_max_ssidrefs;
+       u32 chwall_max_conflictsets;
+       u32 chwall_ssid_offset;
+       u32 chwall_conflict_sets_offset;
+       u32 chwall_running_types_offset;
+       u32 chwall_conflict_aggregate_offset;
 };
 
 struct acm_ste_policy_buffer {
-       u16 policy_code;
-       u16 ste_max_types;
-       u16 ste_max_ssidrefs;
-       u16 ste_ssid_offset;
+       u32 policy_version; /* ACM_STE_VERSION */
+       u32 policy_code;
+       u32 ste_max_types;
+       u32 ste_max_ssidrefs;
+       u32 ste_ssid_offset;
 };
 
 struct acm_stats_buffer {
         u32 magic;
-       u32 policyversion;
        u32 len;
-       u16 primary_policy_code;
-       u16 primary_stats_offset;
-       u16 secondary_policy_code;
-       u16 secondary_stats_offset;
+       u32 primary_policy_code;
+       u32 primary_stats_offset;
+       u32 secondary_policy_code;
+       u32 secondary_stats_offset;
 };
 
 struct acm_ste_stats_buffer {
diff -r 0301cccd14f1 -r d18f732c0a5f xen/include/public/xen.h
--- a/xen/include/public/xen.h  Tue Aug  2 09:31:47 2005
+++ b/xen/include/public/xen.h  Tue Aug  2 09:37:00 2005
@@ -58,7 +58,7 @@
 #define __HYPERVISOR_boot_vcpu            24
 #define __HYPERVISOR_set_segment_base     25 /* x86/64 only */
 #define __HYPERVISOR_mmuext_op            26
-#define __HYPERVISOR_policy_op            27
+#define __HYPERVISOR_acm_op               27
 
 /* 
  * VIRTUAL INTERRUPTS
diff -r 0301cccd14f1 -r d18f732c0a5f tools/policy/Makefile
--- a/tools/policy/Makefile     Tue Aug  2 09:31:47 2005
+++ /dev/null   Tue Aug  2 09:37:00 2005
@@ -1,36 +0,0 @@
-XEN_ROOT = ../..
-include $(XEN_ROOT)/tools/Rules.mk
-
-SRCS     = policy_tool.c
-CFLAGS   += -static
-CFLAGS   += -Wall
-CFLAGS   += -Werror
-CFLAGS   += -O3
-CFLAGS   += -fno-strict-aliasing
-CFLAGS   += -I.
-
-all: build
-build: mk-symlinks
-       $(MAKE) policy_tool
-
-default: all
-
-install: all
-
-policy_tool : policy_tool.c
-       $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
-
-clean:
-       rm -rf policy_tool xen
-
-
-LINUX_ROOT := $(XEN_ROOT)/linux-2.6-xen-sparse
-mk-symlinks:
-       [ -e xen/linux ] || mkdir -p xen/linux
-       [ -e xen/io ]    || mkdir -p xen/io
-       ( cd xen >/dev/null ; \
-         ln -sf ../$(XEN_ROOT)/xen/include/public/*.h . )
-       ( cd xen/io >/dev/null ; \
-         ln -sf ../../$(XEN_ROOT)/xen/include/public/io/*.h . )
-       ( cd xen/linux >/dev/null ; \
-         ln -sf ../../$(LINUX_ROOT)/include/asm-xen/linux-public/*.h . )
diff -r 0301cccd14f1 -r d18f732c0a5f tools/policy/policy_tool.c
--- a/tools/policy/policy_tool.c        Tue Aug  2 09:31:47 2005
+++ /dev/null   Tue Aug  2 09:37:00 2005
@@ -1,552 +0,0 @@
-/****************************************************************
- * policy_tool.c
- * 
- * Copyright (C) 2005 IBM Corporation
- *
- * Authors:
- * Reiner Sailer <sailer@xxxxxxxxxxxxxx>
- * Stefan Berger <stefanb@xxxxxxxxxxxxxx>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, version 2 of the
- * License. 
- *
- * sHype policy management tool. This code runs in a domain and
- *     manages the Xen security policy by interacting with the
- *     Xen access control module via a /proc/xen/privcmd proc-ioctl, 
- *     which is translated into a policy_op hypercall into Xen.
- * 
- * todo: implement setpolicy to dynamically set a policy cache.
- */
-#include <unistd.h>
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <string.h>
-#include <stdint.h>
-#include <netinet/in.h>
-
-typedef uint8_t            u8;
-typedef uint16_t           u16;
-typedef uint32_t           u32;
-typedef uint64_t           u64;
-typedef int8_t             s8;
-typedef int16_t            s16;
-typedef int32_t            s32;
-typedef int64_t            s64;
-
-#include <xen/acm.h>
-
-#include <xen/policy_ops.h>
-
-#include <xen/linux/privcmd.h>
-
-#define ERROR(_m, _a...)       \
-       fprintf(stderr, "ERROR: " _m "\n" , ## _a )
-
-#define PERROR(_m, _a...) \
-       fprintf(stderr, "ERROR: " _m " (%d = %s)\n" , ## _a ,   \
-            errno, strerror(errno))
-
-static inline int do_policycmd(int xc_handle,
-                             unsigned int cmd, 
-                             unsigned long data)
-{
-    return ioctl(xc_handle, cmd, data);
-}
-
-static inline int do_xen_hypercall(int xc_handle,
-                                   privcmd_hypercall_t *hypercall)
-{
-    return do_policycmd(xc_handle,
-                      IOCTL_PRIVCMD_HYPERCALL, 
-                      (unsigned long)hypercall);
-}
-
-static inline int do_policy_op(int xc_handle, policy_op_t *op)
-{
-    int ret = -1;
-    privcmd_hypercall_t hypercall;
-
-    op->interface_version = POLICY_INTERFACE_VERSION;
-
-    hypercall.op     = __HYPERVISOR_policy_op;
-    hypercall.arg[0] = (unsigned long)op;
-
-    if ( mlock(op, sizeof(*op)) != 0 )
-    {
-        PERROR("Could not lock memory for Xen policy hypercall");
-        goto out1;
-    }
-
-    if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 )
-    {
-        if ( errno == EACCES )
-            fprintf(stderr, "POLICY operation failed -- need to"
-                    " rebuild the user-space tool set?\n");
-        goto out2;
-    }
-
- out2: (void)munlock(op, sizeof(*op));
- out1: return ret;
-}
-
-/*************************** DUMPS *******************************/
-
-void acm_dump_chinesewall_buffer(void *buf, int buflen) {
-
-       struct acm_chwall_policy_buffer *cwbuf = (struct 
acm_chwall_policy_buffer *)buf;
-       domaintype_t *ssids, *conflicts, *running_types, *conflict_aggregate;
-       int i,j;
-
-       
-       if (htons(cwbuf->policy_code) != ACM_CHINESE_WALL_POLICY) {
-               printf("CHINESE WALL POLICY CODE not found ERROR!!\n");
-               return;
-       }
-       printf("\n\nChinese Wall policy:\n");
-       printf("====================\n");
-       printf("Max Types     = %x.\n", ntohs(cwbuf->chwall_max_types));
-       printf("Max Ssidrefs  = %x.\n", ntohs(cwbuf->chwall_max_ssidrefs));
-       printf("Max ConfSets  = %x.\n", ntohs(cwbuf->chwall_max_conflictsets));
-       printf("Ssidrefs Off  = %x.\n", ntohs(cwbuf->chwall_ssid_offset));
-       printf("Conflicts Off = %x.\n", 
ntohs(cwbuf->chwall_conflict_sets_offset));
-       printf("Runing T. Off = %x.\n", 
ntohs(cwbuf->chwall_running_types_offset));
-       printf("C. Agg. Off   = %x.\n", 
ntohs(cwbuf->chwall_conflict_aggregate_offset));
-       printf("\nSSID To CHWALL-Type matrix:\n");
-
-       ssids = (domaintype_t *)(buf + ntohs(cwbuf->chwall_ssid_offset));
-       for(i=0; i< ntohs(cwbuf->chwall_max_ssidrefs); i++) {
-               printf("\n   ssidref%2x:  ", i);
-               for(j=0; j< ntohs(cwbuf->chwall_max_types); j++)
-                       printf("%02x ", 
ntohs(ssids[i*ntohs(cwbuf->chwall_max_types) + j]));
-       }
-       printf("\n\nConfict Sets:\n");
-       conflicts = (domaintype_t *)(buf + 
ntohs(cwbuf->chwall_conflict_sets_offset));
-       for(i=0; i< ntohs(cwbuf->chwall_max_conflictsets); i++) {
-               printf("\n   c-set%2x:    ", i);
-               for(j=0; j< ntohs(cwbuf->chwall_max_types); j++)
-                       printf("%02x ", 
ntohs(conflicts[i*ntohs(cwbuf->chwall_max_types) +j]));
-       }
-       printf("\n");
-
-       printf("\nRunning\nTypes:         ");
-       if (ntohs(cwbuf->chwall_running_types_offset)) {
-               running_types = (domaintype_t *)(buf + 
ntohs(cwbuf->chwall_running_types_offset));
-               for(i=0; i< ntohs(cwbuf->chwall_max_types); i++) {
-                       printf("%02x ", ntohs(running_types[i]));
-               }
-               printf("\n");
-       } else {
-               printf("Not Reported!\n");
-       }
-       printf("\nConflict\nAggregate Set: ");
-       if (ntohs(cwbuf->chwall_conflict_aggregate_offset)) {
-               conflict_aggregate = (domaintype_t *)(buf + 
ntohs(cwbuf->chwall_conflict_aggregate_offset));
-               for(i=0; i< ntohs(cwbuf->chwall_max_types); i++) {
-                       printf("%02x ", ntohs(conflict_aggregate[i]));
-               }
-               printf("\n\n");
-       } else {
-               printf("Not Reported!\n");
-       }
-}
-
-void acm_dump_ste_buffer(void *buf, int buflen) {
-
-       struct acm_ste_policy_buffer *stebuf = (struct acm_ste_policy_buffer 
*)buf;
-       domaintype_t *ssids;
-       int i,j;
-
-       
-       if (ntohs(stebuf->policy_code) != ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY) {
-               printf("SIMPLE TYPE ENFORCEMENT POLICY CODE not found 
ERROR!!\n");
-               return;
-       }
-       printf("\nSimple Type Enforcement policy:\n");
-       printf("===============================\n");
-       printf("Max Types     = %x.\n", ntohs(stebuf->ste_max_types));
-       printf("Max Ssidrefs  = %x.\n", ntohs(stebuf->ste_max_ssidrefs));
-       printf("Ssidrefs Off  = %x.\n", ntohs(stebuf->ste_ssid_offset));
-       printf("\nSSID To STE-Type matrix:\n");
-       
-       ssids = (domaintype_t *)(buf + ntohs(stebuf->ste_ssid_offset));
-       for(i=0; i< ntohs(stebuf->ste_max_ssidrefs); i++) {
-               printf("\n   ssidref%2x: ", i);
-               for(j=0; j< ntohs(stebuf->ste_max_types); j++)
-                       printf("%02x ", 
ntohs(ssids[i*ntohs(stebuf->ste_max_types) +j]));
-       }
-       printf("\n\n");
-}
-
-void acm_dump_policy_buffer(void *buf, int buflen) {
-       struct acm_policy_buffer *pol = (struct acm_policy_buffer *)buf;
-
-       printf("\nPolicy dump:\n");
-       printf("============\n");
-       printf("Magic     = %x.\n", ntohl(pol->magic));
-       printf("PolVer    = %x.\n", ntohl(pol->policyversion));
-       printf("Len       = %x.\n", ntohl(pol->len));
-       printf("Primary   = %s (c=%x, off=%x).\n",
-              ACM_POLICY_NAME(ntohs(pol->primary_policy_code)),
-              ntohs(pol->primary_policy_code), 
ntohs(pol->primary_buffer_offset));
-       printf("Secondary = %s (c=%x, off=%x).\n",
-              ACM_POLICY_NAME(ntohs(pol->secondary_policy_code)),
-              ntohs(pol->secondary_policy_code), 
ntohs(pol->secondary_buffer_offset));
-       switch (ntohs(pol->primary_policy_code)) {
-       case ACM_CHINESE_WALL_POLICY:
-               
acm_dump_chinesewall_buffer(buf+ntohs(pol->primary_buffer_offset), 
-                                            ntohl(pol->len) - 
ntohs(pol->primary_buffer_offset));
-               break;
-       case ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY:
-               acm_dump_ste_buffer(buf+ntohs(pol->primary_buffer_offset), 
-                                   ntohl(pol->len) - 
ntohs(pol->primary_buffer_offset));
-               break;
-       case ACM_NULL_POLICY:
-               printf("Primary policy is NULL Policy (n/a).\n");
-               break;
-       default:
-               printf("UNKNOWN POLICY!\n");
-       }
-       switch (ntohs(pol->secondary_policy_code)) {
-       case ACM_CHINESE_WALL_POLICY:
-               
acm_dump_chinesewall_buffer(buf+ntohs(pol->secondary_buffer_offset), 
-                                            ntohl(pol->len) - 
ntohs(pol->secondary_buffer_offset));
-               break;
-       case ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY:
-               acm_dump_ste_buffer(buf+ntohs(pol->secondary_buffer_offset), 
-                                   ntohl(pol->len) - 
ntohs(pol->secondary_buffer_offset));
-               break;
-       case ACM_NULL_POLICY:
-               printf("Secondary policy is NULL Policy (n/a).\n");
-               break;
-       default:
-               printf("UNKNOWN POLICY!\n");
-       }
-}
-
-/*************************** set policy ****************************/
-
-int acm_domain_set_chwallpolicy(void *bufstart, int buflen) {
-#define CWALL_MAX_SSIDREFS             6
-#define CWALL_MAX_TYPES                10
-#define CWALL_MAX_CONFLICTSETS         2
-
-     struct acm_chwall_policy_buffer *chwall_bin_pol = (struct 
acm_chwall_policy_buffer *)bufstart;
-     domaintype_t *ssidrefs, *conflicts;
-     int ret = 0;
-     int j;
-
-     chwall_bin_pol->chwall_max_types = htons(CWALL_MAX_TYPES);
-     chwall_bin_pol->chwall_max_ssidrefs = htons(CWALL_MAX_SSIDREFS);
-     chwall_bin_pol->policy_code = htons(ACM_CHINESE_WALL_POLICY);
-     chwall_bin_pol->chwall_ssid_offset = htons(sizeof(struct 
acm_chwall_policy_buffer));
-     chwall_bin_pol->chwall_max_conflictsets = htons(CWALL_MAX_CONFLICTSETS);
-     chwall_bin_pol->chwall_conflict_sets_offset =
-        htons(
-            ntohs(chwall_bin_pol->chwall_ssid_offset) + 
-            sizeof(domaintype_t)*CWALL_MAX_SSIDREFS*CWALL_MAX_TYPES);
-     chwall_bin_pol->chwall_running_types_offset = 0; /* not set */
-     chwall_bin_pol->chwall_conflict_aggregate_offset = 0; /* not set */
-     ret += sizeof(struct acm_chwall_policy_buffer);
-     /* now push example ssids into the buffer (max_ssidrefs x max_types 
entries) */
-     /* check buffer size */
-     if ((buflen - ret) < 
(CWALL_MAX_TYPES*CWALL_MAX_SSIDREFS*sizeof(domaintype_t)))
-                          return -1; /* not enough space */
-
-     ssidrefs = (domaintype_t 
*)(bufstart+ntohs(chwall_bin_pol->chwall_ssid_offset));
-     memset(ssidrefs, 0, 
CWALL_MAX_TYPES*CWALL_MAX_SSIDREFS*sizeof(domaintype_t));
-
-     /* now set type j-1 for ssidref i+1 */
-     for(j=0; j<= CWALL_MAX_SSIDREFS; j++)
-         if ((0 < j) &&( j <= CWALL_MAX_TYPES))
-             ssidrefs[j*CWALL_MAX_TYPES + j - 1] = htons(1);
-
-     ret += CWALL_MAX_TYPES*CWALL_MAX_SSIDREFS*sizeof(domaintype_t);
-     if ((buflen - ret) < 
(CWALL_MAX_CONFLICTSETS*CWALL_MAX_TYPES*sizeof(domaintype_t)))
-                          return -1; /* not enough space */
-
-     /* now the chinese wall policy conflict sets*/
-     conflicts = (domaintype_t *)(bufstart + 
-                                 
ntohs(chwall_bin_pol->chwall_conflict_sets_offset));
-     memset((void *)conflicts, 0, 
CWALL_MAX_CONFLICTSETS*CWALL_MAX_TYPES*sizeof(domaintype_t));
-     /* just 1 conflict set [0]={2,3}, [1]={1,5,6} */
-     if (CWALL_MAX_TYPES > 3) {
-            conflicts[2] = htons(1); conflicts[3] = htons(1); /* {2,3} */
-            conflicts[CWALL_MAX_TYPES+1] = htons(1); 
conflicts[CWALL_MAX_TYPES+5] = htons(1); 
-            conflicts[CWALL_MAX_TYPES+6] = htons(1);/* {0,5,6} */
-     }
-     ret += sizeof(domaintype_t)*CWALL_MAX_CONFLICTSETS*CWALL_MAX_TYPES;
-     return ret;
-}
-
-int acm_domain_set_stepolicy(void *bufstart, int buflen) {
-#define STE_MAX_SSIDREFS        6
-#define STE_MAX_TYPES                  5
-       
-    struct acm_ste_policy_buffer *ste_bin_pol = (struct acm_ste_policy_buffer 
*)bufstart;
-    domaintype_t *ssidrefs;
-    int j, ret = 0;
-
-    ste_bin_pol->ste_max_types = htons(STE_MAX_TYPES);
-    ste_bin_pol->ste_max_ssidrefs = htons(STE_MAX_SSIDREFS);
-    ste_bin_pol->policy_code = htons(ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY);
-    ste_bin_pol->ste_ssid_offset = htons(sizeof(struct acm_ste_policy_buffer));
-    ret += sizeof(struct acm_ste_policy_buffer);
-    /* check buffer size */
-    if ((buflen - ret) < (STE_MAX_TYPES*STE_MAX_SSIDREFS*sizeof(domaintype_t)))
-           return -1; /* not enough space */
-
-     ssidrefs = (domaintype_t *)(bufstart+ntohs(ste_bin_pol->ste_ssid_offset));
-     memset(ssidrefs, 0, STE_MAX_TYPES*STE_MAX_SSIDREFS*sizeof(domaintype_t));
-     /* all types 1 for ssidref 1 */
-     for(j=0; j< STE_MAX_TYPES; j++)
-        ssidrefs[1*STE_MAX_TYPES +j] = htons(1);
-     /* now set type j-1 for ssidref j */
-     for(j=0; j< STE_MAX_SSIDREFS; j++)
-            if ((0 < j) &&( j <= STE_MAX_TYPES))
-                    ssidrefs[j*STE_MAX_TYPES + j - 1] = htons(1);
-     ret += STE_MAX_TYPES*STE_MAX_SSIDREFS*sizeof(domaintype_t);
-     return ret;
-}
-
-#define MAX_PUSH_BUFFER        16384
-u8 push_buffer[MAX_PUSH_BUFFER];
-
-int acm_domain_setpolicy(int xc_handle)
-{
-     int ret;
-     struct acm_policy_buffer *bin_pol;
-     policy_op_t op;
-
-     /* future: read policy from file and set it */
-     bin_pol = (struct acm_policy_buffer *)push_buffer;
-     bin_pol->magic = htonl(ACM_MAGIC);
-     bin_pol->policyversion = htonl(POLICY_INTERFACE_VERSION);
-     bin_pol->primary_policy_code = htons(ACM_CHINESE_WALL_POLICY);
-     bin_pol->secondary_policy_code = 
htons(ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY);
-
-     bin_pol->len = htonl(sizeof(struct acm_policy_buffer));
-     bin_pol->primary_buffer_offset = htons(ntohl(bin_pol->len));
-     ret = acm_domain_set_chwallpolicy(push_buffer + 
ntohs(bin_pol->primary_buffer_offset), 
-                                      MAX_PUSH_BUFFER - 
ntohs(bin_pol->primary_buffer_offset));
-     if (ret < 0) {
-            printf("ERROR creating chwallpolicy buffer.\n");
-            return -1;
-     }
-     bin_pol->len = htonl(ntohl(bin_pol->len) + ret);
-     bin_pol->secondary_buffer_offset = htons(ntohl(bin_pol->len));
-     ret = acm_domain_set_stepolicy(push_buffer + 
ntohs(bin_pol->secondary_buffer_offset), 
-                                   MAX_PUSH_BUFFER - 
ntohs(bin_pol->secondary_buffer_offset));
-     if (ret < 0) {
-            printf("ERROR creating chwallpolicy buffer.\n");
-            return -1;
-     }
-     bin_pol->len = htonl(ntohl(bin_pol->len) + ret);
-
-     /* dump it and then push it down into xen/acm */
-     acm_dump_policy_buffer(push_buffer, ntohl(bin_pol->len));
-     op.cmd = POLICY_SETPOLICY;
-     op.u.setpolicy.pushcache = (void *)push_buffer;
-     op.u.setpolicy.pushcache_size = ntohl(bin_pol->len);
-     op.u.setpolicy.policy_type = 
ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY;
-     ret = do_policy_op(xc_handle, &op);
-
-     if (ret)
-            printf("ERROR setting policy. Use 'xm dmesg' to see details.\n");
-     else
-            printf("Successfully changed policy.\n");
-     return ret;
-}
-
-/******************************* get policy ******************************/
-
-#define PULL_CACHE_SIZE                8192
-u8 pull_buffer[PULL_CACHE_SIZE];
-int acm_domain_getpolicy(int xc_handle)
-{
-     policy_op_t op;
-     int ret;
-
-     memset(pull_buffer, 0x00, sizeof(pull_buffer));
-     op.cmd = POLICY_GETPOLICY;
-     op.u.getpolicy.pullcache = (void *)pull_buffer;
-     op.u.getpolicy.pullcache_size = sizeof(pull_buffer);
-     ret = do_policy_op(xc_handle, &op);
-     /* dump policy  */
-     acm_dump_policy_buffer(pull_buffer, sizeof(pull_buffer));
-     return ret;
-}
-
-/************************ load binary policy ******************************/
-
-int acm_domain_loadpolicy(int xc_handle,
-                          const char *filename)
-{
-     struct stat mystat;
-     int ret, fd;
-     off_t len;
-     u8 *buffer;
-
-     if ((ret = stat(filename, &mystat))) {
-            printf("File %s not found.\n",filename);
-            goto out;
-     }
-
-     len = mystat.st_size;
-     if ((buffer = malloc(len)) == NULL) {
-            ret = -ENOMEM;
-            goto out;
-     }
-     if ((fd = open(filename, O_RDONLY)) <= 0) {
-            ret = -ENOENT;
-            printf("File %s not found.\n",filename);
-            goto free_out;
-     }
-     if (len == read(fd, buffer, len)) {
-            policy_op_t op;
-            /* dump it and then push it down into xen/acm */
-            acm_dump_policy_buffer(buffer, len);
-            op.cmd = POLICY_SETPOLICY;
-            op.u.setpolicy.pushcache = (void *)buffer;
-            op.u.setpolicy.pushcache_size = len;
-            op.u.setpolicy.policy_type = 
ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY;
-            ret = do_policy_op(xc_handle, &op);
-                     
-            if (ret)
-                    printf("ERROR setting policy. Use 'xm dmesg' to see 
details.\n");
-            else
-                    printf("Successfully changed policy.\n");
-                     
-     } else {
-            ret = -1;
-     }
-     close(fd);
- free_out:
-     free(buffer);
- out:
-     return ret;
-}
-
-/************************ dump hook statistics ******************************/
-void 
-dump_ste_stats(struct acm_ste_stats_buffer *ste_stats)
-{
-    printf("STE-Policy Security Hook Statistics:\n");
-    printf("ste: event_channel eval_count      = %d\n", 
ntohl(ste_stats->ec_eval_count));
-    printf("ste: event_channel denied_count    = %d\n", 
ntohl(ste_stats->ec_denied_count)); 
-    printf("ste: event_channel cache_hit_count = %d\n", 
ntohl(ste_stats->ec_cachehit_count));
-    printf("ste:\n");
-    printf("ste: grant_table   eval_count      = %d\n", 
ntohl(ste_stats->gt_eval_count));
-    printf("ste: grant_table   denied_count    = %d\n", 
ntohl(ste_stats->gt_denied_count)); 
-    printf("ste: grant_table   cache_hit_count = %d\n", 
ntohl(ste_stats->gt_cachehit_count));
-}
-
-#define PULL_STATS_SIZE                8192
-int acm_domain_dumpstats(int xc_handle)
-{
-    u8 stats_buffer[PULL_STATS_SIZE];
-    policy_op_t op;
-    int ret;
-    struct acm_stats_buffer *stats;
-
-    memset(stats_buffer, 0x00, sizeof(stats_buffer));
-    op.cmd = POLICY_DUMPSTATS;
-    op.u.dumpstats.pullcache = (void *)stats_buffer;
-    op.u.dumpstats.pullcache_size = sizeof(stats_buffer);
-    ret = do_policy_op(xc_handle, &op);
-
-    if (ret < 0) {
-       printf("ERROR dumping policy stats. Use 'xm dmesg' to see details.\n"); 
-       return ret;
-    }
-    stats = (struct acm_stats_buffer *)stats_buffer;
-
-    printf("\nPolicy dump:\n");
-    printf("============\n");
-    printf("Magic     = %x.\n", ntohl(stats->magic));
-    printf("PolVer    = %x.\n", ntohl(stats->policyversion));
-    printf("Len       = %x.\n", ntohl(stats->len));
-
-    switch(ntohs(stats->primary_policy_code)) {
-    case ACM_NULL_POLICY:
-           printf("NULL Policy: No statistics apply.\n");
-           break;
-    case ACM_CHINESE_WALL_POLICY:
-           printf("Chinese Wall Policy: No statistics apply.\n");
-           break;
-    case ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY:
-           dump_ste_stats((struct acm_ste_stats_buffer *)(stats_buffer + 
ntohs(stats->primary_stats_offset)));
-           break;
-    default:
-           printf("UNKNOWN PRIMARY POLICY ERROR!\n");
-    }
-    switch(ntohs(stats->secondary_policy_code)) {
-    case ACM_NULL_POLICY:
-           printf("NULL Policy: No statistics apply.\n");
-           break;
-    case ACM_CHINESE_WALL_POLICY:
-           printf("Chinese Wall Policy: No statistics apply.\n");
-           break;
-    case ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY:
-           dump_ste_stats((struct acm_ste_stats_buffer *)(stats_buffer + 
ntohs(stats->secondary_stats_offset)));
-           break;
-    default:
-           printf("UNKNOWN SECONDARY POLICY ERROR!\n");
-    }                
-    return ret;
-}
-
-/***************************** main **************************************/
-
-void
-usage(char *progname){
-       printf("Use: %s \n"
-              "\t setpolicy\n"
-              "\t getpolicy\n"
-              "\t dumpstats\n"
-              "\t loadpolicy <binary policy file>\n", progname);
-       exit(-1);
-}
-
-int
-main(int argc, char **argv) {
-
-       int policycmd_fd, ret;
-
-       if (argc < 2) 
-               usage(argv[0]);
-               
-       if ((policycmd_fd = open("/proc/xen/privcmd", O_RDONLY)) <= 0) {
-                   printf("ERROR: Could not open xen privcmd device!\n");
-                   exit(-1);
-       }
-           
-       if (!strcmp(argv[1], "setpolicy")) {
-               if (argc != 2)
-                       usage(argv[0]);
-               ret = acm_domain_setpolicy(policycmd_fd);
-       } else if (!strcmp(argv[1], "getpolicy")) {
-               if (argc != 2)
-                       usage(argv[0]);
-               ret = acm_domain_getpolicy(policycmd_fd);
-       } else if (!strcmp(argv[1], "loadpolicy")) {
-               if (argc != 3) 
-                       usage(argv[0]);
-               ret = acm_domain_loadpolicy(policycmd_fd, argv[2]);
-       } else if (!strcmp(argv[1], "dumpstats")) {
-               if (argc != 2) 
-                       usage(argv[0]);
-               ret = acm_domain_dumpstats(policycmd_fd);
-       } else
-               usage(argv[0]);
-
-       close(policycmd_fd);
-       return ret;
-}
diff -r 0301cccd14f1 -r d18f732c0a5f xen/common/policy_ops.c
--- a/xen/common/policy_ops.c   Tue Aug  2 09:31:47 2005
+++ /dev/null   Tue Aug  2 09:37:00 2005
@@ -1,133 +0,0 @@
-/******************************************************************************
- * policy_ops.c
- * 
- * Copyright (C) 2005 IBM Corporation
- *
- * Author:
- * Reiner Sailer <sailer@xxxxxxxxxxxxxx>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, version 2 of the
- * License.
- *
- * Process policy command requests from guest OS.
- *
- */
-
-#include <xen/config.h>
-#include <xen/types.h>
-#include <xen/lib.h>
-#include <xen/mm.h>
-#include <public/policy_ops.h>
-#include <xen/sched.h>
-#include <xen/event.h>
-#include <xen/trace.h>
-#include <xen/console.h>
-#include <asm/shadow.h>
-#include <public/sched_ctl.h>
-#include <acm/acm_hooks.h>
-
-#if (ACM_USE_SECURITY_POLICY == ACM_NULL_POLICY)
-
-long do_policy_op(policy_op_t *u_policy_op)
-{
-    return -ENOSYS;
-}
-
-#else
-
-typedef enum policyoperation {
-    POLICY,     /* access to policy interface (early drop) */
-    GETPOLICY,  /* dump policy cache */
-    SETPOLICY,  /* set policy cache (controls security) */
-    DUMPSTATS   /* dump policy statistics */
-} policyoperation_t;
-
-int
-acm_authorize_policyops(struct domain *d, policyoperation_t pops)
-{
-    /* all policy management functions are restricted to privileged domains,
-     * soon we will introduce finer-grained privileges for policy operations 
-     */
-    if (!IS_PRIV(d)) {
-        printk("%s: Policy management authorization denied ERROR!\n",
-               __func__);
-        return ACM_ACCESS_DENIED;
-    }
-    return ACM_ACCESS_PERMITTED;
-}
-
-long do_policy_op(policy_op_t *u_policy_op)
-{
-    long ret = 0;
-    policy_op_t curop, *op = &curop;
-
-    /* check here policy decision for policy commands */
-    /* for now allow DOM0 only, later indepedently    */
-    if (acm_authorize_policyops(current->domain, POLICY))
-        return -EACCES;
-
-    if ( copy_from_user(op, u_policy_op, sizeof(*op)) )
-        return -EFAULT;
-
-    if ( op->interface_version != POLICY_INTERFACE_VERSION )
-        return -EACCES;
-
-    switch ( op->cmd )
-    {
-    case POLICY_SETPOLICY:
-    {
-        if (acm_authorize_policyops(current->domain, SETPOLICY))
-            return -EACCES;
-        printkd("%s: setting policy.\n", __func__);
-        ret = acm_set_policy(
-            op->u.setpolicy.pushcache, 
-            op->u.setpolicy.pushcache_size, 
-            op->u.setpolicy.policy_type,
-            1);
-        if (ret == ACM_OK)
-            ret = 0;
-        else
-            ret = -ESRCH;
-    }
-    break;
-
-    case POLICY_GETPOLICY:
-    {
-        if (acm_authorize_policyops(current->domain, GETPOLICY))
-            return -EACCES;
-        printkd("%s: getting policy.\n", __func__);
-        ret = acm_get_policy(
-            op->u.getpolicy.pullcache, 
-            op->u.getpolicy.pullcache_size);
-        if (ret == ACM_OK)
-            ret = 0;
-        else
-            ret = -ESRCH;
-    }
-    break;
-
-    case POLICY_DUMPSTATS:
-    {
-        if (acm_authorize_policyops(current->domain, DUMPSTATS))
-            return -EACCES;
-        printkd("%s: dumping statistics.\n", __func__);
-        ret = acm_dump_statistics(
-            op->u.dumpstats.pullcache, 
-            op->u.dumpstats.pullcache_size);
-        if (ret == ACM_OK)
-            ret = 0;
-        else
-            ret = -ESRCH;
-    }
-    break;
-
-    default:
-        ret = -ESRCH;
-
-    }
-    return ret;
-}
-
-#endif
diff -r 0301cccd14f1 -r d18f732c0a5f xen/include/public/policy_ops.h
--- a/xen/include/public/policy_ops.h   Tue Aug  2 09:31:47 2005
+++ /dev/null   Tue Aug  2 09:37:00 2005
@@ -1,70 +0,0 @@
-/******************************************************************************
- * policy_ops.h
- * 
- * Copyright (C) 2005 IBM Corporation
- *
- * Author:
- * Reiner Sailer <sailer@xxxxxxxxxxxxxx>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, version 2 of the
- * License. 
- *
- * Process policy command requests from guest OS.
- * access checked by policy; not restricted to DOM0
- * 
- */
-
-#ifndef __XEN_PUBLIC_POLICY_OPS_H__
-#define __XEN_PUBLIC_POLICY_OPS_H__
-
-#include "xen.h"
-#include "sched_ctl.h"
-
-/*
- * Make sure you increment the interface version whenever you modify this file!
- * This makes sure that old versions of policy tools will stop working in a
- * well-defined way (rather than crashing the machine, for instance).
- */
-#define POLICY_INTERFACE_VERSION   0xAAAA0003
-
-/************************************************************************/
-
-#define POLICY_SETPOLICY               4
-typedef struct policy_setpolicy {
-    /* IN variables. */
-    u16           policy_type;
-    /* OUT variables */
-    void         *pushcache;
-    u16           pushcache_size;
-} policy_setpolicy_t;          
-
-
-#define POLICY_GETPOLICY               5
-typedef struct policy_getpolicy {
-    /* IN variables. */
-    u16           policy_type;
-    /* OUT variables */
-    void         *pullcache;
-    u16           pullcache_size;
-} policy_getpolicy_t;       
-
-#define POLICY_DUMPSTATS               6
-typedef struct policy_dumpstats {
-    void         *pullcache;
-    u16           pullcache_size;
-} policy_dumpstats_t;            
- 
-
-typedef struct policy_op {
-    u32 cmd;
-    u32 interface_version;       /* POLICY_INTERFACE_VERSION */
-    union {
-       policy_setpolicy_t       setpolicy;
-        policy_getpolicy_t       getpolicy;
-       policy_dumpstats_t       dumpstats;
-    } u;
-} policy_op_t;
-
-#endif /* __XEN_PUBLIC_POLICY_OPS_H__ */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] The patches below clean-up sHype-related file names in the tools subtree, Xen patchbot -unstable <=