refpolicy: loadable_module.spt improvement?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,
while looking into the policy/support/loadable_module.spt I could not
catch handling of the policy_call_depth in the template and the
interface macro.

define(`interface',` dnl
        ifdef(`$1',`refpolicyerr(`duplicate definition of $1(). Original definition on '$1.) define(`__if_error')',`define(`$1',__line__)') dnl
        `define(`$1',` dnl
        define(`policy_temp',incr(policy_call_depth)) dnl
        pushdef(`policy_call_depth',policy_temp) dnl
        undefine(`policy_temp') dnl
        policy_m4_comment(policy_call_depth,begin `$1'(dollarsstar)) dnl
        $2
        define(`policy_temp',decr(policy_call_depth)) dnl
        pushdef(`policy_call_depth',policy_temp) dnl
        undefine(`policy_temp') dnl
        policy_m4_comment(policy_call_depth,end `$1'(dollarsstar)) dnl
        '')
')

The policy_call_depth is incremented using temporal policy_temp
- I don't know why. The new definition is pushed into the m4 stack, ok.
On the leaving side of macro is the original value not popped from the
stack, but new decremented value is pushed into the stack. So stack of
the policy_call_depth definitions is growing up.

I prepared fix for this - it is attached. The policy is generated faster
by at least 5% with this (intermediate files are smaller and less work
for m4 and less memory footprint of m4 I hope).

Best Regards
-- 
Zito
Index: refpolicy-svn/policy/support/loadable_module.spt
===================================================================
--- refpolicy-svn.orig/policy/support/loadable_module.spt	2008-04-18 08:29:38.000000000 +0200
+++ refpolicy-svn/policy/support/loadable_module.spt	2008-04-18 10:13:05.000000000 +0200
@@ -62,14 +62,10 @@
 define(`template',` dnl
 	ifdef(`$1',`refpolicyerr(`duplicate definition of $1(). Original definition on '$1.) define(`__if_error')',`define(`$1',__line__)') dnl
 	`define(`$1',` dnl
-	define(`policy_temp',incr(policy_call_depth)) dnl
-	pushdef(`policy_call_depth',policy_temp) dnl
-	undefine(`policy_temp') dnl
+	pushdef(`policy_call_depth',incr(policy_call_depth)) dnl
 	policy_m4_comment(policy_call_depth,begin `$1'(dollarsstar)) dnl
 	$2 dnl
-	define(`policy_temp',decr(policy_call_depth)) dnl
-	pushdef(`policy_call_depth',policy_temp) dnl
-	undefine(`policy_temp') dnl
+	popdef(`policy_call_depth') dnl
 	policy_m4_comment(policy_call_depth,end `$1'(dollarsstar)) dnl
 	'')
 ')
@@ -83,14 +79,10 @@
 define(`interface',` dnl
 	ifdef(`$1',`refpolicyerr(`duplicate definition of $1(). Original definition on '$1.) define(`__if_error')',`define(`$1',__line__)') dnl
 	`define(`$1',` dnl
-	define(`policy_temp',incr(policy_call_depth)) dnl
-	pushdef(`policy_call_depth',policy_temp) dnl
-	undefine(`policy_temp') dnl
+	pushdef(`policy_call_depth',incr(policy_call_depth)) dnl
 	policy_m4_comment(policy_call_depth,begin `$1'(dollarsstar)) dnl
 	$2
-	define(`policy_temp',decr(policy_call_depth)) dnl
-	pushdef(`policy_call_depth',policy_temp) dnl
-	undefine(`policy_temp') dnl
+	popdef(`policy_call_depth') dnl
 	policy_m4_comment(policy_call_depth,end `$1'(dollarsstar)) dnl
 	'')
 ')

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux