1 |
commit: a71f43bb966d020f2c5f46ff2b13fbca8224736f |
2 |
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Feb 9 21:57:15 2013 +0000 |
4 |
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon May 20 19:55:37 2013 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=a71f43bb |
7 |
|
8 |
misc: clean up the messy drawer |
9 |
|
10 |
--- |
11 |
misc/Makefile | 7 - |
12 |
misc/{ => elf-manipulate}/clear-dt-path.c | 0 |
13 |
misc/{ => elf-manipulate}/parse-elf.c | 0 |
14 |
misc/{ => elf-manipulate}/print-sections.c | 0 |
15 |
misc/{ => elf-manipulate}/remove-ptpax.c | 0 |
16 |
misc/{ => link-maps}/link_map.py | 0 |
17 |
misc/{ => link-maps}/link_map_test | 0 |
18 |
misc/paxctl-xattr.c | 361 ---------------------------- |
19 |
8 files changed, 0 insertions(+), 368 deletions(-) |
20 |
|
21 |
diff --git a/misc/Makefile b/misc/Makefile |
22 |
deleted file mode 100644 |
23 |
index 49653b4..0000000 |
24 |
--- a/misc/Makefile |
25 |
+++ /dev/null |
26 |
@@ -1,7 +0,0 @@ |
27 |
-all: clear-dt-path parse-elf print-sections paxctl-xattr |
28 |
- |
29 |
-%: %.c |
30 |
- gcc -o $@ $^ -lelf |
31 |
- |
32 |
-clean: |
33 |
- rm -rf clear-dt-path parse-elf print-sections paxctl-xattr |
34 |
|
35 |
diff --git a/misc/clear-dt-path.c b/misc/elf-manipulate/clear-dt-path.c |
36 |
similarity index 100% |
37 |
rename from misc/clear-dt-path.c |
38 |
rename to misc/elf-manipulate/clear-dt-path.c |
39 |
|
40 |
diff --git a/misc/parse-elf.c b/misc/elf-manipulate/parse-elf.c |
41 |
similarity index 100% |
42 |
rename from misc/parse-elf.c |
43 |
rename to misc/elf-manipulate/parse-elf.c |
44 |
|
45 |
diff --git a/misc/print-sections.c b/misc/elf-manipulate/print-sections.c |
46 |
similarity index 100% |
47 |
rename from misc/print-sections.c |
48 |
rename to misc/elf-manipulate/print-sections.c |
49 |
|
50 |
diff --git a/misc/remove-ptpax.c b/misc/elf-manipulate/remove-ptpax.c |
51 |
similarity index 100% |
52 |
rename from misc/remove-ptpax.c |
53 |
rename to misc/elf-manipulate/remove-ptpax.c |
54 |
|
55 |
diff --git a/misc/link_map.py b/misc/link-maps/link_map.py |
56 |
similarity index 100% |
57 |
rename from misc/link_map.py |
58 |
rename to misc/link-maps/link_map.py |
59 |
|
60 |
diff --git a/misc/link_map_test b/misc/link-maps/link_map_test |
61 |
similarity index 100% |
62 |
rename from misc/link_map_test |
63 |
rename to misc/link-maps/link_map_test |
64 |
|
65 |
diff --git a/misc/paxctl-xattr.c b/misc/paxctl-xattr.c |
66 |
deleted file mode 100644 |
67 |
index 3ce5297..0000000 |
68 |
--- a/misc/paxctl-xattr.c |
69 |
+++ /dev/null |
70 |
@@ -1,361 +0,0 @@ |
71 |
-/* |
72 |
- paxctl-xattr.c: get/set pax flags on xattr for an ELF object |
73 |
- Copyright (C) 2011 Anthony G. Basile |
74 |
- |
75 |
- This program is free software: you can redistribute it and/or modify |
76 |
- it under the terms of the GNU General Public License as published by |
77 |
- the Free Software Foundation, either version 3 of the License, or |
78 |
- (at your option) any later version. |
79 |
- |
80 |
- This program is distributed in the hope that it will be useful, |
81 |
- but WITHOUT ANY WARRANTY; without even the implied warranty of |
82 |
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
83 |
- GNU General Public License for more details. |
84 |
- |
85 |
- You should have received a copy of the GNU General Public License |
86 |
- along with this program. If not, see <http://www.gnu.org/licenses/>. |
87 |
-*/ |
88 |
- |
89 |
-#include <stdio.h> |
90 |
-#include <stdint.h> |
91 |
-#include <stdlib.h> |
92 |
-#include <string.h> |
93 |
-#include <error.h> |
94 |
-#include <errno.h> |
95 |
-#include <libgen.h> |
96 |
- |
97 |
-#include <gelf.h> |
98 |
-#include <attr/xattr.h> |
99 |
- |
100 |
-#include <sys/types.h> |
101 |
-#include <sys/stat.h> |
102 |
-#include <fcntl.h> |
103 |
-#include <unistd.h> |
104 |
- |
105 |
-#define PAX_NAMESPACE "user.pax" |
106 |
- |
107 |
-void |
108 |
-print_help(char *v) |
109 |
-{ |
110 |
- printf( |
111 |
- "\n" |
112 |
- "Program Name : %s\n" |
113 |
- "Description : Get or set xattr pax flags on an ELF object\n\n" |
114 |
- "Usage : %s [-PpEeMmRrXxSsv ELF] | [-Z ELF] | [-z ELF] | [-h]\n\n" |
115 |
- "Options : -P enable PAGEEXEC\t-p disable PAGEEXEC\n" |
116 |
- " : -S enable SEGMEXEC\t-s disable SEGMEXEC\n" |
117 |
- " : -M enable MPROTECT\t-m disable MPROTECT\n" |
118 |
- " : -E enable EMUTRAMP\t-e disable EMUTRAMP\n" |
119 |
- " : -R enable RANDMMAP\t-r disable RANDMMAP\n" |
120 |
- " : -X enable RANDEXEC\t-x disable RANDEXEC\n" |
121 |
- " : -Z most secure settings\t-z all default settings\n" |
122 |
- " : -v view the flags\n" |
123 |
- " : -h print out this help\n\n" |
124 |
- "Note : If both enabling and disabling flags are set, the default - is used\n\n", |
125 |
- basename(v), |
126 |
- basename(v) |
127 |
- ); |
128 |
- |
129 |
- exit(EXIT_SUCCESS); |
130 |
-} |
131 |
- |
132 |
- |
133 |
-char * |
134 |
-parse_cmd_args(int c, char *v[], int *pax_flags, int *view_flags) |
135 |
-{ |
136 |
- int i, oc; |
137 |
- int compat; |
138 |
- |
139 |
- compat = 0; |
140 |
- |
141 |
- *pax_flags = 0; |
142 |
- *view_flags = 0; |
143 |
- while((oc = getopt(c, v,":PpEeMmRrXxSsZzvh")) != -1) |
144 |
- switch(oc) |
145 |
- { |
146 |
- case 'P': |
147 |
- *pax_flags |= PF_PAGEEXEC; |
148 |
- compat |= 1; |
149 |
- break; |
150 |
- case 'p': |
151 |
- *pax_flags |= PF_NOPAGEEXEC; |
152 |
- compat |= 1; |
153 |
- break ; |
154 |
- case 'S': |
155 |
- *pax_flags |= PF_SEGMEXEC; |
156 |
- compat |= 1; |
157 |
- break; |
158 |
- case 's': |
159 |
- *pax_flags |= PF_NOSEGMEXEC; |
160 |
- compat |= 1; |
161 |
- break ; |
162 |
- case 'M': |
163 |
- *pax_flags |= PF_MPROTECT; |
164 |
- compat |= 1; |
165 |
- break; |
166 |
- case 'm': |
167 |
- *pax_flags |= PF_NOMPROTECT; |
168 |
- compat |= 1; |
169 |
- break ; |
170 |
- case 'E': |
171 |
- *pax_flags |= PF_EMUTRAMP; |
172 |
- compat |= 1; |
173 |
- break; |
174 |
- case 'e': |
175 |
- *pax_flags |= PF_NOEMUTRAMP; |
176 |
- compat |= 1; |
177 |
- break ; |
178 |
- case 'R': |
179 |
- *pax_flags |= PF_RANDMMAP; |
180 |
- compat |= 1; |
181 |
- break; |
182 |
- case 'r': |
183 |
- *pax_flags |= PF_NORANDMMAP; |
184 |
- compat |= 1; |
185 |
- break ; |
186 |
- case 'X': |
187 |
- *pax_flags |= PF_RANDEXEC; |
188 |
- compat |= 1; |
189 |
- break; |
190 |
- case 'x': |
191 |
- *pax_flags |= PF_NORANDEXEC; |
192 |
- compat |= 1; |
193 |
- break ; |
194 |
- case 'Z': |
195 |
- *pax_flags = PF_PAGEEXEC | PF_SEGMEXEC | PF_MPROTECT | |
196 |
- PF_NOEMUTRAMP | PF_RANDMMAP | PF_RANDEXEC; |
197 |
- compat += 1; |
198 |
- break ; |
199 |
- case 'z': |
200 |
- *pax_flags = PF_PAGEEXEC | PF_NOPAGEEXEC | PF_SEGMEXEC | PF_NOSEGMEXEC | |
201 |
- PF_MPROTECT | PF_NOMPROTECT | PF_EMUTRAMP | PF_NOEMUTRAMP | |
202 |
- PF_RANDMMAP | PF_NORANDMMAP | PF_RANDEXEC | PF_NORANDEXEC; |
203 |
- compat += 1; |
204 |
- break; |
205 |
- case 'v': |
206 |
- *view_flags = 1; |
207 |
- compat |= 1; |
208 |
- break; |
209 |
- case 'h': |
210 |
- print_help(v[0]); |
211 |
- break; |
212 |
- case '?': |
213 |
- default: |
214 |
- error(EXIT_FAILURE, 0, "option -%c is invalid: ignored.", optopt ) ; |
215 |
- } |
216 |
- |
217 |
- if(compat != 1 || v[optind] == NULL) |
218 |
- print_help(v[0]); |
219 |
- |
220 |
- return v[optind] ; |
221 |
-} |
222 |
- |
223 |
- |
224 |
-uint16_t |
225 |
-read_flags(int fd) |
226 |
-{ |
227 |
- //UINT16_MAX is an invalid value |
228 |
- uint16_t xt_flags = UINT16_MAX; |
229 |
- |
230 |
- if(fgetxattr(fd, PAX_NAMESPACE, &xt_flags, sizeof(uint16_t)) == -1) |
231 |
- { |
232 |
- //xattrs is supported, PAX_NAMESPACE is present, but it is the wrong size |
233 |
- if(errno == ERANGE) |
234 |
- { |
235 |
- printf("XATTR_PAX: malformed flags found\n"); |
236 |
- //FIXME remove the user.pax field |
237 |
- xt_flags = 0; |
238 |
- } |
239 |
- |
240 |
- //xattrs is supported, PAX_NAMESPACE is not present |
241 |
- if(errno == ENOATTR) |
242 |
- { |
243 |
- printf("XATTR_PAX: not found\n"); |
244 |
- xt_flags = 0; |
245 |
- } |
246 |
- |
247 |
- //xattrs is not supported |
248 |
- if(errno == ENOTSUP) |
249 |
- printf("XATTR_PAX: extended attribute not supported\n"); |
250 |
- } |
251 |
- |
252 |
- return xt_flags; |
253 |
-} |
254 |
- |
255 |
- |
256 |
-#define BUF_SIZE 7 |
257 |
-void |
258 |
-print_flags(int fd) |
259 |
-{ |
260 |
- uint16_t xt_flags; |
261 |
- char xt_buf[BUF_SIZE]; |
262 |
- |
263 |
- memset(xt_buf, 0, BUF_SIZE); |
264 |
- |
265 |
- //If an invalid value is returned, then skip this |
266 |
- if((xt_flags = read_flags(fd)) == UINT16_MAX) |
267 |
- return ; |
268 |
- |
269 |
- xt_buf[0] = xt_flags & PF_PAGEEXEC ? 'P' : |
270 |
- xt_flags & PF_NOPAGEEXEC ? 'p' : '-' ; |
271 |
- |
272 |
- xt_buf[1] = xt_flags & PF_SEGMEXEC ? 'S' : |
273 |
- xt_flags & PF_NOSEGMEXEC ? 's' : '-'; |
274 |
- |
275 |
- xt_buf[2] = xt_flags & PF_MPROTECT ? 'M' : |
276 |
- xt_flags & PF_NOMPROTECT ? 'm' : '-'; |
277 |
- |
278 |
- xt_buf[3] = xt_flags & PF_EMUTRAMP ? 'E' : |
279 |
- xt_flags & PF_NOEMUTRAMP ? 'e' : '-'; |
280 |
- |
281 |
- xt_buf[4] = xt_flags & PF_RANDMMAP ? 'R' : |
282 |
- xt_flags & PF_NORANDMMAP ? 'r' : '-'; |
283 |
- |
284 |
- xt_buf[5] = xt_flags & PF_RANDEXEC ? 'X' : |
285 |
- xt_flags & PF_NORANDEXEC ? 'x' : '-'; |
286 |
- |
287 |
- printf("XATTR_PAX: %s\n", xt_buf); |
288 |
-} |
289 |
- |
290 |
- |
291 |
-void |
292 |
-set_flags(int fd, int *pax_flags) |
293 |
-{ |
294 |
- uint16_t xt_flags; |
295 |
- |
296 |
- //If an invalid value is returned, then skip this |
297 |
- if((xt_flags = read_flags(fd)) == UINT16_MAX) |
298 |
- return ; |
299 |
- |
300 |
- //PAGEEXEC |
301 |
- if(*pax_flags & PF_PAGEEXEC) |
302 |
- { |
303 |
- xt_flags |= PF_PAGEEXEC; |
304 |
- xt_flags &= ~PF_NOPAGEEXEC; |
305 |
- } |
306 |
- if(*pax_flags & PF_NOPAGEEXEC) |
307 |
- { |
308 |
- xt_flags &= ~PF_PAGEEXEC; |
309 |
- xt_flags |= PF_NOPAGEEXEC; |
310 |
- } |
311 |
- if((*pax_flags & PF_PAGEEXEC) && (*pax_flags & PF_NOPAGEEXEC)) |
312 |
- { |
313 |
- xt_flags &= ~PF_PAGEEXEC; |
314 |
- xt_flags &= ~PF_NOPAGEEXEC; |
315 |
- } |
316 |
- |
317 |
- //SEGMEXEC |
318 |
- if(*pax_flags & PF_SEGMEXEC) |
319 |
- { |
320 |
- xt_flags |= PF_SEGMEXEC; |
321 |
- xt_flags &= ~PF_NOSEGMEXEC; |
322 |
- } |
323 |
- if(*pax_flags & PF_NOSEGMEXEC) |
324 |
- { |
325 |
- xt_flags &= ~PF_SEGMEXEC; |
326 |
- xt_flags |= PF_NOSEGMEXEC; |
327 |
- } |
328 |
- if((*pax_flags & PF_SEGMEXEC) && (*pax_flags & PF_NOSEGMEXEC)) |
329 |
- { |
330 |
- xt_flags &= ~PF_SEGMEXEC; |
331 |
- xt_flags &= ~PF_NOSEGMEXEC; |
332 |
- } |
333 |
- |
334 |
- //MPROTECT |
335 |
- if(*pax_flags & PF_MPROTECT) |
336 |
- { |
337 |
- xt_flags |= PF_MPROTECT; |
338 |
- xt_flags &= ~PF_NOMPROTECT; |
339 |
- } |
340 |
- if(*pax_flags & PF_NOMPROTECT) |
341 |
- { |
342 |
- xt_flags &= ~PF_MPROTECT; |
343 |
- xt_flags |= PF_NOMPROTECT; |
344 |
- } |
345 |
- if((*pax_flags & PF_MPROTECT) && (*pax_flags & PF_NOMPROTECT)) |
346 |
- { |
347 |
- xt_flags &= ~PF_MPROTECT; |
348 |
- xt_flags &= ~PF_NOMPROTECT; |
349 |
- } |
350 |
- |
351 |
- //EMUTRAMP |
352 |
- if(*pax_flags & PF_EMUTRAMP) |
353 |
- { |
354 |
- xt_flags |= PF_EMUTRAMP; |
355 |
- xt_flags &= ~PF_NOEMUTRAMP; |
356 |
- } |
357 |
- if(*pax_flags & PF_NOEMUTRAMP) |
358 |
- { |
359 |
- xt_flags &= ~PF_EMUTRAMP; |
360 |
- xt_flags |= PF_NOEMUTRAMP; |
361 |
- } |
362 |
- if((*pax_flags & PF_EMUTRAMP) && (*pax_flags & PF_NOEMUTRAMP)) |
363 |
- { |
364 |
- xt_flags &= ~PF_EMUTRAMP; |
365 |
- xt_flags &= ~PF_NOEMUTRAMP; |
366 |
- } |
367 |
- |
368 |
- //RANDMMAP |
369 |
- if(*pax_flags & PF_RANDMMAP) |
370 |
- { |
371 |
- xt_flags |= PF_RANDMMAP; |
372 |
- xt_flags &= ~PF_NORANDMMAP; |
373 |
- } |
374 |
- if(*pax_flags & PF_NORANDMMAP) |
375 |
- { |
376 |
- xt_flags &= ~PF_RANDMMAP; |
377 |
- xt_flags |= PF_NORANDMMAP; |
378 |
- } |
379 |
- if((*pax_flags & PF_RANDMMAP) && (*pax_flags & PF_NORANDMMAP)) |
380 |
- { |
381 |
- xt_flags &= ~PF_RANDMMAP; |
382 |
- xt_flags &= ~PF_NORANDMMAP; |
383 |
- } |
384 |
- |
385 |
- //RANDEXEC |
386 |
- if(*pax_flags & PF_RANDEXEC) |
387 |
- { |
388 |
- xt_flags |= PF_RANDEXEC; |
389 |
- xt_flags &= ~PF_NORANDEXEC; |
390 |
- } |
391 |
- if(*pax_flags & PF_NORANDEXEC) |
392 |
- { |
393 |
- xt_flags &= ~PF_RANDEXEC; |
394 |
- xt_flags |= PF_NORANDEXEC; |
395 |
- } |
396 |
- if((*pax_flags & PF_RANDEXEC) && (*pax_flags & PF_NORANDEXEC)) |
397 |
- { |
398 |
- xt_flags &= ~PF_RANDEXEC; |
399 |
- xt_flags &= ~PF_NORANDEXEC; |
400 |
- } |
401 |
- |
402 |
- if(fsetxattr(fd, PAX_NAMESPACE, &xt_flags, sizeof(uint16_t), 0) == -1) |
403 |
- { |
404 |
- if(errno == ENOSPC || errno == EDQUOT) |
405 |
- printf("XATTR_PAX: cannot store xt_flags\n"); |
406 |
- if(errno == ENOTSUP) |
407 |
- printf("XATTR_PAX: extended attribute not supported\n"); |
408 |
- } |
409 |
-} |
410 |
- |
411 |
- |
412 |
-int |
413 |
-main( int argc, char *argv[]) |
414 |
-{ |
415 |
- int fd; |
416 |
- int pax_flags, view_flags; |
417 |
- char *f_name; |
418 |
- |
419 |
- f_name = parse_cmd_args(argc, argv, &pax_flags, &view_flags); |
420 |
- |
421 |
- if((fd = open(f_name, O_RDWR)) < 0) |
422 |
- error(EXIT_FAILURE, 0, "open() fail."); |
423 |
- |
424 |
- if(pax_flags != 0) |
425 |
- set_flags(fd, &pax_flags); |
426 |
- |
427 |
- if(view_flags == 1) |
428 |
- print_flags(fd); |
429 |
- |
430 |
- close(fd); |
431 |
-} |