Gentoo Archives: gentoo-commits

From: Mike Frysinger <vapier@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/pax-utils:master commit in: /
Date: Sun, 03 Jan 2016 22:23:54
Message-Id: 1451859339.3d813940e752cc3b9a230086013501d9453d2167.vapier@gentoo
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 */