Gentoo Archives: gentoo-commits

From: "Anthony G. Basile" <blueness@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/elfix:elfix-0.8.x commit in: misc/, misc/link-maps/, misc/elf-manipulate/
Date: Mon, 20 May 2013 20:02:47
Message-Id: 1369079737.a71f43bb966d020f2c5f46ff2b13fbca8224736f.blueness@gentoo
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 -}