83d9a8 import file-5.11-33.el7

Authored and Committed by centosrcm 8 years ago
    import file-5.11-33.el7
    
        
SOURCES/file-4.17-rpm-name.patch CHANGED
@@ -2,7 +2,7 @@ diff --git a/magic/Magdir/rpm b/magic/Magdir/rpm
2
2
index 4eb5556..fe22b3d 100644
3
3
--- a/magic/Magdir/rpm
4
4
+++ b/magic/Magdir/rpm
5
- @@ -28,6 +28,7 @@
5
+ @@ -29,6 +29,7 @@
6
6
>>8 beshort 17 SuperH
7
7
>>8 beshort 18 Xtensa
8
8
>>8 beshort 255 noarch
SOURCES/file-5.04-minix.patch CHANGED
@@ -2,7 +2,7 @@ diff --git a/magic/Magdir/filesystems b/magic/Magdir/filesystems
2
2
index 9172dcb..25c24ca 100644
3
3
--- a/magic/Magdir/filesystems
4
4
+++ b/magic/Magdir/filesystems
5
- @@ -1351,32 +1351,40 @@
5
+ @@ -885,32 +885,40 @@
6
6
# Minix filesystems - Juan Cespedes <cespedes@debian.org>
7
7
0x410 leshort 0x137f
8
8
!:strength / 2
SOURCES/file-5.11-CVE-2014-0207.patch CHANGED
@@ -14,7 +14,7 @@ diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c
14
14
index 4712e84..16649f1 100644
15
15
--- a/src/cdf.c
16
16
+++ b/src/cdf.c
17
- @@ -367,10 +367,10 @@ cdf_read_short_sector(const cdf_stream_t *sst, void *buf, size_t offs,
17
+ @@ -352,10 +352,10 @@ cdf_read_short_sector(const cdf_stream_t *sst, void *buf, size_t offs,
18
18
size_t ss = CDF_SHORT_SEC_SIZE(h);
19
19
size_t pos = CDF_SHORT_SEC_POS(h, id);
20
20
assert(ss == len);
SOURCES/file-5.11-CVE-2014-0237.patch CHANGED
@@ -13,7 +13,7 @@ diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c
13
13
index dd7177e..8dacd2f 100644
14
14
--- a/src/cdf.c
15
15
+++ b/src/cdf.c
16
- @@ -942,7 +942,7 @@ int
16
+ @@ -929,7 +929,7 @@ int
17
17
cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
18
18
cdf_summary_info_header_t *ssi, cdf_property_info_t **info, size_t *count)
19
19
{
@@ -22,7 +22,7 @@ index dd7177e..8dacd2f 100644
22
22
const cdf_summary_info_header_t *si =
23
23
CAST(const cdf_summary_info_header_t *, sst->sst_tab);
24
24
const cdf_section_declaration_t *sd =
25
- @@ -957,21 +957,13 @@ cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
25
+ @@ -944,21 +944,13 @@ cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
26
26
ssi->si_os = CDF_TOLE2(si->si_os);
27
27
ssi->si_class = si->si_class;
28
28
cdf_swap_class(&ssi->si_class);
SOURCES/file-5.11-CVE-2014-0238.patch CHANGED
@@ -12,7 +12,7 @@ diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c
12
12
index 8dacd2f..4712e84 100644
13
13
--- a/src/cdf.c
14
14
+++ b/src/cdf.c
15
- @@ -823,6 +823,10 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
15
+ @@ -810,6 +810,10 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
16
16
i, inp[i].pi_id, inp[i].pi_type, q - p, offs));
17
17
if (inp[i].pi_type & CDF_VECTOR) {
18
18
nelements = CDF_GETUINT32(q, 1);
@@ -23,7 +23,7 @@ index 8dacd2f..4712e84 100644
23
23
o = 2;
24
24
} else {
25
25
nelements = 1;
26
- @@ -897,7 +901,9 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
26
+ @@ -884,7 +888,9 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
27
27
}
28
28
DPRINTF(("nelements = %" SIZE_T_FORMAT "u\n",
29
29
nelements));
SOURCES/file-5.11-CVE-2014-3478.patch CHANGED
@@ -14,7 +14,7 @@ diff --git a/ext/fileinfo/libmagic/softmagic.c b/ext/fileinfo/libmagic/softmagic
14
14
index 21fea6b..01e4977 100644
15
15
--- a/src/softmagic.c
16
16
+++ b/src/softmagic.c
17
- @@ -881,10 +881,18 @@ mconvert(struct magic_set *ms, struct magic *m, int flip)
17
+ @@ -818,10 +818,18 @@ mconvert(struct magic_set *ms, struct magic *m)
18
18
return 1;
19
19
}
20
20
case FILE_PSTRING: {
SOURCES/file-5.11-CVE-2014-3479.patch CHANGED
@@ -14,7 +14,7 @@ diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c
14
14
index 16649f1..c9a5d50 100644
15
15
--- a/src/cdf.c
16
16
+++ b/src/cdf.c
17
- @@ -277,13 +277,15 @@ cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h,
17
+ @@ -267,13 +267,15 @@ cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h,
18
18
{
19
19
const char *b = (const char *)sst->sst_tab;
20
20
const char *e = ((const char *)p) + tail;
SOURCES/file-5.11-CVE-2014-3480.patch CHANGED
@@ -14,7 +14,7 @@ diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c
14
14
index c9a5d50..ee467a6 100644
15
15
--- a/src/cdf.c
16
16
+++ b/src/cdf.c
17
- @@ -470,7 +470,8 @@ size_t
17
+ @@ -457,7 +457,8 @@ size_t
18
18
cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size)
19
19
{
20
20
size_t i, j;
@@ -24,7 +24,7 @@ index c9a5d50..ee467a6 100644
24
24
25
25
DPRINTF(("Chain:"));
26
26
for (j = i = 0; sid >= 0; i++, j++) {
27
- @@ -480,8 +481,8 @@ cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size)
27
+ @@ -467,8 +468,8 @@ cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size)
28
28
errno = EFTYPE;
29
29
return (size_t)-1;
30
30
}
SOURCES/file-5.11-CVE-2014-3487.patch CHANGED
@@ -16,7 +16,7 @@ diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c
16
16
index ee467a6..429f3b9 100644
17
17
--- a/src/cdf.c
18
18
+++ b/src/cdf.c
19
- @@ -812,7 +812,11 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
19
+ @@ -799,7 +799,11 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
20
20
if (cdf_check_stream_offset(sst, h, e, 0, __LINE__) == -1)
21
21
goto out;
22
22
for (i = 0; i < sh.sh_properties; i++) {
SOURCES/file-5.11-CVE-2014-3587.patch CHANGED
@@ -12,7 +12,7 @@ diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c
12
12
index 429f3b9..2c0a2d9 100644
13
13
--- a/src/cdf.c
14
14
+++ b/src/cdf.c
15
- @@ -820,7 +820,7 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
15
+ @@ -807,7 +807,7 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
16
16
q = (const uint8_t *)(const void *)
17
17
((const char *)(const void *)p + ofs
18
18
- 2 * sizeof(uint32_t));
SOURCES/file-5.11-CVE-2014-3710.patch CHANGED
@@ -16,7 +16,7 @@ diff --git a/ext/fileinfo/libmagic/readelf.c b/ext/fileinfo/libmagic/readelf.c
16
16
index 1c3845f..bb6f70f 100644
17
17
--- a/src/readelf.c
18
18
+++ b/src/readelf.c
19
- @@ -372,6 +372,13 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
19
+ @@ -366,6 +366,13 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
20
20
uint32_t namesz, descsz;
21
21
unsigned char *nbuf = CAST(unsigned char *, vbuf);
22
22
SOURCES/file-5.11-CVE-2014-9652.patch CHANGED
@@ -12,7 +12,7 @@ diff --git a/src/softmagic.c b/src/softmagic.c
12
12
index dbb670a..2b15f2c 100644
13
13
--- a/src/softmagic.c
14
14
+++ b/src/softmagic.c
15
- @@ -964,14 +964,17 @@ mconvert(struct magic_set *ms, struct magic *m, int flip)
15
+ @@ -822,14 +822,17 @@ mconvert(struct magic_set *ms, struct magic *m)
16
16
size_t sz = file_pstring_length_size(m);
17
17
char *ptr1 = p->s, *ptr2 = ptr1 + sz;
18
18
size_t len = file_pstring_get_length(m, ptr1);
SOURCES/file-5.11-auxv.patch ADDED
@@ -0,0 +1,564 @@
1
+ diff --git a/src/readelf.c b/src/readelf.c
2
+ index 9651239..807affc 100644
3
+ --- a/src/readelf.c
4
+ +++ b/src/readelf.c
5
+ @@ -41,6 +41,8 @@ FILE_RCSID("@(#)$File: readelf.c,v 1.90 2011/08/23 08:01:12 christos Exp $")
6
+ #include "readelf.h"
7
+ #include "magic.h"
8
+
9
+ +#define __arraycount(a) (sizeof(a) / sizeof(a[0]))
10
+ +
11
+ #ifdef ELFCORE
12
+ private int dophn_core(struct magic_set *, int, int, int, off_t, int, size_t,
13
+ off_t, int *);
14
+ @@ -50,7 +52,7 @@ private int dophn_exec(struct magic_set *, int, int, int, off_t, int, size_t,
15
+ private int doshn(struct magic_set *, int, int, int, off_t, int, size_t,
16
+ off_t, int *, int, int);
17
+ private size_t donote(struct magic_set *, void *, size_t, size_t, int,
18
+ - int, size_t, int *);
19
+ + int, size_t, int *, int, off_t, int, off_t);
20
+
21
+ #define ELF_ALIGN(a) ((((a) + align - 1) / align) * align)
22
+
23
+ @@ -184,6 +186,11 @@ getu64(int swap, uint64_t value)
24
+ elf_getu32(swap, ph32.p_align) : 4) \
25
+ : (off_t) (ph64.p_align ? \
26
+ elf_getu64(swap, ph64.p_align) : 4)))
27
+ +#define xph_vaddr (size_t)((clazz == ELFCLASS32 \
28
+ + ? (off_t) (ph32.p_vaddr ? \
29
+ + elf_getu32(swap, ph32.p_vaddr) : 4) \
30
+ + : (off_t) (ph64.p_vaddr ? \
31
+ + elf_getu64(swap, ph64.p_vaddr) : 4)))
32
+ #define xph_filesz (size_t)((clazz == ELFCLASS32 \
33
+ ? elf_getu32(swap, ph32.p_filesz) \
34
+ : elf_getu64(swap, ph64.p_filesz)))
35
+ @@ -194,8 +201,8 @@ getu64(int swap, uint64_t value)
36
+ ? elf_getu32(swap, ph32.p_memsz) \
37
+ : elf_getu64(swap, ph64.p_memsz)))
38
+ #define xnh_sizeof (clazz == ELFCLASS32 \
39
+ - ? sizeof nh32 \
40
+ - : sizeof nh64)
41
+ + ? sizeof(nh32) \
42
+ + : sizeof(nh64))
43
+ #define xnh_type (clazz == ELFCLASS32 \
44
+ ? elf_getu32(swap, nh32.n_type) \
45
+ : elf_getu32(swap, nh64.n_type))
46
+ @@ -220,6 +227,18 @@ getu64(int swap, uint64_t value)
47
+ #define xcap_val (clazz == ELFCLASS32 \
48
+ ? elf_getu32(swap, cap32.c_un.c_val) \
49
+ : elf_getu64(swap, cap64.c_un.c_val))
50
+ +#define xauxv_addr (clazz == ELFCLASS32 \
51
+ + ? (void *)&auxv32 \
52
+ + : (void *)&auxv64)
53
+ +#define xauxv_sizeof (clazz == ELFCLASS32 \
54
+ + ? sizeof(auxv32) \
55
+ + : sizeof(auxv64))
56
+ +#define xauxv_type (clazz == ELFCLASS32 \
57
+ + ? elf_getu32(swap, auxv32.a_type) \
58
+ + : elf_getu64(swap, auxv64.a_type))
59
+ +#define xauxv_val (clazz == ELFCLASS32 \
60
+ + ? elf_getu32(swap, auxv32.a_v) \
61
+ + : elf_getu64(swap, auxv64.a_v))
62
+
63
+ #ifdef ELFCORE
64
+ /*
65
+ @@ -306,6 +325,7 @@ private const char os_style_names[][8] = {
66
+ #define FLAGS_DID_BUILD_ID 0x04
67
+ #define FLAGS_DID_CORE_STYLE 0x08
68
+ #define FLAGS_IS_CORE 0x10
69
+ +#define FLAGS_DID_AUXV 0x200
70
+
71
+ private int
72
+ dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
73
+ @@ -316,6 +336,8 @@ dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
74
+ size_t offset, len;
75
+ unsigned char nbuf[BUFSIZ];
76
+ ssize_t bufsize;
77
+ + off_t ph_off = off;
78
+ + int ph_num = num;
79
+
80
+ if (size != xph_sizeof) {
81
+ if (file_printf(ms, ", corrupted program header size") == -1)
82
+ @@ -355,7 +377,8 @@ dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
83
+ if (offset >= (size_t)bufsize)
84
+ break;
85
+ offset = donote(ms, nbuf, offset, (size_t)bufsize,
86
+ - clazz, swap, 4, flags);
87
+ + clazz, swap, 4, flags, fd, ph_off,
88
+ + ph_num, fsize);
89
+ if (offset == 0)
90
+ break;
91
+
92
+ @@ -365,9 +388,160 @@ dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
93
+ }
94
+ #endif
95
+
96
+ +private off_t
97
+ +get_offset_from_virtaddr(struct magic_set *ms, int swap, int clazz, int fd,
98
+ + off_t off, int num, off_t fsize, uint64_t virtaddr)
99
+ +{
100
+ + Elf32_Phdr ph32;
101
+ + Elf64_Phdr ph64;
102
+ +
103
+ + /*
104
+ + * Loop through all the program headers and find the header with
105
+ + * virtual address in which the "virtaddr" belongs to.
106
+ + */
107
+ + for ( ; num; num--) {
108
+ + if (pread(fd, xph_addr, xph_sizeof, off) < (ssize_t)xph_sizeof) {
109
+ + file_badread(ms);
110
+ + return -1;
111
+ + }
112
+ + off += xph_sizeof;
113
+ +
114
+ + if (xph_offset > fsize) {
115
+ + /* Perhaps warn here */
116
+ + continue;
117
+ + }
118
+ +
119
+ + if (virtaddr >= xph_vaddr && virtaddr < xph_vaddr + xph_filesz)
120
+ + return xph_offset + (virtaddr - xph_vaddr);
121
+ + }
122
+ + return 0;
123
+ +}
124
+ +
125
+ +private size_t
126
+ +get_string_on_virtaddr(struct magic_set *ms,
127
+ + int swap, int clazz, int fd, off_t ph_off, int ph_num,
128
+ + off_t fsize, uint64_t virtaddr, char *buf, ssize_t buflen)
129
+ +{
130
+ + char *bptr;
131
+ + off_t offset;
132
+ +
133
+ + if (buflen == 0)
134
+ + return 0;
135
+ +
136
+ + offset = get_offset_from_virtaddr(ms, swap, clazz, fd, ph_off, ph_num,
137
+ + fsize, virtaddr);
138
+ + if (offset < 0 || (buflen = pread(fd, buf, buflen, offset)) <= 0) {
139
+ + file_badread(ms);
140
+ + return 0;
141
+ + }
142
+ +
143
+ + buf[buflen - 1] = '\0';
144
+ +
145
+ + /* We expect only printable characters, so return if buffer contains
146
+ + * non-printable character before the '\0' or just '\0'. */
147
+ + for (bptr = buf; *bptr && isprint((unsigned char)*bptr); bptr++)
148
+ + continue;
149
+ + if (*bptr != '\0')
150
+ + return 0;
151
+ +
152
+ + return bptr - buf;
153
+ +}
154
+ +
155
+ +
156
+ +private int
157
+ +do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
158
+ + int swap, uint32_t namesz __attribute__((__unused__)),
159
+ + uint32_t descsz __attribute__((__unused__)),
160
+ + size_t noff __attribute__((__unused__)), size_t doff,
161
+ + int *flags, size_t size __attribute__((__unused__)), int clazz,
162
+ + int fd, off_t ph_off, int ph_num, off_t fsize)
163
+ +{
164
+ +#ifdef ELFCORE
165
+ + Aux32Info auxv32;
166
+ + Aux64Info auxv64;
167
+ + size_t elsize = xauxv_sizeof;
168
+ + const char *tag;
169
+ + int is_string;
170
+ + size_t nval;
171
+ + size_t off;
172
+ +
173
+ +
174
+ + if (type != NT_AUXV || (*flags & FLAGS_IS_CORE) == 0)
175
+ + return 0;
176
+ +
177
+ + *flags |= FLAGS_DID_AUXV;
178
+ +
179
+ + nval = 0;
180
+ + for (off = 0; off + elsize <= descsz; off += elsize) {
181
+ + (void)memcpy(xauxv_addr, &nbuf[doff + off], xauxv_sizeof);
182
+ + /* Limit processing to 50 vector entries to prevent DoS */
183
+ + if (nval++ >= 50) {
184
+ + file_error(ms, 0, "Too many ELF Auxv elements");
185
+ + return 1;
186
+ + }
187
+ +
188
+ + switch(xauxv_type) {
189
+ + case AT_LINUX_EXECFN:
190
+ + is_string = 1;
191
+ + tag = "execfn";
192
+ + break;
193
+ + case AT_LINUX_PLATFORM:
194
+ + is_string = 1;
195
+ + tag = "platform";
196
+ + break;
197
+ + case AT_LINUX_UID:
198
+ + is_string = 0;
199
+ + tag = "real uid";
200
+ + break;
201
+ + case AT_LINUX_GID:
202
+ + is_string = 0;
203
+ + tag = "real gid";
204
+ + break;
205
+ + case AT_LINUX_EUID:
206
+ + is_string = 0;
207
+ + tag = "effective uid";
208
+ + break;
209
+ + case AT_LINUX_EGID:
210
+ + is_string = 0;
211
+ + tag = "effective gid";
212
+ + break;
213
+ + default:
214
+ + is_string = 0;
215
+ + tag = NULL;
216
+ + break;
217
+ + }
218
+ +
219
+ + if (tag == NULL)
220
+ + continue;
221
+ +
222
+ + if (is_string) {
223
+ + char buf[256];
224
+ + ssize_t buflen;
225
+ + buflen = get_string_on_virtaddr(ms, swap, clazz, fd,
226
+ + ph_off, ph_num, fsize, xauxv_val, buf, sizeof(buf));
227
+ +
228
+ + if (buflen == 0)
229
+ + continue;
230
+ +
231
+ + if (file_printf(ms, ", %s: '%s'", tag, buf) == -1)
232
+ + return 0;
233
+ + } else {
234
+ + if (file_printf(ms, ", %s: %d", tag, (int) xauxv_val)
235
+ + == -1)
236
+ + return 0;
237
+ + }
238
+ + }
239
+ + return 1;
240
+ +#else
241
+ + return 0;
242
+ +#endif
243
+ +}
244
+ +
245
+ +
246
+ private size_t
247
+ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
248
+ - int clazz, int swap, size_t align, int *flags)
249
+ + int clazz, int swap, size_t align, int *flags,
250
+ + int fd, off_t ph_off, int ph_num, off_t fsize)
251
+ {
252
+ Elf32_Nhdr nh32;
253
+ Elf64_Nhdr nh64;
254
+ @@ -390,6 +564,7 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
255
+
256
+ namesz = xnh_namesz;
257
+ descsz = xnh_descsz;
258
+ +
259
+ if ((namesz == 0) && (descsz == 0)) {
260
+ /*
261
+ * We're out of note headers.
262
+ @@ -438,37 +613,37 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
263
+ (void)memcpy(desc, &nbuf[doff], sizeof(desc));
264
+
265
+ if (file_printf(ms, ", for GNU/") == -1)
266
+ - return size;
267
+ + return offset;
268
+ switch (elf_getu32(swap, desc[0])) {
269
+ case GNU_OS_LINUX:
270
+ if (file_printf(ms, "Linux") == -1)
271
+ - return size;
272
+ + return offset;
273
+ break;
274
+ case GNU_OS_HURD:
275
+ if (file_printf(ms, "Hurd") == -1)
276
+ - return size;
277
+ + return offset;
278
+ break;
279
+ case GNU_OS_SOLARIS:
280
+ if (file_printf(ms, "Solaris") == -1)
281
+ - return size;
282
+ + return offset;
283
+ break;
284
+ case GNU_OS_KFREEBSD:
285
+ if (file_printf(ms, "kFreeBSD") == -1)
286
+ - return size;
287
+ + return offset;
288
+ break;
289
+ case GNU_OS_KNETBSD:
290
+ if (file_printf(ms, "kNetBSD") == -1)
291
+ - return size;
292
+ + return offset;
293
+ break;
294
+ default:
295
+ if (file_printf(ms, "<unknown>") == -1)
296
+ - return size;
297
+ + return offset;
298
+ }
299
+ if (file_printf(ms, " %d.%d.%d", elf_getu32(swap, desc[1]),
300
+ elf_getu32(swap, desc[2]), elf_getu32(swap, desc[3])) == -1)
301
+ - return size;
302
+ + return offset;
303
+ *flags |= FLAGS_DID_NOTE;
304
+ - return size;
305
+ + return offset;
306
+ }
307
+
308
+ if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
309
+ @@ -492,7 +667,7 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
310
+ desc = elf_getu32(swap, desc);
311
+
312
+ if (file_printf(ms, ", for NetBSD") == -1)
313
+ - return size;
314
+ + return offset;
315
+ /*
316
+ * The version number used to be stuck as 199905, and was thus
317
+ * basically content-free. Newer versions of NetBSD have fixed
318
+ @@ -512,23 +687,23 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
319
+ uint32_t ver_maj = desc / 100000000;
320
+
321
+ if (file_printf(ms, " %u.%u", ver_maj, ver_min) == -1)
322
+ - return size;
323
+ + return offset;
324
+ if (ver_rel == 0 && ver_patch != 0) {
325
+ if (file_printf(ms, ".%u", ver_patch) == -1)
326
+ - return size;
327
+ + return offset;
328
+ } else if (ver_rel != 0) {
329
+ while (ver_rel > 26) {
330
+ if (file_printf(ms, "Z") == -1)
331
+ - return size;
332
+ + return offset;
333
+ ver_rel -= 26;
334
+ }
335
+ if (file_printf(ms, "%c", 'A' + ver_rel - 1)
336
+ == -1)
337
+ - return size;
338
+ + return offset;
339
+ }
340
+ }
341
+ *flags |= FLAGS_DID_NOTE;
342
+ - return size;
343
+ + return offset;
344
+ }
345
+
346
+ if (namesz == 8 && strcmp((char *)&nbuf[noff], "FreeBSD") == 0 &&
347
+ @@ -537,7 +712,7 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
348
+ (void)memcpy(&desc, &nbuf[doff], sizeof(desc));
349
+ desc = elf_getu32(swap, desc);
350
+ if (file_printf(ms, ", for FreeBSD") == -1)
351
+ - return size;
352
+ + return offset;
353
+
354
+ /*
355
+ * Contents is __FreeBSD_version, whose relation to OS
356
+ @@ -567,69 +742,69 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
357
+ */
358
+ if (desc == 460002) {
359
+ if (file_printf(ms, " 4.6.2") == -1)
360
+ - return size;
361
+ + return offset;
362
+ } else if (desc < 460100) {
363
+ if (file_printf(ms, " %d.%d", desc / 100000,
364
+ desc / 10000 % 10) == -1)
365
+ - return size;
366
+ + return offset;
367
+ if (desc / 1000 % 10 > 0)
368
+ if (file_printf(ms, ".%d", desc / 1000 % 10)
369
+ == -1)
370
+ - return size;
371
+ + return offset;
372
+ if ((desc % 1000 > 0) || (desc % 100000 == 0))
373
+ if (file_printf(ms, " (%d)", desc) == -1)
374
+ - return size;
375
+ + return offset;
376
+ } else if (desc < 500000) {
377
+ if (file_printf(ms, " %d.%d", desc / 100000,
378
+ desc / 10000 % 10 + desc / 1000 % 10) == -1)
379
+ - return size;
380
+ + return offset;
381
+ if (desc / 100 % 10 > 0) {
382
+ if (file_printf(ms, " (%d)", desc) == -1)
383
+ - return size;
384
+ + return offset;
385
+ } else if (desc / 10 % 10 > 0) {
386
+ if (file_printf(ms, ".%d", desc / 10 % 10)
387
+ == -1)
388
+ - return size;
389
+ + return offset;
390
+ }
391
+ } else {
392
+ if (file_printf(ms, " %d.%d", desc / 100000,
393
+ desc / 1000 % 100) == -1)
394
+ - return size;
395
+ + return offset;
396
+ if ((desc / 100 % 10 > 0) ||
397
+ (desc % 100000 / 100 == 0)) {
398
+ if (file_printf(ms, " (%d)", desc) == -1)
399
+ - return size;
400
+ + return offset;
401
+ } else if (desc / 10 % 10 > 0) {
402
+ if (file_printf(ms, ".%d", desc / 10 % 10)
403
+ == -1)
404
+ - return size;
405
+ + return offset;
406
+ }
407
+ }
408
+ *flags |= FLAGS_DID_NOTE;
409
+ - return size;
410
+ + return offset;
411
+ }
412
+
413
+ if (namesz == 8 && strcmp((char *)&nbuf[noff], "OpenBSD") == 0 &&
414
+ xnh_type == NT_OPENBSD_VERSION && descsz == 4) {
415
+ if (file_printf(ms, ", for OpenBSD") == -1)
416
+ - return size;
417
+ + return offset;
418
+ /* Content of note is always 0 */
419
+ *flags |= FLAGS_DID_NOTE;
420
+ - return size;
421
+ + return offset;
422
+ }
423
+
424
+ if (namesz == 10 && strcmp((char *)&nbuf[noff], "DragonFly") == 0 &&
425
+ xnh_type == NT_DRAGONFLY_VERSION && descsz == 4) {
426
+ uint32_t desc;
427
+ if (file_printf(ms, ", for DragonFly") == -1)
428
+ - return size;
429
+ + return offset;
430
+ (void)memcpy(&desc, &nbuf[doff], sizeof(desc));
431
+ desc = elf_getu32(swap, desc);
432
+ if (file_printf(ms, " %d.%d.%d", desc / 100000,
433
+ desc / 10000 % 10, desc % 10000) == -1)
434
+ - return size;
435
+ + return offset;
436
+ *flags |= FLAGS_DID_NOTE;
437
+ - return size;
438
+ + return offset;
439
+ }
440
+
441
+ core:
442
+ @@ -661,14 +836,22 @@ core:
443
+ os_style = OS_STYLE_NETBSD;
444
+ }
445
+
446
+ + if ((*flags & FLAGS_DID_AUXV) == 0) {
447
+ + if (do_auxv_note(ms, nbuf, xnh_type, swap,
448
+ + namesz, descsz, noff, doff, flags, size, clazz,
449
+ + fd, ph_off, ph_num, fsize))
450
+ + return offset;
451
+ + }
452
+ +
453
+ +
454
+ #ifdef ELFCORE
455
+ if ((*flags & FLAGS_DID_CORE) != 0)
456
+ - return size;
457
+ + return offset;
458
+
459
+ if (os_style != -1 && (*flags & FLAGS_DID_CORE_STYLE) == 0) {
460
+ if (file_printf(ms, ", %s-style", os_style_names[os_style])
461
+ == -1)
462
+ - return size;
463
+ + return offset;
464
+ *flags |= FLAGS_DID_CORE_STYLE;
465
+ }
466
+
467
+ @@ -683,7 +866,7 @@ core:
468
+ */
469
+ if (file_printf(ms, ", from '%.31s'",
470
+ &nbuf[doff + 0x7c]) == -1)
471
+ - return size;
472
+ + return offset;
473
+
474
+ /*
475
+ * Extract the signal number. It is at
476
+ @@ -693,9 +876,9 @@ core:
477
+ sizeof(signo));
478
+ if (file_printf(ms, " (signal %u)",
479
+ elf_getu32(swap, signo)) == -1)
480
+ - return size;
481
+ + return offset;
482
+ *flags |= FLAGS_DID_CORE;
483
+ - return size;
484
+ + return offset;
485
+ }
486
+ break;
487
+
488
+ @@ -793,9 +976,9 @@ core:
489
+ cp--;
490
+ if (file_printf(ms, ", from '%.*s'",
491
+ (int)(cp - cname), cname) == -1)
492
+ - return size;
493
+ + return offset;
494
+ *flags |= FLAGS_DID_CORE;
495
+ - return size;
496
+ + return offset;
497
+
498
+ tryanother:
499
+ ;
500
+ @@ -936,7 +1119,7 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num,
501
+ if (noff >= (off_t)xsh_size)
502
+ break;
503
+ noff = donote(ms, nbuf, (size_t)noff,
504
+ - xsh_size, clazz, swap, 4, flags);
505
+ + xsh_size, clazz, swap, 4, flags, 0, 0, 0, 0);
506
+ if (noff == 0)
507
+ break;
508
+ }
509
+ @@ -1130,7 +1313,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
510
+ break;
511
+ offset = donote(ms, nbuf, offset,
512
+ (size_t)bufsize, clazz, swap, align,
513
+ - flags);
514
+ + flags, 0, 0, 0, 0);
515
+ if (offset == 0)
516
+ break;
517
+ }
518
+ diff --git a/src/readelf.h b/src/readelf.h
519
+ index ab4b5d1..fb34585 100644
520
+ --- a/src/readelf.h
521
+ +++ b/src/readelf.h
522
+ @@ -62,6 +62,42 @@ typedef uint8_t Elf64_Char;
523
+ #define EI_NIDENT 16
524
+
525
+ typedef struct {
526
+ + Elf32_Word a_type; /* 32-bit id */
527
+ + Elf32_Word a_v; /* 32-bit id */
528
+ +} Aux32Info;
529
+ +
530
+ +typedef struct {
531
+ + Elf64_Xword a_type; /* 64-bit id */
532
+ + Elf64_Xword a_v; /* 64-bit id */
533
+ +} Aux64Info;
534
+ +
535
+ +#define AT_NULL 0 /* end of vector */
536
+ +#define AT_IGNORE 1 /* entry should be ignored */
537
+ +#define AT_EXECFD 2 /* file descriptor of program */
538
+ +#define AT_PHDR 3 /* program headers for program */
539
+ +#define AT_PHENT 4 /* size of program header entry */
540
+ +#define AT_PHNUM 5 /* number of program headers */
541
+ +#define AT_PAGESZ 6 /* system page size */
542
+ +#define AT_BASE 7 /* base address of interpreter */
543
+ +#define AT_FLAGS 8 /* flags */
544
+ +#define AT_ENTRY 9 /* entry point of program */
545
+ +#define AT_LINUX_NOTELF 10 /* program is not ELF */
546
+ +#define AT_LINUX_UID 11 /* real uid */
547
+ +#define AT_LINUX_EUID 12 /* effective uid */
548
+ +#define AT_LINUX_GID 13 /* real gid */
549
+ +#define AT_LINUX_EGID 14 /* effective gid */
550
+ +#define AT_LINUX_PLATFORM 15 /* string identifying CPU for optimizations */
551
+ +#define AT_LINUX_HWCAP 16 /* arch dependent hints at CPU capabilities */
552
+ +#define AT_LINUX_CLKTCK 17 /* frequency at which times() increments */
553
+ +/* AT_* values 18 through 22 are reserved */
554
+ +#define AT_LINUX_SECURE 23 /* secure mode boolean */
555
+ +#define AT_LINUX_BASE_PLATFORM 24 /* string identifying real platform, may
556
+ + * differ from AT_PLATFORM. */
557
+ +#define AT_LINUX_RANDOM 25 /* address of 16 random bytes */
558
+ +#define AT_LINUX_HWCAP2 26 /* extension of AT_HWCAP */
559
+ +#define AT_LINUX_EXECFN 31 /* filename of program */
560
+ +
561
+ +typedef struct {
562
+ Elf32_Char e_ident[EI_NIDENT];
563
+ Elf32_Half e_type;
564
+ Elf32_Half e_machine;
SOURCES/file-5.11-buildid.patch CHANGED
@@ -11,7 +11,7 @@ diff --git a/src/readelf.c b/src/readelf.c
11
11
index deb6d31..158f789 100644
12
12
--- a/src/readelf.c
13
13
+++ b/src/readelf.c
14
- @@ -465,13 +465,14 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
14
+ @@ -473,13 +473,14 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
15
15
16
16
if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
17
17
xnh_type == NT_GNU_BUILD_ID && (descsz == 16 || descsz == 20)) {
SOURCES/file-5.11-java1718.patch ADDED
@@ -0,0 +1,13 @@
1
+ diff --git a/magic/Magdir/cafebabe b/magic/Magdir/cafebabe
2
+ index 6400e2f..6f2e96d 100644
3
+ --- a/magic/Magdir/cafebabe
4
+ +++ b/magic/Magdir/cafebabe
5
+ @@ -27,6 +27,8 @@
6
+ >>4 belong 0x0030 (Java 1.4)
7
+ >>4 belong 0x0031 (Java 1.5)
8
+ >>4 belong 0x0032 (Java 1.6)
9
+ +>>4 belong 0x0033 (Java 1.7)
10
+ +>>4 belong 0x0034 (Java 1.8)
11
+
12
+
13
+ 0 belong 0xcafebabe
SOURCES/file-5.11-newpython.patch ADDED
@@ -0,0 +1,14 @@
1
+ diff --git a/magic/Magdir/python b/magic/Magdir/python
2
+ index 23f8d6b..6d7121a 100644
3
+ --- a/magic/Magdir/python
4
+ +++ b/magic/Magdir/python
5
+ @@ -22,6 +22,9 @@
6
+ 0 belong 0x3b0c0d0a python 3.0 byte-compiled
7
+ 0 belong 0x4f0c0d0a python 3.1 byte-compiled
8
+ 0 belong 0x6c0c0d0a python 3.2 byte-compiled
9
+ +0 belong 0x9e0c0d0a python 3.3 byte-compiled
10
+ +0 belong 0xee0c0d0a python 3.4 byte-compiled
11
+ +0 belong 0x160d0d0a python 3.5 byte-compiled
12
+
13
+ 0 search/1/w #!\ /usr/bin/python Python script text executable
14
+ !:mime text/x-python
SOURCES/file-5.11-offset-oob.patch CHANGED
@@ -11,7 +11,7 @@ index 8d08cad..6dc86f5 100644
11
11
private int match(struct magic_set *, struct magic *, uint32_t,
12
12
const unsigned char *, size_t, int, int, int);
13
13
private int mget(struct magic_set *, const unsigned char *,
14
- @@ -1582,7 +1580,7 @@ mget(struct magic_set *ms, const unsigned char *s,
14
+ @@ -1601,7 +1599,7 @@ mget(struct magic_set *ms, const unsigned char *s,
15
15
break;
16
16
17
17
case FILE_REGEX:
@@ -20,7 +20,7 @@ index 8d08cad..6dc86f5 100644
20
20
return 0;
21
21
break;
22
22
23
- @@ -1592,7 +1590,7 @@ mget(struct magic_set *ms, const unsigned char *s,
23
+ @@ -1611,7 +1609,7 @@ mget(struct magic_set *ms, const unsigned char *s,
24
24
return -1;
25
25
if (offset == 0)
26
26
return 0;
SOURCES/file-5.11-pascal.patch ADDED
@@ -0,0 +1,16 @@
1
+ diff --git a/magic/Magdir/pascal b/magic/Magdir/pascal
2
+ index a134a47..d8e61c6 100644
3
+ --- a/magic/Magdir/pascal
4
+ +++ b/magic/Magdir/pascal
5
+ @@ -4,7 +4,7 @@
6
+ #
7
+ 0 search/8192 (input, Pascal source text
8
+ !:mime text/x-pascal
9
+ -0 regex \^program Pascal source text
10
+ -!:mime text/x-pascal
11
+ -0 regex \^record Pascal source text
12
+ -!:mime text/x-pascal
13
+ +#0 regex \^program Pascal source text
14
+ +#!:mime text/x-pascal
15
+ +#0 regex \^record Pascal source text
16
+ +#!:mime text/x-pascal
SOURCES/file-5.11-qcow3.patch CHANGED
@@ -2,7 +2,7 @@ diff --git a/magic/Magdir/msdos b/magic/Magdir/msdos
2
2
index 8f3e532..21f055d 100644
3
3
--- a/magic/Magdir/msdos
4
4
+++ b/magic/Magdir/msdos
5
- @@ -820,6 +820,21 @@
5
+ @@ -811,6 +811,21 @@
6
6
>>24 bequad x \b, %lld bytes
7
7
>>32 belong 1 \b, AES-encrypted
8
8
SOURCES/file-5.11-version.patch ADDED
@@ -0,0 +1,27 @@
1
+ From 5c9813d05317379b38e04b1b7ffb8cca6a236143 Mon Sep 17 00:00:00 2001
2
+ From: Christos Zoulas <christos@zoulas.com>
3
+ Date: Thu, 6 Sep 2012 14:18:50 +0000
4
+ Subject: [PATCH] PR/198: Version should not exit 1
5
+
6
+ Upstream-commit: a5a197f98d6ad293a25f3e20563aab31906c5ab3
7
+ Signed-off-by: Kamil Dudka <kdudka@redhat.com>
8
+ ---
9
+ src/file.c | 2 +-
10
+ 1 file changed, 1 insertion(+), 1 deletion(-)
11
+
12
+ diff --git a/src/file.c b/src/file.c
13
+ index 408ec63..7911b07 100644
14
+ --- a/src/file.c
15
+ +++ b/src/file.c
16
+ @@ -252,7 +252,7 @@ main(int argc, char *argv[])
17
+ (void)fprintf(stdout, "%s-%s\n", progname, VERSION);
18
+ (void)fprintf(stdout, "magic file from %s\n",
19
+ magicfile);
20
+ - return 1;
21
+ + return 0;
22
+ case 'z':
23
+ flags |= MAGIC_COMPRESS;
24
+ break;
25
+ --
26
+ 2.5.5
27
+
file modified
+23 -1
SPECS/file.spec CHANGED
@@ -5,7 +5,7 @@
5
5
Summary: A utility for determining file types
6
6
Name: file
7
7
Version: 5.11
8
- Release: 31%{?dist}
8
+ Release: 33%{?dist}
9
9
License: BSD
10
10
Group: Applications/File
11
11
Source0: ftp://ftp.astron.com/pub/file/file-%{version}.tar.gz
@@ -58,6 +58,14 @@ Patch51: file-5.11-CVE-2014-9652.patch
58
58
Patch52: file-5.11-CVE-2014-9653.patch
59
59
Patch53: file-5.11-xml.patch
60
60
Patch54: file-5.11-buildid.patch
61
+ Patch55: file-5.11-java1718.patch
62
+ Patch56: file-5.11-auxv.patch
63
+ Patch57: file-5.11-newpython.patch
64
+ Patch58: file-5.11-pascal.patch
65
+
66
+ # fix #1246385 - 'file --version' now exits successfully
67
+ Patch59: file-5.11-version.patch
68
+
61
69
URL: http://www.darwinsys.com/file/
62
70
Requires: file-libs = %{version}-%{release}
63
71
BuildRequires: zlib-devel
@@ -158,6 +166,11 @@ file(1) command.
158
166
%patch52 -p1
159
167
%patch53 -p1
160
168
%patch54 -p1
169
+ %patch55 -p1
170
+ %patch56 -p1
171
+ %patch57 -p1
172
+ %patch58 -p1
173
+ %patch59 -p1
161
174
162
175
# Patches can generate *.orig files, which can't stay in the magic dir,
163
176
# otherwise there will be problems when compiling magic file!
@@ -237,6 +250,15 @@ cd python
237
250
%endif
238
251
239
252
%changelog
253
+ * Mon Jun 27 2016 Kamil Dudka <kdudka@redhat.com> 5.11-33
254
+ - fix #1246385 - 'file --version' now exits successfully
255
+
256
+ * Wed Mar 09 2016 Jan Kaluza <jkaluza@redhat.com> 5.11-32
257
+ - fix #1278737 - add support for Java 1.7 and 1.8
258
+ - fix #1281723 - show full executable name for core
259
+ - fix #1271636 - add support for detection of Python 2.7 byte-compiled files
260
+ - fix #1278768 - comment out too-sensitive Pascal magic
261
+
240
262
* Mon Sep 07 2015 Jan Kaluza <jkaluza@redhat.com> - 5.11-31
241
263
- fix #1255396 - Make the build ID output consistent with other tools
242
264