1 |
commit: 3d813940e752cc3b9a230086013501d9453d2167 |
2 |
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun Jan 3 22:15:39 2016 +0000 |
4 |
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org> |
5 |
CommitDate: Sun Jan 3 22:15:39 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/pax-utils.git/commit/?id=3d813940 |
7 |
|
8 |
paxelf: switch low level elf helpers to unsigned ints |
9 |
|
10 |
Avoid using signed types when working with unsigned elf fields. |
11 |
|
12 |
paxelf.c | 28 +++++++++++++--------------- |
13 |
paxelf.h | 6 +++--- |
14 |
2 files changed, 16 insertions(+), 18 deletions(-) |
15 |
|
16 |
diff --git a/paxelf.c b/paxelf.c |
17 |
index b0ba144..ff385c5 100644 |
18 |
--- a/paxelf.c |
19 |
+++ b/paxelf.c |
20 |
@@ -15,11 +15,13 @@ |
21 |
#define QUERY(n) { #n, n } |
22 |
typedef const struct { |
23 |
const char *str; |
24 |
- int value; |
25 |
+ /* We use unsigned int as we assume it's at least 32 bits. This covers |
26 |
+ all our uses so far as they have been limited to that size. */ |
27 |
+ unsigned int value; |
28 |
} pairtype; |
29 |
-static inline const char *find_pairtype(pairtype *pt, int type) |
30 |
+static inline const char *find_pairtype(pairtype *pt, unsigned int type) |
31 |
{ |
32 |
- int i; |
33 |
+ size_t i; |
34 |
for (i = 0; pt[i].str; ++i) |
35 |
if (type == pt[i].value) |
36 |
return pt[i].str; |
37 |
@@ -84,14 +86,12 @@ static pairtype elf_etypes[] = { |
38 |
{ 0, 0 } |
39 |
}; |
40 |
|
41 |
-int get_etype(elfobj *elf) |
42 |
+unsigned int get_etype(elfobj *elf) |
43 |
{ |
44 |
- int type; |
45 |
if (elf->elf_class == ELFCLASS32) |
46 |
- type = EGET(EHDR32(elf->ehdr)->e_type); |
47 |
+ return EGET(EHDR32(elf->ehdr)->e_type); |
48 |
else |
49 |
- type = EGET(EHDR64(elf->ehdr)->e_type); |
50 |
- return type; |
51 |
+ return EGET(EHDR64(elf->ehdr)->e_type); |
52 |
} |
53 |
|
54 |
const char *get_elfetype(elfobj *elf) |
55 |
@@ -162,10 +162,10 @@ void print_etypes(FILE *stream) |
56 |
fprintf(stream, "\n"); |
57 |
} |
58 |
|
59 |
-int etype_lookup(const char *str) |
60 |
+unsigned int etype_lookup(const char *str) |
61 |
{ |
62 |
if (*str == 'E') { |
63 |
- int i; |
64 |
+ size_t i; |
65 |
for (i = 0; elf_etypes[i].str; ++i) { |
66 |
if (strcmp(str, elf_etypes[i].str) == 0) |
67 |
return elf_etypes[i].value; |
68 |
@@ -275,14 +275,12 @@ static pairtype elf_emtypes[] = { |
69 |
{ 0, 0 } |
70 |
}; |
71 |
|
72 |
-int get_emtype(elfobj *elf) |
73 |
+unsigned int get_emtype(elfobj *elf) |
74 |
{ |
75 |
- int type; |
76 |
if (elf->elf_class == ELFCLASS32) |
77 |
- type = EGET(EHDR32(elf->ehdr)->e_machine); |
78 |
+ return EGET(EHDR32(elf->ehdr)->e_machine); |
79 |
else |
80 |
- type = EGET(EHDR64(elf->ehdr)->e_machine); |
81 |
- return type; |
82 |
+ return EGET(EHDR64(elf->ehdr)->e_machine); |
83 |
} |
84 |
|
85 |
const char *get_elfemtype(elfobj *elf) |
86 |
|
87 |
diff --git a/paxelf.h b/paxelf.h |
88 |
index 034e0d7..4beec93 100644 |
89 |
--- a/paxelf.h |
90 |
+++ b/paxelf.h |
91 |
@@ -70,10 +70,10 @@ extern const char *get_elfstbtype(int type); |
92 |
extern const char *get_elfstvtype(int type); |
93 |
extern const char *get_elfstttype(int type); |
94 |
extern void *elf_findsecbyname(elfobj *elf, const char *name); |
95 |
-extern int get_etype(elfobj *elf); |
96 |
-extern int get_emtype(elfobj *elf); |
97 |
+extern unsigned int get_etype(elfobj *elf); |
98 |
+extern unsigned int get_emtype(elfobj *elf); |
99 |
extern void print_etypes(FILE *); |
100 |
-extern int etype_lookup(const char *); |
101 |
+extern unsigned int etype_lookup(const char *); |
102 |
|
103 |
/* PaX flags (to be read in elfhdr.e_flags) */ |
104 |
#define HF_PAX_PAGEEXEC 1 /* 0: Paging based non-exec pages */ |