Paul Moore | 1 Sep 2007 01:04
Picon
Favicon

Re: Networking Patch (outline)

On Friday, August 31 2007 6:40:19 pm Venkat Yekkirala wrote:
> The following is a slightly modified version of the patch
> (backed here against 2.6.23-rc4) that we have been using here at
> TCS. It is intended to help provide an idea as to the points in
> code that need to be dealt with for the enhancements that have
> been talked about.

Thanks for getting a patch out so quickly, even if it is just a RFC patch.  
I'm still fumbling around figuring out how to manage a git tree :/.  I've 
only quickly glanced at the patch, I'll look closer next week, but it might 
be easier to discuss things if you were to split up the functionality into 
different patches, e.g. it looks like the patch provides both loopback 
labeling and flow control.

I've also been thinking about the order in which we need to do things so we 
minimize breakage and make the patches sane - I'll send something out a bit 
later (probably next week too, sigh).

> Specifically, the following are the primary areas that
> have not been addressed here:
>
> 1. Replace setting of secid with IP Option or Split secmark.

From what I can tell this is only for loopback labeling in your patch.  
Assuming that is the case let's drop it out of this patch and focus on the 
flow control for right now.

> 2. Integrate NetLabel fallbacks.

Yes, NetLabel/IPsec integration is a biggie and perhaps the first on the list 
(Continue reading)

shahbaz khan | 2 Sep 2007 00:02
Picon

SECMARK

Hi,
 
Just wanted to know how secmark adds labeling information to packets. Does it strip off to packet to do so or what? Could'nt find any relevant reading stuff on it either.

--
Shahbaz
Group: http://securityengineering.wordpress.com
Email: shazalive-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
cell: +92 91 0300 5944647

[refpolicy] updated awstats policy

After reading Dan's article about writing SELinux policies I decided  
to remove the awstats_conf_t type. He suggests to only declare an  
extra type if there is something to protect. The config files of  
awstats do not include any sensitive data. The default installation  
even permit unix world readable permissions.

Second (the most important bug I wrote ;-)) the awstats cgi script  
was allowed to manage awstats_lib_t files which is _not_ necessary. I  
allowed that because awstats_t executes the  
httpd_awstats_script_exec_t to update the statistic files. But the  
cgi script called from a web interface only needs read permissions so  
I added an interface awstats_cgi_exec to handle this situation. Now  
awstats_t executes httpd_awstats_script_exec_t in its domain which is  
the preferred and more secure way.
In the end the untrustworthy cgi script has only read access to  
awstats_lib_t and awstats_t which is called from a trustworthy cron- 
job has write permissions to awstats_lib_t

Please substitute the old ("insecure") awstats policy with the new one.

Attachment (awstats.fc): application/octet-stream, 357 bytes
Attachment (awstats.if): application/octet-stream, 887 bytes
Attachment (awstats.te): application/octet-stream, 1765 bytes
Shahbaz Khan | 3 Sep 2007 01:18
Picon

Get source and destination info

Hi,

I am trying to figure out what part in the kernel code is the point
from where I can get source and destination ip-address, port, security
labels (selinux etc) from a packet before I export it to application
space for my needs. Any hints?

Shaz.
Casey Schaufler | 3 Sep 2007 01:30

Re: Get source and destination info


--- Shahbaz Khan <shaz.linux <at> gmail.com> wrote:

> Hi,
> 
> I am trying to figure out what part in the kernel code is the point
> from where I can get source and destination ip-address, port, security
> labels (selinux etc) from a packet before I export it to application
> space for my needs. Any hints?

Look into the netlabel and xfrm code. In Smack it gets dealt with
in smack_lsm.c, but Smack only uses netlabel. SELinux spreads the
handling into a number of files, including hooks.c, netlabel.c, xfrm.c,
and ss/services.c.

Casey Schaufler
casey <at> schaufler-ca.com
Yuichi Nakamura | 3 Sep 2007 10:04
Picon

[RFC]Tuning selinux_file_permission

Hi.

As I posted before, 
I found big overhead in read/write on some CPUs.
http://marc.info/?t=118845343400001&r=1&w=2

I tried tuning based on manual inlining of selinux_file_permission, 
and it works to some extent,
but Stephen suggested better idea.

Stephen Smalley wrote:
> I'd also like to separately explore a different approach for improving
> the overhead on read/write that has come up previously, namely don't
> recheck at all unless one of the following conditions is met:
> 1) process SID has changed since open-time check (i.e. exec with SID
> transition or setcon),
> 2) file SID has changed since open-time check (i.e. setxattr) ,
> 3) policy seqno has changed since open-time check (i.e. policy reload or
> boolean change).

I tried tuning of selinux_file_permission based on this idea.
I wrote a patch that shows the concept, and it can reduce much overhead.
I want comments from community.

1. Detail of patch
1) Prepared global serial number, u32 sid_serial.
 It is initialized as 1, 
 is incremented when sid is changed in the system:
   - policy is reloaded
   - boolean is changed
   - domain transition/setcon happend 
   - setxattr happend

2) Added "sid_serial" member to struct file_secuirty.

3) In file open, file_security->sid_serial is set as global sid_serial.

4) In file read/write, selinux_file_permission is called. 
   file_security->sid_serial and global sid_serial is compared 
   before permission check.
   If sid_serial is not changed, permission check is skipped.
   If it is different, this means some relabel could happen after file open,
   then call do_selinux_file_permission and permission recheck happen.

5) If sid_serial is incremented too much, 
   and returned to zero.
   permission recheck in selinux_file_permission is forced by notify_sid_serial_end().
   This is to avoid following situation.
   * sid_serial = 10 at file open
   * sid_serial is incremented 2^32+10 times, then sid_serial returns to 10
   * In file read, selinux_file_permission is called.
     sid_serial is unchanged(=10), then permission check is skipped.
   * sid may be changed, but check is skipped

2. Benchmark
lmbench simple read/write.

1) Result for x86(Pentium 4)
             Base     SELinux   Overhead(%)
Simple read  1.1034   1.116    1.16(before 12.3)
Simple write 0.9989   1.018    1.97(before 14.0)
 * Base = SELinux disabled kernel

2) Result for SH(SuperH, processor for embedded devices)
                Base   SELinux  Overhead(%)
Simple read     2.6781  2.67    -0.37(before 141.5)
Simple write    2.0781  2.34     12.5(before 155.9)

Overhead is reduced a lot in both PC and embedded devices.

Below is a patch.

---
 security/selinux/avc.c            |   49 +++++++++++++++++++++++++
 security/selinux/hooks.c          |   74 +++++++++++++++++++++++++++++++++-----
 security/selinux/include/avc.h    |    4 ++
 security/selinux/include/objsec.h |    2 +
 security/selinux/selinuxfs.c      |    3 +
 5 files changed, 124 insertions(+), 8 deletions(-)
diff -purN -X linux-2.6.22/Documentation/dontdiff linux-2.6.22.orig/security/selinux/avc.c linux-2.6.22/security/selinux/avc.c
--- linux-2.6.22.orig/security/selinux/avc.c	2007-07-09 08:32:17.000000000 +0900
+++ linux-2.6.22/security/selinux/avc.c	2007-09-03 14:22:22.000000000 +0900
 <at>  <at>  -29,8 +29,10  <at>  <at> 
 #include <linux/audit.h>
 #include <linux/ipv6.h>
 #include <net/ipv6.h>
+#include <linux/file.h>
 #include "avc.h"
 #include "avc_ss.h"
+#include "objsec.h"

 static const struct av_perm_to_string av_perm_to_string[] = {
 #define S_(c, v, s) { c, v, s },
 <at>  <at>  -126,6 +128,15  <at>  <at>  static struct avc_cache avc_cache;
 static struct avc_callback_node *avc_callbacks;
 static struct kmem_cache *avc_node_cachep;

+/*This number is incremented when sids are changed
+ - policy reload
+ - boolean change
+ - domain transition
+ - setxattr
+*/
+static u32 sid_serial = 1;
+
+
 static inline int avc_hash(u32 ssid, u32 tsid, u16 tclass)
 {
 	return (ssid ^ (tsid<<2) ^ (tclass<<4)) & (AVC_CACHE_SLOTS - 1);
 <at>  <at>  -913,3 +924,41  <at>  <at>  int avc_has_perm(u32 ssid, u32 tsid, u16
 	avc_audit(ssid, tsid, tclass, requested, &avd, rc, auditdata);
 	return rc;
 }
+
+/*
+  Notify all processes that sid_serial returned to zero.
+*/
+void notify_sid_serial_end()
+{
+	struct task_struct *p;
+	struct files_struct *files;
+	struct file *file;
+	struct file_security_struct *fsec;
+	int i;
+
+	/*Mutex is not considered yet!*/
+	for_each_process(p) {
+		files = p->files;
+		for (i = 0; i < atomic_read(&(files->count)); i++) {
+			file = files->fd_array[i];
+			if (file) {
+				fsec = file->f_security;
+				if (fsec)
+					fsec->force_file_check = 1;
+			}
+		}
+	}
+}
+
+void sid_serial_incr()
+{
+	sid_serial++;
+	if (sid_serial == 0)
+		notify_sid_serial_end();
+
+}
+
+u32 read_sid_serial()
+{
+	return sid_serial;
+}
diff -purN -X linux-2.6.22/Documentation/dontdiff linux-2.6.22.orig/security/selinux/hooks.c linux-2.6.22/security/selinux/hooks.c
--- linux-2.6.22.orig/security/selinux/hooks.c	2007-07-09 08:32:17.000000000 +0900
+++ linux-2.6.22/security/selinux/hooks.c	2007-09-03 14:31:54.000000000 +0900
 <at>  <at>  -220,7 +220,9  <at>  <at>  static int file_alloc_security(struct fi

 	fsec->file = file;
 	fsec->sid = tsec->sid;
+	fsec->force_file_check = 0;
 	fsec->fown_sid = tsec->sid;
+	fsec->sid_serial = read_sid_serial();
 	file->f_security = fsec;

 	return 0;
 <at>  <at>  -991,6 +993,7  <at>  <at>  out_unlock:
 out:
 	if (isec->sclass == SECCLASS_FILE)
 		isec->sclass = inode_mode_to_security_class(inode->i_mode);
+
 	return rc;
 }

 <at>  <at>  -1691,6 +1694,8  <at>  <at>  static int selinux_bprm_set_security(str

 		/* Set the security field to the new SID. */
 		bsec->sid = newsid;
+
+		sid_serial_incr();
 	}

 	bsec->set = 1;
 <at>  <at>  -2289,7 +2294,7  <at>  <at>  static int selinux_inode_getattr(struct 
 	return dentry_has_perm(current, mnt, dentry, FILE__GETATTR);
 }

-static int selinux_inode_setxattr(struct dentry *dentry, char *name, void *value, size_t size, int flags)
+static inline int do_selinux_inode_setxattr(struct dentry *dentry, char *name, void *value, size_t
size, int flags)
 {
 	struct task_security_struct *tsec = current->security;
 	struct inode *inode = dentry->d_inode;
 <at>  <at>  -2348,6 +2353,17  <at>  <at>  static int selinux_inode_setxattr(struct
 			    FILESYSTEM__ASSOCIATE,
 			    &ad);
 }
+static int selinux_inode_setxattr(struct dentry *dentry, char *name, void *value, size_t size, int flags)
+{
+	int rc;
+
+	rc = do_selinux_inode_setxattr(dentry, name, value, size, flags);
+	if (rc)
+		return rc;
+
+	sid_serial_incr();
+	return 0;
+}

 static void selinux_inode_post_setxattr(struct dentry *dentry, char *name,
                                         void *value, size_t size, int flags)
 <at>  <at>  -2457,17 +2473,11  <at>  <at>  static int selinux_inode_listsecurity(st
 }

 /* file security operations */
-
-static int selinux_file_permission(struct file *file, int mask)
+static int do_selinux_file_permission(struct file *file, int mask)
 {
 	int rc;
 	struct inode *inode = file->f_path.dentry->d_inode;

-	if (!mask) {
-		/* No permission to check.  Existence test. */
-		return 0;
-	}
-
 	/* file_mask_to_av won't add FILE__WRITE if MAY_APPEND is set */
 	if ((file->f_flags & O_APPEND) && (mask & MAY_WRITE))
 		mask |= MAY_APPEND;
 <at>  <at>  -2480,6 +2490,53  <at>  <at>  static int selinux_file_permission(struc
 	return selinux_netlbl_inode_permission(inode, mask);
 }

+static int selinux_file_permission(struct file *file, int mask)
+{
+
+	struct task_security_struct *tsec = current->security;
+	struct file_security_struct *fsec = file->f_security;
+	int rc;
+	u32 current_sid_serial;
+
+	if (!mask) {
+		/* No permission to check.  Existence test. */
+		return 0;
+	}
+
+	/*Check FS__USE*/
+	if (tsec->sid != fsec->sid) {
+		struct vfsmount *mnt = file->f_path.mnt;
+		struct dentry *dentry = file->f_path.dentry;
+		struct avc_audit_data ad;
+		AVC_AUDIT_DATA_INIT(&ad, FS);
+		ad.u.fs.mnt = mnt;
+		ad.u.fs.dentry = dentry;
+		rc = avc_has_perm(tsec->sid, fsec->sid,
+				  SECCLASS_FD,
+				  FD__USE,
+				  &ad);
+		if (rc)
+			return rc;
+	}
+
+	/*Skip permission check
+	  when sids are not changed after open*/
+	current_sid_serial = read_sid_serial();
+	if (fsec->sid_serial == current_sid_serial &&
+	    !(fsec->force_file_check))
+		return 0;
+
+	rc = do_selinux_file_permission(file, mask);
+	if (rc)
+		return rc;
+
+	fsec->sid_serial = current_sid_serial;
+	fsec->force_file_check = 0;
+
+	return 0;
+}
+
+
 static int selinux_file_alloc_security(struct file *file)
 {
 	return file_alloc_security(file);
 <at>  <at>  -4642,6 +4699,7  <at>  <at>  static int selinux_setprocattr(struct ta
 	else
 		return -EINVAL;

+	sid_serial_incr();
 	return size;
 }

diff -purN -X linux-2.6.22/Documentation/dontdiff
linux-2.6.22.orig/security/selinux/include/avc.h linux-2.6.22/security/selinux/include/avc.h
--- linux-2.6.22.orig/security/selinux/include/avc.h	2007-07-09 08:32:17.000000000 +0900
+++ linux-2.6.22/security/selinux/include/avc.h	2007-09-03 09:05:47.000000000 +0900
 <at>  <at>  -127,6 +127,10  <at>  <at>  int avc_add_callback(int (*callback)(u32

 /* Exported to selinuxfs */
 int avc_get_hash_stats(char *page);
+
+void sid_serial_incr();
+u32 read_sid_serial();
+
 extern unsigned int avc_cache_threshold;

 #ifdef CONFIG_SECURITY_SELINUX_AVC_STATS
diff -purN -X linux-2.6.22/Documentation/dontdiff
linux-2.6.22.orig/security/selinux/include/objsec.h linux-2.6.22/security/selinux/include/objsec.h
--- linux-2.6.22.orig/security/selinux/include/objsec.h	2007-07-09 08:32:17.000000000 +0900
+++ linux-2.6.22/security/selinux/include/objsec.h	2007-09-03 14:28:18.000000000 +0900
 <at>  <at>  -53,6 +53,8  <at>  <at>  struct file_security_struct {
 	struct file *file;              /* back pointer to file object */
 	u32 sid;              /* SID of open file description */
 	u32 fown_sid;         /* SID of file owner (for SIGIO) */
+	u32 sid_serial;       /* sid_serial at open time*/
+	bool force_file_check; /* It is set when sid_serial returns zero*/
 };

 struct superblock_security_struct {
diff -purN -X linux-2.6.22/Documentation/dontdiff
linux-2.6.22.orig/security/selinux/selinuxfs.c linux-2.6.22/security/selinux/selinuxfs.c
--- linux-2.6.22.orig/security/selinux/selinuxfs.c	2007-07-09 08:32:17.000000000 +0900
+++ linux-2.6.22/security/selinux/selinuxfs.c	2007-09-03 09:10:38.000000000 +0900
 <at>  <at>  -294,6 +294,7  <at>  <at>  static ssize_t sel_write_load(struct fil
 	audit_log(current->audit_context, GFP_KERNEL, AUDIT_MAC_POLICY_LOAD,
 		"policy loaded auid=%u",
 		audit_get_loginuid(current->audit_context));
+	sid_serial_incr();
 out:
 	mutex_unlock(&sel_mutex);
 	vfree(data);
 <at>  <at>  -872,6 +873,8  <at>  <at>  static ssize_t sel_write_bool(struct fil
 	bool_pending_values[inode->i_ino&SEL_INO_MASK] = new_value;
 	length = count;

+	sid_serial_incr();
+
 out:
 	mutex_unlock(&sel_mutex);
 	if (page)

Regards,
--

-- 
Yuichi Nakamura
Hitachi Software Engineering Co., Ltd.
Japan SELinux Users Group(JSELUG): http://www.selinux.gr.jp/
SELinux Policy Editor: http://seedit.sourceforge.net/

shahbaz khan | 3 Sep 2007 12:06
Picon

Get source and destination info

>> Hi,
>>
> >I am trying to figure out what part in the kernel code is the point
> >from where I can get source and destination ip-address, port, security
>> labels (selinux etc) from a packet before I export it to application
> >space for my needs. Any hints?

>Look into the netlabel and xfrm code. In Smack it gets dealt with
>in smack_lsm.c, but Smack only uses netlabel. SELinux spreads the
>handling into a number of files, including hooks.c, netlabel.c, xfrm.c,
>and ss/services.c.
 
Can anyone explain this to me? Some elaboration and exactness required.


>Casey Schaufler
>casey-iSGtlc1asvQWG2LlvL+J4A@public.gmane.org


--
Shahbaz
Group: http://securityengineering.wordpress.com
Email: shazalive-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
cell: +92 91 0300 5944647
KaiGai Kohei | 3 Sep 2007 17:12
Picon

[ANN] SE-PostgreSQL 8.2.4-1.0 Released

This is announcement of the first official version of SE-PostgreSQL.

====================================================================
  SE-PostgreSQL 8.2.4-1.0 Released
====================================================================
SE-PostgreSQL development team released "SE-PostgreSQL 8.2.4-1.0" and
"The SE-PostgreSQL Security Guide (Japanese/English)".

You can get these packages from the following URL:
  http://code.google.com/p/sepgsql/downloads/list

NOTE: Any packages built for Fedora development edition (rawhide) will
      be distributed via Fedora mirrors soon.

* SE-PostgreSQL 8.2.4-1.0
  sepostgresql-8.2.4-1.0.fc7.i386.rpm
  sepostgresql-8.2.4-1.0.fc7.src.rpm
* The base security policy for Fedora 7
  selinux-policy-devel-2.6.4-38.sepgsql.fc7.noarch.rpm
  selinux-policy-targeted-2.6.4-38.sepgsql.fc7.noarch.rpm
  selinux-policy-2.6.4-38.sepgsql.fc7.noarch.rpm
  selinux-policy-2.6.4-38.sepgsql.fc7.src.rpm
* The official documentation
  sepgsql_security_guide.20070903.jp.pdf
  sepgsql_security_guide.20070903.en.pdf

See the following URL, for installation details.
* SE-PostgreSQL Installation Memo (Fedora 7)
  http://code.google.com/p/sepgsql/wiki/install_memo_Fedora7

The features of SE-PostgreSQL
-----------------------------
Security-Enhanced PostgreSQL (SE-PostgreSQL) is a security extension built
in PostgreSQL. It enables to apply a unified security policy of SELinux to
both operating system and database management system.
In addition, it also provides fine-grained access control including column
and row level, and mandatory access control being non-bypassable, even if
privileged database users.
These features enables to build a database management system into information
flow control scheme integrated with operating system, and to protect our
information asset from threats like manipulation or leaking.

The position of this version
----------------------------
This is the first official version of SE-PostgreSQL based on PostgreSQL 8.2.4.
However, it does not have enough achievement of works compared to the original
PostgreSQL. Therefore, we recommend you to have enough evaluation and
verification on its introduction.
The series of SE-PostgreSQL 8.2.4-1.x got into maintenance phase after the
release of this version, and we don't have any plan to release new version
in this series, except for bug fixes.
The SE-PostgreSQL development team has a plan to develop next major version
of SE-PostgreSQL based on PostgreSQL 8.3, with several new features.

Acknowledgment
--------------
The development of SE-PostgreSQL is supported by Exploratory Software Project,
IPA(Information-technology Promotion Agency, Japan).

--

-- 
KaiGai Kohei <kaigai@...>

Karl MacMillan | 3 Sep 2007 17:02

Re: Time to remove compat_net?

On Thu, 2007-08-30 at 16:33 -0400, Paul Moore wrote:
> On Thursday, August 30 2007 4:12:24 pm Stephen Smalley wrote:
> > On Thu, 2007-08-30 at 16:07 -0400, Paul Moore wrote:
> > > Does anyone have any objections to placing the compat_net code on the
> > > kernel's "feature removal schedule" (I'd go for removal in 2/2008, six
> > > months from now)?  SECMARK can do everything that the older compat_net
> > > controls can do, and it does it with less overhead and a cleaner
> > > implementation.
> >
> > I'd be happy to see it go (conditional checks considered harmful), but a
> > good starting point would be to get secmark turned on in Fedora (it was
> > still off last I looked) and verify that nothing breaks.
> >
> > We also don't have any tools capable of managing secmark today; with the
> > legacy controls, we could labels ports and netifs via semanage.  Only
> > secmark userland integration to date has been the basic iptables command
> > line support.
> 
> Okay RedHat guys ... are there any plans to migrate semanage over to using the 
> SECMARK controls?

I have argued in the past that making semanage handle secmark is the
wrong approach. Basically - the whole point of using secmark is that you
get the full power of iptables. If we force updates through semanage
then you either a) recreate all of iptables in semanage or b) seriously
cripple the mechanism through a restricted interface.

>   If not, what do you need (besides patches to semanage) to 
> make the transition?
> 

What more do you mean other than setting compat_net to 0?

Karl

Karl MacMillan | 3 Sep 2007 18:13

RE: audit2allow module generation

On Thu, 2007-08-30 at 09:43 -0400, Anand Patel wrote:
> Karl,
> 
> I found that sepol-ifgen parser fails when it sees multiple types in
> type declaration statement.
> e.g.
> 	type foo_t, hello_t;

This isn't a valid way to define two types - you are instead defining
the type foo_t with the attribute hello_t. It's an easy mistake to make
because of the similarity to the require syntax for requiring multiple
types.

I'm sending a large update to the parser soon that will fix this problem
though.

Karl

> Then I went back and change to following
> 	type foo_t;
> 	type hello_t;
> and it parsed successfully.
> 
> -Anand Patel
> 
> -----Original Message-----
> From: owner-selinux@... [mailto:owner-selinux@...]
> On Behalf Of Anand Patel
> Sent: Monday, June 11, 2007 9:48 AM
> To: Karl MacMillan
> Cc: SE Linux; Daniel J Walsh
> Subject: RE: audit2allow module generation
> 
> On Fri, 2007-06-08 at 11:36 -0400, Karl MacMillan wrote:
> > On Wed, 2007-05-30 at 10:44 -0400, Anand Patel wrote:
> > > > -----Original Message-----
> > > > From: Karl MacMillan [mailto:kmacmillan@...]
> > > > Sent: Tuesday, May 29, 2007 5:12 PM
> > > > To: Anand Patel
> > > > Cc: SE Linux; Daniel J Walsh
> > > > Subject: Re: audit2allow module generation
> > > > 
> > > > On Tue, 2007-05-29 at 16:25 -0400, Anand Patel wrote:
> > > > > I am trying to use audit2allow to generate module out of audit
> > > messages.
> > > > >
> > > > > So, I installed refpolicy headers first. Then tried
> sepolgen-ifgen
> > > > >
> > > > > %sepolgen-ifgen
> > > > > % ... some output ...
> > > > > %parsing file /usr/share/selinux/devel/include/services/snmp.if
> > > > > %error parsing file
> > > /usr/share/selinux/devel/include/services/snmap.if:
> > > > > %could not parse text: "Syntax error on line 1 ( [type=OPAREN]"
> > > > >
> > > > > Parser had problem parsing almost all if files and generated
> above
> > > > > error.
> > > > 
> > > > The problem is that the refpolicy "language" is far from fixed and
> > > > parsing it cleanly is almost impossible because of M4. So the
> parser
> > > > sometimes gets out of sync with refpolicy (hence the policyrep
> work).
> > > > 
> > > > I just need some more specific information about the refpolicy
> version
> > > > you are using and I should be able to fix-up the parser.
> > > 
> > > I was using current release from oss.tresys.com/projects/refpolicy.
> > > 
> > 
> > What version of sepolgen were you using? The latest (in rawhide) seems
> > to work fine on the latest available refpolicy.
> Version .1
> It seems to work with pristine refpolicy. However, upon modifications to
> policy, new macros and moduels, it generates error during interface
> index parse.
> 
> I am currently investigating where it fails.
> 
> 
> > 
> > Karl
> > 
> > 
> > 
> 
> 


Gmane