@@ -59,35 +59,27 @@ int main(int argc, char *argv[])
5959 exit (2 );
6060 }
6161
62- for (i = 0 ; secclass_map [i ].name ; i ++ ) {
63- struct security_class_mapping * map = & secclass_map [i ];
64- map -> name = stoupperx (map -> name );
65- for (j = 0 ; map -> perms [j ]; j ++ )
66- map -> perms [j ] = stoupperx (map -> perms [j ]);
67- }
68-
69- isids_len = sizeof (initial_sid_to_string ) / sizeof (char * );
70- for (i = 1 ; i < isids_len ; i ++ ) {
71- const char * s = initial_sid_to_string [i ];
72-
73- if (s )
74- initial_sid_to_string [i ] = stoupperx (s );
75- }
76-
7762 fprintf (fout , "/* This file is automatically generated. Do not edit. */\n" );
7863 fprintf (fout , "#ifndef _SELINUX_FLASK_H_\n#define _SELINUX_FLASK_H_\n\n" );
7964
8065 for (i = 0 ; secclass_map [i ].name ; i ++ ) {
81- struct security_class_mapping * map = & secclass_map [i ];
82- fprintf (fout , "#define SECCLASS_%-39s %2d\n" , map -> name , i + 1 );
66+ char * name = stoupperx (secclass_map [i ].name );
67+
68+ fprintf (fout , "#define SECCLASS_%-39s %2d\n" , name , i + 1 );
69+ free (name );
8370 }
8471
8572 fprintf (fout , "\n" );
8673
74+ isids_len = sizeof (initial_sid_to_string ) / sizeof (char * );
8775 for (i = 1 ; i < isids_len ; i ++ ) {
8876 const char * s = initial_sid_to_string [i ];
89- if (s )
90- fprintf (fout , "#define SECINITSID_%-39s %2d\n" , s , i );
77+ if (s ) {
78+ char * sidname = stoupperx (s );
79+
80+ fprintf (fout , "#define SECINITSID_%-39s %2d\n" , sidname , i );
81+ free (sidname );
82+ }
9183 }
9284 fprintf (fout , "\n#define SECINITSID_NUM %d\n" , i - 1 );
9385 fprintf (fout , "\nstatic inline bool security_is_socket_class(u16 kern_tclass)\n" );
@@ -96,10 +88,14 @@ int main(int argc, char *argv[])
9688 fprintf (fout , "\tswitch (kern_tclass) {\n" );
9789 for (i = 0 ; secclass_map [i ].name ; i ++ ) {
9890 static char s [] = "SOCKET" ;
99- struct security_class_mapping * map = & secclass_map [i ];
100- int len = strlen (map -> name ), l = sizeof (s ) - 1 ;
101- if (len >= l && memcmp (map -> name + len - l , s , l ) == 0 )
102- fprintf (fout , "\tcase SECCLASS_%s:\n" , map -> name );
91+ int len , l ;
92+ char * name = stoupperx (secclass_map [i ].name );
93+
94+ len = strlen (name );
95+ l = sizeof (s ) - 1 ;
96+ if (len >= l && memcmp (name + len - l , s , l ) == 0 )
97+ fprintf (fout , "\tcase SECCLASS_%s:\n" , name );
98+ free (name );
10399 }
104100 fprintf (fout , "\t\tsock = true;\n" );
105101 fprintf (fout , "\t\tbreak;\n" );
@@ -110,33 +106,52 @@ int main(int argc, char *argv[])
110106 fprintf (fout , "}\n" );
111107
112108 fprintf (fout , "\n#endif\n" );
113- fclose (fout );
109+
110+ if (fclose (fout ) != 0 ) {
111+ fprintf (stderr , "Could not successfully close %s: %s\n" ,
112+ argv [1 ], strerror (errno ));
113+ exit (4 );
114+ }
114115
115116 fout = fopen (argv [2 ], "w" );
116117 if (!fout ) {
117118 fprintf (stderr , "Could not open %s for writing: %s\n" ,
118119 argv [2 ], strerror (errno ));
119- exit (4 );
120+ exit (5 );
120121 }
121122
122123 fprintf (fout , "/* This file is automatically generated. Do not edit. */\n" );
123124 fprintf (fout , "#ifndef _SELINUX_AV_PERMISSIONS_H_\n#define _SELINUX_AV_PERMISSIONS_H_\n\n" );
124125
125126 for (i = 0 ; secclass_map [i ].name ; i ++ ) {
126- struct security_class_mapping * map = & secclass_map [i ];
127- int len = strlen (map -> name );
127+ const struct security_class_mapping * map = & secclass_map [i ];
128+ int len ;
129+ char * name = stoupperx (map -> name );
130+
131+ len = strlen (name );
128132 for (j = 0 ; map -> perms [j ]; j ++ ) {
133+ char * permname ;
134+
129135 if (j >= 32 ) {
130136 fprintf (stderr , "Too many permissions to fit into an access vector at (%s, %s).\n" ,
131137 map -> name , map -> perms [j ]);
132138 exit (5 );
133139 }
134- fprintf (fout , "#define %s__%-*s 0x%08xU\n" , map -> name ,
135- 39 - len , map -> perms [j ], 1U <<j );
140+ permname = stoupperx (map -> perms [j ]);
141+ fprintf (fout , "#define %s__%-*s 0x%08xU\n" , name ,
142+ 39 - len , permname , 1U <<j );
143+ free (permname );
136144 }
145+ free (name );
137146 }
138147
139148 fprintf (fout , "\n#endif\n" );
140- fclose (fout );
149+
150+ if (fclose (fout ) != 0 ) {
151+ fprintf (stderr , "Could not successfully close %s: %s\n" ,
152+ argv [2 ], strerror (errno ));
153+ exit (6 );
154+ }
155+
141156 exit (0 );
142157}
0 commit comments