Browse code

openssl : Upgrade to 1.0.2p

Change-Id: I2e9b6705491fc8c5e0b11a471df26327e2b9556c
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/5518
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Anish Swaminathan <anishs@vmware.com>

Him Kalyan Bordoloi authored on 2018/08/21 22:22:22
Showing 6 changed files
1 1
deleted file mode 100644
... ...
@@ -1,42 +0,0 @@
1
-From 91f7361f47b082ae61ffe1a7b17bb2adf213c7fe Mon Sep 17 00:00:00 2001
2
-From: Guido Vranken <guidovranken@gmail.com>
3
-Date: Mon, 11 Jun 2018 19:38:54 +0200
4
-Subject: [PATCH] Reject excessively large primes in DH key generation.
5
-
6
-CVE-2018-0732
7
-
8
-Signed-off-by: Guido Vranken <guidovranken@gmail.com>
9
-
10
-Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
11
-Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
12
-Reviewed-by: Rich Salz <rsalz@openssl.org>
13
-Reviewed-by: Matt Caswell <matt@openssl.org>
14
-(Merged from https://github.com/openssl/openssl/pull/6457)
15
- crypto/dh/dh_key.c | 7 ++++++-
16
- 1 file changed, 6 insertions(+), 1 deletion(-)
17
-
18
-diff --git a/crypto/dh/dh_key.c b/crypto/dh/dh_key.c
19
-index 6901548..752542b 100644
20
-+++ b/crypto/dh/dh_key.c
21
-@@ -78,10 +78,15 @@ static int generate_key(DH *dh)
22
-     int ok = 0;
23
-     int generate_new_key = 0;
24
-     unsigned l;
25
--    BN_CTX *ctx;
26
-+    BN_CTX *ctx = NULL;
27
-     BN_MONT_CTX *mont = NULL;
28
-     BIGNUM *pub_key = NULL, *priv_key = NULL;
29
- 
30
-+    if (BN_num_bits(dh->p) > OPENSSL_DH_MAX_MODULUS_BITS) {
31
-+        DHerr(DH_F_GENERATE_KEY, DH_R_MODULUS_TOO_LARGE);
32
-+        return 0;
33
-+    }
34
-+
35
-     ctx = BN_CTX_new();
36
-     if (ctx == NULL)
37
-         goto err;
38
-2.7.4
39
-
40 1
deleted file mode 100644
... ...
@@ -1,27 +0,0 @@
1
-From: Billy Brumley <bbrumley@gmail.com>
2
-Date: Wed, 11 Apr 2018 07:10:58 +0000 (+0300)
3
-Subject: RSA key generation: ensure BN_mod_inverse and BN_mod_exp_mont both get called with... 
4
-X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff_plain;h=349a41da1ad88ad87825414752a8ff5fdd6a6c3f
5
-
6
-RSA key generation: ensure BN_mod_inverse and BN_mod_exp_mont both get called with BN_FLG_CONSTTIME flag set.
7
-
8
-CVE-2018-0737
9
-
10
-Reviewed-by: Rich Salz <rsalz@openssl.org>
11
-Reviewed-by: Matt Caswell <matt@openssl.org>
12
-(cherry picked from commit 6939eab03a6e23d2bd2c3f5e34fe1d48e542e787)
13
-
14
-diff --git a/crypto/rsa/rsa_gen.c b/crypto/rsa/rsa_gen.c
15
-index 9ca5dfe..42b89a8 100644
16
-+++ b/crypto/rsa/rsa_gen.c
17
-@@ -156,6 +156,8 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value,
18
-     if (BN_copy(rsa->e, e_value) == NULL)
19
-         goto err;
20
- 
21
-+    BN_set_flags(rsa->p, BN_FLG_CONSTTIME);
22
-+    BN_set_flags(rsa->q, BN_FLG_CONSTTIME);
23
-     BN_set_flags(r2, BN_FLG_CONSTTIME);
24
-     /* generate p and q */
25
-     for (;;) {
26 1
deleted file mode 100644
... ...
@@ -1,528 +0,0 @@
1
-diff -rup openssl-1.0.2o/apps/s_apps.h openssl-1.0.2o-new/apps/s_apps.h
2
-+++ openssl-1.0.2o-new/apps/s_apps.h	2018-04-03 14:04:09.704887325 -0700
3
-@@ -151,7 +151,7 @@ typedef fd_mask fd_set;
4
- #define PORT_STR        "4433"
5
- #define PROTOCOL        "tcp"
6
- 
7
--int do_server(int port, int type, int *ret,
8
-+int do_server(char *port, int type, int *ret,
9
-               int (*cb) (char *hostname, int s, int stype,
10
-                          unsigned char *context), unsigned char *context,
11
-               int naccept);
12
-@@ -167,11 +167,10 @@ int ssl_print_point_formats(BIO *out, SS
13
- int ssl_print_curves(BIO *out, SSL *s, int noshared);
14
- #endif
15
- int ssl_print_tmp_key(BIO *out, SSL *s);
16
--int init_client(int *sock, char *server, int port, int type);
17
-+int init_client(int *sock, char *server, char *port, int type);
18
- int should_retry(int i);
19
- int extract_port(char *str, short *port_ptr);
20
--int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
21
--                      short *p);
22
-+int extract_host_port(char *str, char **host_ptr, char **port_ptr);
23
- 
24
- long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
25
-                                    int argi, long argl, long ret);
26
-diff -rup openssl-1.0.2o/apps/s_client.c openssl-1.0.2o-new/apps/s_client.c
27
-+++ openssl-1.0.2o-new/apps/s_client.c	2018-04-03 14:04:09.704887325 -0700
28
-@@ -668,7 +668,7 @@ int MAIN(int argc, char **argv)
29
-     int cbuf_len, cbuf_off;
30
-     int sbuf_len, sbuf_off;
31
-     fd_set readfds, writefds;
32
--    short port = PORT;
33
-+    char *port_str = PORT_STR;
34
-     int full_log = 1;
35
-     char *host = SSL_HOST_NAME;
36
-     char *cert_file = NULL, *key_file = NULL, *chain_file = NULL;
37
-@@ -792,13 +792,11 @@ int MAIN(int argc, char **argv)
38
-         } else if (strcmp(*argv, "-port") == 0) {
39
-             if (--argc < 1)
40
-                 goto bad;
41
--            port = atoi(*(++argv));
42
--            if (port == 0)
43
--                goto bad;
44
-+            port_str = *(++argv);
45
-         } else if (strcmp(*argv, "-connect") == 0) {
46
-             if (--argc < 1)
47
-                 goto bad;
48
--            if (!extract_host_port(*(++argv), &host, NULL, &port))
49
-+            if (!extract_host_port(*(++argv), &host, &port_str))
50
-                 goto bad;
51
-         } else if (strcmp(*argv, "-verify") == 0) {
52
-             verify = SSL_VERIFY_PEER;
53
-@@ -1449,7 +1447,7 @@ int MAIN(int argc, char **argv)
54
- 
55
-  re_start:
56
- 
57
--    if (init_client(&s, host, port, socket_type) == 0) {
58
-+    if (init_client(&s, host, port_str, socket_type) == 0) {
59
-         BIO_printf(bio_err, "connect:errno=%d\n", get_last_socket_error());
60
-         SHUTDOWN(s);
61
-         goto end;
62
-Only in openssl-1.0.2o-new/apps: s_client.c.orig
63
-diff -rup openssl-1.0.2o/apps/s_server.c openssl-1.0.2o-new/apps/s_server.c
64
-+++ openssl-1.0.2o-new/apps/s_server.c	2018-04-03 14:04:09.704887325 -0700
65
-@@ -1082,7 +1082,7 @@ int MAIN(int argc, char *argv[])
66
- {
67
-     X509_VERIFY_PARAM *vpm = NULL;
68
-     int badarg = 0;
69
--    short port = PORT;
70
-+    char *port_str = PORT_STR;
71
-     char *CApath = NULL, *CAfile = NULL;
72
-     char *chCApath = NULL, *chCAfile = NULL;
73
-     char *vfyCApath = NULL, *vfyCAfile = NULL;
74
-@@ -1170,7 +1170,8 @@ int MAIN(int argc, char *argv[])
75
-         if ((strcmp(*argv, "-port") == 0) || (strcmp(*argv, "-accept") == 0)) {
76
-             if (--argc < 1)
77
-                 goto bad;
78
--            if (!extract_port(*(++argv), &port))
79
-+            port_str = *(++argv);
80
-+            if (port_str == NULL || *port_str == '\0')
81
-                 goto bad;
82
-         } else if (strcmp(*argv, "-naccept") == 0) {
83
-             if (--argc < 1)
84
-@@ -2058,13 +2059,13 @@ int MAIN(int argc, char *argv[])
85
-     BIO_printf(bio_s_out, "ACCEPT\n");
86
-     (void)BIO_flush(bio_s_out);
87
-     if (rev)
88
--        do_server(port, socket_type, &accept_socket, rev_body, context,
89
-+        do_server(port_str, socket_type, &accept_socket, rev_body, context,
90
-                   naccept);
91
-     else if (www)
92
--        do_server(port, socket_type, &accept_socket, www_body, context,
93
-+        do_server(port_str, socket_type, &accept_socket, www_body, context,
94
-                   naccept);
95
-     else
96
--        do_server(port, socket_type, &accept_socket, sv_body, context,
97
-+        do_server(port_str, socket_type, &accept_socket, sv_body, context,
98
-                   naccept);
99
-     print_stats(bio_s_out, ctx);
100
-     ret = 0;
101
-Only in openssl-1.0.2o-new/apps: s_server.c.orig
102
-diff -rup openssl-1.0.2o/apps/s_socket.c openssl-1.0.2o-new/apps/s_socket.c
103
-+++ openssl-1.0.2o-new/apps/s_socket.c	2018-04-03 14:31:17.626470644 -0700
104
-@@ -106,9 +106,7 @@ static struct hostent *GetHostByName(cha
105
- static void ssl_sock_cleanup(void);
106
- # endif
107
- static int ssl_sock_init(void);
108
--static int init_client_ip(int *sock, unsigned char ip[4], int port, int type);
109
--static int init_server(int *sock, int port, int type);
110
--static int init_server_long(int *sock, int port, char *ip, int type);
111
-+static int init_server(int *sock, char *port, int type);
112
- static int do_accept(int acc_sock, int *sock, char **host);
113
- static int host_ip(char *str, unsigned char ip[4]);
114
- 
115
-@@ -231,65 +229,67 @@ static int ssl_sock_init(void)
116
-     return (1);
117
- }
118
- 
119
--int init_client(int *sock, char *host, int port, int type)
120
-+int init_client(int *sock, char *host, char *port, int type)
121
- {
122
--    unsigned char ip[4];
123
--
124
--    memset(ip, '\0', sizeof(ip));
125
--    if (!host_ip(host, &(ip[0])))
126
--        return 0;
127
--    return init_client_ip(sock, ip, port, type);
128
--}
129
--
130
--static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
131
--{
132
--    unsigned long addr;
133
--    struct sockaddr_in them;
134
--    int s, i;
135
-+    struct addrinfo *res, *res0, hints;
136
-+    char *failed_call = NULL;
137
-+    int s;
138
-+    int e;
139
- 
140
-     if (!ssl_sock_init())
141
-         return (0);
142
- 
143
--    memset((char *)&them, 0, sizeof(them));
144
--    them.sin_family = AF_INET;
145
--    them.sin_port = htons((unsigned short)port);
146
--    addr = (unsigned long)
147
--        ((unsigned long)ip[0] << 24L) |
148
--        ((unsigned long)ip[1] << 16L) |
149
--        ((unsigned long)ip[2] << 8L) | ((unsigned long)ip[3]);
150
--    them.sin_addr.s_addr = htonl(addr);
151
--
152
--    if (type == SOCK_STREAM)
153
--        s = socket(AF_INET, SOCK_STREAM, SOCKET_PROTOCOL);
154
--    else                        /* ( type == SOCK_DGRAM) */
155
--        s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
156
--
157
--    if (s == INVALID_SOCKET) {
158
--        perror("socket");
159
-+    memset(&hints, '\0', sizeof(hints));
160
-+    hints.ai_socktype = type;
161
-+    hints.ai_flags = AI_ADDRCONFIG;
162
-+
163
-+    e = getaddrinfo(host, port, &hints, &res);
164
-+    if (e) {
165
-+        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(e));
166
-+        if (e == EAI_SYSTEM)
167
-+            perror("getaddrinfo");
168
-         return (0);
169
-     }
170
-+
171
-+    res0 = res;
172
-+    while (res) {
173
-+        s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
174
-+        if (s == INVALID_SOCKET) {
175
-+            failed_call = "socket";
176
-+            goto nextres;
177
-+        }
178
-+
179
- # if defined(SO_KEEPALIVE) && !defined(OPENSSL_SYS_MPE)
180
--    if (type == SOCK_STREAM) {
181
--        i = 0;
182
--        i = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char *)&i, sizeof(i));
183
--        if (i < 0) {
184
--            closesocket(s);
185
--            perror("keepalive");
186
--            return (0);
187
-+        if (type == SOCK_STREAM) {
188
-+            int i = 0;
189
-+            i = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE,
190
-+                           (char *)&i, sizeof(i));
191
-+            if (i < 0) {
192
-+                failed_call = "keepalive";
193
-+                goto nextres;
194
-+            }
195
-         }
196
--    }
197
- # endif
198
--
199
--    if (connect(s, (struct sockaddr *)&them, sizeof(them)) == -1) {
200
--        closesocket(s);
201
--        perror("connect");
202
--        return (0);
203
-+        if (connect(s, (struct sockaddr *)res->ai_addr, res->ai_addrlen) == 0) {
204
-+            freeaddrinfo(res0);
205
-+            *sock = s;
206
-+            return (1);
207
-+        }
208
-+
209
-+        failed_call = "socket";
210
-+ nextres:
211
-+        if (s != INVALID_SOCKET)
212
-+            close(s);
213
-+        res = res->ai_next;
214
-     }
215
--    *sock = s;
216
--    return (1);
217
-+    freeaddrinfo(res0);
218
-+    closesocket(s);
219
-+
220
-+    perror(failed_call);
221
-+    return (0);
222
- }
223
- 
224
--int do_server(int port, int type, int *ret,
225
-+int do_server(char *port, int type, int *ret,
226
-               int (*cb) (char *hostname, int s, int stype,
227
-                          unsigned char *context), unsigned char *context,
228
-               int naccept)
229
-@@ -328,69 +328,88 @@ int do_server(int port, int type, int *r
230
-     }
231
- }
232
- 
233
--static int init_server_long(int *sock, int port, char *ip, int type)
234
-+static int init_server(int *sock, char *port, int type)
235
- {
236
--    int ret = 0;
237
--    struct sockaddr_in server;
238
--    int s = -1;
239
-+    struct addrinfo *res, *res0 = NULL, hints;
240
-+    char *failed_call = NULL;
241
-+    int s = INVALID_SOCKET;
242
-+    int e;
243
- 
244
-     if (!ssl_sock_init())
245
-         return (0);
246
- 
247
--    memset((char *)&server, 0, sizeof(server));
248
--    server.sin_family = AF_INET;
249
--    server.sin_port = htons((unsigned short)port);
250
--    if (ip == NULL)
251
--        server.sin_addr.s_addr = INADDR_ANY;
252
--    else
253
--/* Added for T3E, address-of fails on bit field (beckman@acl.lanl.gov) */
254
--# ifndef BIT_FIELD_LIMITS
255
--        memcpy(&server.sin_addr.s_addr, ip, 4);
256
--# else
257
--        memcpy(&server.sin_addr, ip, 4);
258
--# endif
259
--
260
--    if (type == SOCK_STREAM)
261
--        s = socket(AF_INET, SOCK_STREAM, SOCKET_PROTOCOL);
262
--    else                        /* type == SOCK_DGRAM */
263
--        s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
264
-+    memset(&hints, '\0', sizeof(hints));
265
-+    hints.ai_family = AF_INET6;
266
-+ tryipv4:
267
-+    hints.ai_socktype = type;
268
-+    hints.ai_flags = AI_PASSIVE;
269
-+
270
-+    e = getaddrinfo(NULL, port, &hints, &res);
271
-+    if (e) {
272
-+        if (hints.ai_family == AF_INET) {
273
-+            fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(e));
274
-+            if (e == EAI_SYSTEM)
275
-+                perror("getaddrinfo");
276
-+            return (0);
277
-+        } else
278
-+            res = NULL;
279
-+    }
280
- 
281
--    if (s == INVALID_SOCKET)
282
--        goto err;
283
-+    res0 = res;
284
-+    while (res) {
285
-+        s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
286
-+        if (s == INVALID_SOCKET) {
287
-+            failed_call = "socket";
288
-+            goto nextres;
289
-+        }
290
-+        if (hints.ai_family == AF_INET6) {
291
-+            int j = 0;
292
-+            setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&j, sizeof j);
293
-+        }
294
- # if defined SOL_SOCKET && defined SO_REUSEADDR
295
--    {
296
--        int j = 1;
297
--        setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&j, sizeof(j));
298
--    }
299
--# endif
300
--    if (bind(s, (struct sockaddr *)&server, sizeof(server)) == -1) {
301
--# ifndef OPENSSL_SYS_WINDOWS
302
--        perror("bind");
303
-+        {
304
-+            int j = 1;
305
-+            setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&j, sizeof j);
306
-+        }
307
- # endif
308
--        goto err;
309
--    }
310
--    /* Make it 128 for linux */
311
--    if (type == SOCK_STREAM && listen(s, 128) == -1)
312
--        goto err;
313
--    *sock = s;
314
--    ret = 1;
315
-- err:
316
--    if ((ret == 0) && (s != -1)) {
317
--        SHUTDOWN(s);
318
-+
319
-+        if (bind(s, (struct sockaddr *)res->ai_addr, res->ai_addrlen) == -1) {
320
-+            failed_call = "bind";
321
-+            goto nextres;
322
-+        }
323
-+        if (type == SOCK_STREAM && listen(s, 128) == -1) {
324
-+            failed_call = "listen";
325
-+            goto nextres;
326
-+        }
327
-+
328
-+        *sock = s;
329
-+        return (1);
330
-+
331
-+ nextres:
332
-+        if (s != INVALID_SOCKET)
333
-+            close(s);
334
-+        res = res->ai_next;
335
-     }
336
--    return (ret);
337
--}
338
-+    if (res0)
339
-+        freeaddrinfo(res0);
340
- 
341
--static int init_server(int *sock, int port, int type)
342
--{
343
--    return (init_server_long(sock, port, NULL, type));
344
-+    if (s == INVALID_SOCKET) {
345
-+        if (hints.ai_family == AF_INET6) {
346
-+            hints.ai_family = AF_INET;
347
-+            goto tryipv4;
348
-+        }
349
-+        perror("socket");
350
-+        return (0);
351
-+    }
352
-+    perror(failed_call);
353
-+    return (0);
354
- }
355
- 
356
- static int do_accept(int acc_sock, int *sock, char **host)
357
- {
358
-+    static struct sockaddr_storage from;
359
-+    char buffer[NI_MAXHOST];
360
-     int ret;
361
--    struct hostent *h1, *h2;
362
--    static struct sockaddr_in from;
363
-     int len;
364
- /*      struct linger ling; */
365
- 
366
-@@ -432,134 +451,60 @@ static int do_accept(int acc_sock, int *
367
-     ling.l_onoff=1;
368
-     ling.l_linger=0;
369
-     i=setsockopt(ret,SOL_SOCKET,SO_LINGER,(char *)&ling,sizeof(ling));
370
--    if (i < 0) { perror("linger"); return(0); }
371
-+    if (i < 0) { closesocket(ret); perror("linger"); return(0); }
372
-     i=0;
373
-     i=setsockopt(ret,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
374
--    if (i < 0) { perror("keepalive"); return(0); }
375
-+    if (i < 0) { closesocket(ret); perror("keepalive"); return(0); }
376
- */
377
- 
378
-     if (host == NULL)
379
-         goto end;
380
--# ifndef BIT_FIELD_LIMITS
381
--    /* I should use WSAAsyncGetHostByName() under windows */
382
--    h1 = gethostbyaddr((char *)&from.sin_addr.s_addr,
383
--                       sizeof(from.sin_addr.s_addr), AF_INET);
384
--# else
385
--    h1 = gethostbyaddr((char *)&from.sin_addr,
386
--                       sizeof(struct in_addr), AF_INET);
387
--# endif
388
--    if (h1 == NULL) {
389
--        BIO_printf(bio_err, "bad gethostbyaddr\n");
390
-+
391
-+    if (getnameinfo((struct sockaddr *)&from, sizeof(from),
392
-+                    buffer, sizeof(buffer), NULL, 0, 0)) {
393
-+        BIO_printf(bio_err, "getnameinfo failed\n");
394
-         *host = NULL;
395
-         /* return(0); */
396
-     } else {
397
--        if ((*host = (char *)OPENSSL_malloc(strlen(h1->h_name) + 1)) == NULL) {
398
-+        if ((*host = (char *)OPENSSL_malloc(strlen(buffer) + 1)) == NULL) {
399
-             perror("OPENSSL_malloc");
400
-             closesocket(ret);
401
-             return (0);
402
-         }
403
--        BUF_strlcpy(*host, h1->h_name, strlen(h1->h_name) + 1);
404
--
405
--        h2 = GetHostByName(*host);
406
--        if (h2 == NULL) {
407
--            BIO_printf(bio_err, "gethostbyname failure\n");
408
--            closesocket(ret);
409
--            return (0);
410
--        }
411
--        if (h2->h_addrtype != AF_INET) {
412
--            BIO_printf(bio_err, "gethostbyname addr is not AF_INET\n");
413
--            closesocket(ret);
414
--            return (0);
415
--        }
416
-+        strcpy(*host, buffer);
417
-     }
418
-  end:
419
-     *sock = ret;
420
-     return (1);
421
- }
422
- 
423
--int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
424
--                      short *port_ptr)
425
-+int extract_host_port(char *str, char **host_ptr, char **port_ptr)
426
- {
427
--    char *h, *p;
428
-+    char *h, *p, *x;
429
- 
430
--    h = str;
431
--    p = strchr(str, ':');
432
-+    x = h = str;
433
-+    if (*h == '[') {
434
-+        h++;
435
-+        p = strchr(h, ']');
436
-+        if (p == NULL) {
437
-+            BIO_printf(bio_err, "no ending bracket for IPv6 address\n");
438
-+            return (0);
439
-+        }
440
-+        *(p++) = '\0';
441
-+        x = p;
442
-+    }
443
-+    p = strchr(x, ':');
444
-     if (p == NULL) {
445
-         BIO_printf(bio_err, "no port defined\n");
446
-         return (0);
447
-     }
448
-     *(p++) = '\0';
449
- 
450
--    if ((ip != NULL) && !host_ip(str, ip))
451
--        goto err;
452
-     if (host_ptr != NULL)
453
-         *host_ptr = h;
454
-+    if (port_ptr != NULL)
455
-+        *port_ptr = p;
456
- 
457
--    if (!extract_port(p, port_ptr))
458
--        goto err;
459
--    return (1);
460
-- err:
461
--    return (0);
462
--}
463
--
464
--static int host_ip(char *str, unsigned char ip[4])
465
--{
466
--    unsigned int in[4];
467
--    int i;
468
--
469
--    if (sscanf(str, "%u.%u.%u.%u", &(in[0]), &(in[1]), &(in[2]), &(in[3])) ==
470
--        4) {
471
--        for (i = 0; i < 4; i++)
472
--            if (in[i] > 255) {
473
--                BIO_printf(bio_err, "invalid IP address\n");
474
--                goto err;
475
--            }
476
--        ip[0] = in[0];
477
--        ip[1] = in[1];
478
--        ip[2] = in[2];
479
--        ip[3] = in[3];
480
--    } else {                    /* do a gethostbyname */
481
--        struct hostent *he;
482
--
483
--        if (!ssl_sock_init())
484
--            return (0);
485
--
486
--        he = GetHostByName(str);
487
--        if (he == NULL) {
488
--            BIO_printf(bio_err, "gethostbyname failure\n");
489
--            goto err;
490
--        }
491
--        /* cast to short because of win16 winsock definition */
492
--        if ((short)he->h_addrtype != AF_INET) {
493
--            BIO_printf(bio_err, "gethostbyname addr is not AF_INET\n");
494
--            return (0);
495
--        }
496
--        ip[0] = he->h_addr_list[0][0];
497
--        ip[1] = he->h_addr_list[0][1];
498
--        ip[2] = he->h_addr_list[0][2];
499
--        ip[3] = he->h_addr_list[0][3];
500
--    }
501
--    return (1);
502
-- err:
503
--    return (0);
504
--}
505
--
506
--int extract_port(char *str, short *port_ptr)
507
--{
508
--    int i;
509
--    struct servent *s;
510
--
511
--    i = atoi(str);
512
--    if (i != 0)
513
--        *port_ptr = (unsigned short)i;
514
--    else {
515
--        s = getservbyname(str, "tcp");
516
--        if (s == NULL) {
517
--            BIO_printf(bio_err, "getservbyname failure for %s\n", str);
518
--            return (0);
519
--        }
520
--        *port_ptr = ntohs((unsigned short)s->s_port);
521
--    }
522
-     return (1);
523
- }
524
- 
... ...
@@ -1,6 +1,6 @@
1
-diff -rup openssl-1.0.2o/crypto/o_init.c openssl-1.0.2o-new/crypto/o_init.c
2
-+++ openssl-1.0.2o-new/crypto/o_init.c	2018-04-03 13:58:19.869682415 -0700
1
+diff -ur openssl-1.0.2p/crypto/o_init.c openssl-1.0.2p-new/crypto/o_init.c
2
+--- openssl-1.0.2p/crypto/o_init.c	2018-08-14 05:48:58.000000000 -0700
3 3
 @@ -57,6 +57,7 @@
4 4
  #include <openssl/err.h>
5 5
  #ifdef OPENSSL_FIPS
... ...
@@ -9,7 +9,7 @@ diff -rup openssl-1.0.2o/crypto/o_init.c openssl-1.0.2o-new/crypto/o_init.c
9 9
  # include <openssl/rand.h>
10 10
  
11 11
  # ifndef OPENSSL_NO_DEPRECATED
12
-@@ -66,6 +67,52 @@ void FIPS_crypto_set_id_callback(unsigne
12
+@@ -66,6 +67,51 @@
13 13
  #endif
14 14
  
15 15
  /*
... ...
@@ -57,12 +57,11 @@ diff -rup openssl-1.0.2o/crypto/o_init.c openssl-1.0.2o-new/crypto/o_init.c
57 57
 +}
58 58
 +#endif
59 59
 +
60
-+
61 60
 +/*
62 61
   * Perform any essential OpenSSL initialization operations. Currently only
63 62
   * sets FIPS callbacks
64 63
   */
65
-@@ -84,6 +131,17 @@ void OPENSSL_init(void)
64
+@@ -84,6 +130,17 @@
66 65
      FIPS_set_error_callbacks(ERR_put_error, ERR_add_error_vdata);
67 66
      FIPS_set_malloc_callbacks(CRYPTO_malloc, CRYPTO_free);
68 67
      RAND_init_fips();
69 68
new file mode 100644
... ...
@@ -0,0 +1,468 @@
0
+diff -ur openssl-1.0.2p/apps/s_apps.h openssl-1.0.2p-new/apps/s_apps.h
1
+--- openssl-1.0.2p/apps/s_apps.h	2018-08-14 05:49:04.000000000 -0700
2
+@@ -151,7 +151,7 @@
3
+ #define PORT_STR        "4433"
4
+ #define PROTOCOL        "tcp"
5
+ 
6
+-int do_server(int port, int type, int *ret,
7
++int do_server(char *port, int type, int *ret,
8
+               int (*cb) (int s, int stype, unsigned char *context),
9
+               unsigned char *context, int naccept);
10
+ #ifdef HEADER_X509_H
11
+@@ -166,11 +166,10 @@
12
+ int ssl_print_curves(BIO *out, SSL *s, int noshared);
13
+ #endif
14
+ int ssl_print_tmp_key(BIO *out, SSL *s);
15
+-int init_client(int *sock, char *server, int port, int type);
16
++int init_client(int *sock, char *server, char *port, int type);
17
+ int should_retry(int i);
18
+ int extract_port(char *str, short *port_ptr);
19
+-int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
20
+-                      short *p);
21
++int extract_host_port(char *str, char **host_ptr, char **port_ptr);
22
+ 
23
+ long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
24
+                                    int argi, long argl, long ret);
25
+diff -ur openssl-1.0.2p/apps/s_client.c openssl-1.0.2p-new/apps/s_client.c
26
+--- openssl-1.0.2p/apps/s_client.c	2018-08-14 05:49:04.000000000 -0700
27
+@@ -668,7 +668,7 @@
28
+     int cbuf_len, cbuf_off;
29
+     int sbuf_len, sbuf_off;
30
+     fd_set readfds, writefds;
31
+-    short port = PORT;
32
++    char *port_str = PORT_STR;
33
+     int full_log = 1;
34
+     char *host = SSL_HOST_NAME;
35
+     char *cert_file = NULL, *key_file = NULL, *chain_file = NULL;
36
+@@ -792,13 +792,11 @@
37
+         } else if (strcmp(*argv, "-port") == 0) {
38
+             if (--argc < 1)
39
+                 goto bad;
40
+-            port = atoi(*(++argv));
41
+-            if (port == 0)
42
+-                goto bad;
43
++            port_str = *(++argv);
44
+         } else if (strcmp(*argv, "-connect") == 0) {
45
+             if (--argc < 1)
46
+                 goto bad;
47
+-            if (!extract_host_port(*(++argv), &host, NULL, &port))
48
++            if (!extract_host_port(*(++argv), &host, &port_str))
49
+                 goto bad;
50
+         } else if (strcmp(*argv, "-verify") == 0) {
51
+             verify = SSL_VERIFY_PEER;
52
+@@ -1449,7 +1447,7 @@
53
+ 
54
+  re_start:
55
+ 
56
+-    if (init_client(&s, host, port, socket_type) == 0) {
57
++    if (init_client(&s, host, port_str, socket_type) == 0) {
58
+         BIO_printf(bio_err, "connect:errno=%d\n", get_last_socket_error());
59
+         SHUTDOWN(s);
60
+         goto end;
61
+diff -ur openssl-1.0.2p/apps/s_server.c openssl-1.0.2p-new/apps/s_server.c
62
+--- openssl-1.0.2p/apps/s_server.c	2018-08-14 05:49:04.000000000 -0700
63
+@@ -1082,7 +1082,7 @@
64
+ {
65
+     X509_VERIFY_PARAM *vpm = NULL;
66
+     int badarg = 0;
67
+-    short port = PORT;
68
++    char *port_str = PORT_STR;
69
+     char *CApath = NULL, *CAfile = NULL;
70
+     char *chCApath = NULL, *chCAfile = NULL;
71
+     char *vfyCApath = NULL, *vfyCAfile = NULL;
72
+@@ -1173,7 +1173,8 @@
73
+         if ((strcmp(*argv, "-port") == 0) || (strcmp(*argv, "-accept") == 0)) {
74
+             if (--argc < 1)
75
+                 goto bad;
76
+-            if (!extract_port(*(++argv), &port))
77
++            port_str = *(++argv);
78
++            if (port_str == NULL || *port_str == '\0')
79
+                 goto bad;
80
+         } else if (strcmp(*argv, "-naccept") == 0) {
81
+             if (--argc < 1)
82
+@@ -2069,13 +2070,13 @@
83
+     BIO_printf(bio_s_out, "ACCEPT\n");
84
+     (void)BIO_flush(bio_s_out);
85
+     if (rev)
86
+-        do_server(port, socket_type, &accept_socket, rev_body, context,
87
++        do_server(port_str, socket_type, &accept_socket, rev_body, context,
88
+                   naccept);
89
+     else if (www)
90
+-        do_server(port, socket_type, &accept_socket, www_body, context,
91
++        do_server(port_str, socket_type, &accept_socket, www_body, context,
92
+                   naccept);
93
+     else
94
+-        do_server(port, socket_type, &accept_socket, sv_body, context,
95
++        do_server(port_str, socket_type, &accept_socket, sv_body, context,
96
+                   naccept);
97
+     print_stats(bio_s_out, ctx);
98
+     ret = 0;
99
+diff -ur openssl-1.0.2p/apps/s_socket.c openssl-1.0.2p-new/apps/s_socket.c
100
+--- openssl-1.0.2p/apps/s_socket.c	2018-08-14 05:49:04.000000000 -0700
101
+@@ -106,9 +106,7 @@
102
+ static void ssl_sock_cleanup(void);
103
+ # endif
104
+ static int ssl_sock_init(void);
105
+-static int init_client_ip(int *sock, unsigned char ip[4], int port, int type);
106
+-static int init_server(int *sock, int port, int type);
107
+-static int init_server_long(int *sock, int port, char *ip, int type);
108
++static int init_server(int *sock, char *port, int type);
109
+ static int do_accept(int acc_sock, int *sock);
110
+ static int host_ip(char *str, unsigned char ip[4]);
111
+ 
112
+@@ -231,65 +229,66 @@
113
+     return (1);
114
+ }
115
+ 
116
+-int init_client(int *sock, char *host, int port, int type)
117
++int init_client(int *sock, char *host, char *port, int type)
118
+ {
119
+-    unsigned char ip[4];
120
+-
121
+-    memset(ip, '\0', sizeof(ip));
122
+-    if (!host_ip(host, &(ip[0])))
123
+-        return 0;
124
+-    return init_client_ip(sock, ip, port, type);
125
+-}
126
+-
127
+-static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
128
+-{
129
+-    unsigned long addr;
130
+-    struct sockaddr_in them;
131
+-    int s, i;
132
++    struct addrinfo *res, *res0, hints;
133
++    char *failed_call = NULL;
134
++    int s;
135
++    int e;
136
+ 
137
+     if (!ssl_sock_init())
138
+         return (0);
139
+ 
140
+-    memset((char *)&them, 0, sizeof(them));
141
+-    them.sin_family = AF_INET;
142
+-    them.sin_port = htons((unsigned short)port);
143
+-    addr = (unsigned long)
144
+-        ((unsigned long)ip[0] << 24L) |
145
+-        ((unsigned long)ip[1] << 16L) |
146
+-        ((unsigned long)ip[2] << 8L) | ((unsigned long)ip[3]);
147
+-    them.sin_addr.s_addr = htonl(addr);
148
+-
149
+-    if (type == SOCK_STREAM)
150
+-        s = socket(AF_INET, SOCK_STREAM, SOCKET_PROTOCOL);
151
+-    else                        /* ( type == SOCK_DGRAM) */
152
+-        s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
153
+-
154
+-    if (s == INVALID_SOCKET) {
155
+-        perror("socket");
156
++    memset(&hints, '\0', sizeof(hints));
157
++    hints.ai_socktype = type;
158
++    hints.ai_flags = AI_ADDRCONFIG;
159
++
160
++    e = getaddrinfo(host, port, &hints, &res);
161
++    if (e) {
162
++        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(e));
163
++        if (e == EAI_SYSTEM)
164
++            perror("getaddrinfo");
165
+         return (0);
166
+     }
167
++
168
++    res0 = res;
169
++    while (res) {
170
++        s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
171
++        if (s == INVALID_SOCKET) {
172
++            failed_call = "socket";
173
++            goto nextres;
174
++        }
175
+ # if defined(SO_KEEPALIVE) && !defined(OPENSSL_SYS_MPE)
176
+-    if (type == SOCK_STREAM) {
177
+-        i = 0;
178
+-        i = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char *)&i, sizeof(i));
179
+-        if (i < 0) {
180
+-            closesocket(s);
181
+-            perror("keepalive");
182
+-            return (0);
183
++        if (type == SOCK_STREAM) {
184
++            int i = 0;
185
++            i = setsockopt(s, SOL_SOCKET, SO_KEEPALIVE,
186
++                           (char *)&i, sizeof(i));
187
++            if (i < 0) {
188
++                failed_call = "keepalive";
189
++                goto nextres;
190
++            }
191
+         }
192
+-    }
193
+ # endif
194
++        if (connect(s, (struct sockaddr *)res->ai_addr, res->ai_addrlen) == 0) {
195
++            freeaddrinfo(res0);
196
++            *sock = s;
197
++            return (1);
198
++        }
199
+ 
200
+-    if (connect(s, (struct sockaddr *)&them, sizeof(them)) == -1) {
201
+-        closesocket(s);
202
+-        perror("connect");
203
+-        return (0);
204
++        failed_call = "socket";
205
++ nextres:
206
++        if (s != INVALID_SOCKET)
207
++            close(s);
208
++        res = res->ai_next;
209
+     }
210
+-    *sock = s;
211
+-    return (1);
212
++    freeaddrinfo(res0);
213
++    closesocket(s);
214
++
215
++    perror(failed_call);
216
++    return (0);
217
+ }
218
+ 
219
+-int do_server(int port, int type, int *ret,
220
++int do_server(char *port, int type, int *ret,
221
+               int (*cb) (int s, int stype, unsigned char *context),
222
+               unsigned char *context, int naccept)
223
+ {
224
+@@ -324,66 +323,88 @@
225
+     }
226
+ }
227
+ 
228
+-static int init_server_long(int *sock, int port, char *ip, int type)
229
++static int init_server(int *sock, char *port, int type)
230
+ {
231
+-    int ret = 0;
232
+-    struct sockaddr_in server;
233
+-    int s = -1;
234
++    struct addrinfo *res, *res0 = NULL, hints;
235
++    char *failed_call = NULL;
236
++    int s = INVALID_SOCKET;
237
++    int e;
238
+ 
239
+     if (!ssl_sock_init())
240
+         return (0);
241
+ 
242
+-    memset((char *)&server, 0, sizeof(server));
243
+-    server.sin_family = AF_INET;
244
+-    server.sin_port = htons((unsigned short)port);
245
+-    if (ip == NULL)
246
+-        server.sin_addr.s_addr = INADDR_ANY;
247
+-    else
248
+-/* Added for T3E, address-of fails on bit field (beckman@acl.lanl.gov) */
249
+-# ifndef BIT_FIELD_LIMITS
250
+-        memcpy(&server.sin_addr.s_addr, ip, 4);
251
+-# else
252
+-        memcpy(&server.sin_addr, ip, 4);
253
+-# endif
254
+-
255
+-    if (type == SOCK_STREAM)
256
+-        s = socket(AF_INET, SOCK_STREAM, SOCKET_PROTOCOL);
257
+-    else                        /* type == SOCK_DGRAM */
258
+-        s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
259
++    memset(&hints, '\0', sizeof(hints));
260
++    hints.ai_family = AF_INET6;
261
++ tryipv4:
262
++    hints.ai_socktype = type;
263
++    hints.ai_flags = AI_PASSIVE;
264
++
265
++    e = getaddrinfo(NULL, port, &hints, &res);
266
++    if (e) {
267
++        if (hints.ai_family == AF_INET) {
268
++            fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(e));
269
++            if (e == EAI_SYSTEM)
270
++                perror("getaddrinfo");
271
++            return (0);
272
++        } else
273
++            res = NULL;
274
++    }
275
+ 
276
+-    if (s == INVALID_SOCKET)
277
+-        goto err;
278
++    res0 = res;
279
++    while (res) {
280
++        s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
281
++        if (s == INVALID_SOCKET) {
282
++            failed_call = "socket";
283
++            goto nextres;
284
++        }
285
++        if (hints.ai_family == AF_INET6) {
286
++            int j = 0;
287
++            setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&j, sizeof j);
288
++        }
289
+ # if defined SOL_SOCKET && defined SO_REUSEADDR
290
+-    {
291
+-        int j = 1;
292
+-        setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&j, sizeof(j));
293
+-    }
294
+-# endif
295
+-    if (bind(s, (struct sockaddr *)&server, sizeof(server)) == -1) {
296
+-# ifndef OPENSSL_SYS_WINDOWS
297
+-        perror("bind");
298
++        {
299
++            int j = 1;
300
++            setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&j, sizeof j);
301
++        }
302
+ # endif
303
+-        goto err;
304
++
305
++        if (bind(s, (struct sockaddr *)res->ai_addr, res->ai_addrlen) == -1) {
306
++            failed_call = "bind";
307
++            goto nextres;
308
++        }
309
++        if (type == SOCK_STREAM && listen(s, 128) == -1) {
310
++            failed_call = "listen";
311
++            goto nextres;
312
++        }
313
++
314
++        *sock = s;
315
++        return (1);
316
++
317
++ nextres:
318
++        if (s != INVALID_SOCKET)
319
++            close(s);
320
++        res = res->ai_next;
321
+     }
322
+-    /* Make it 128 for linux */
323
+-    if (type == SOCK_STREAM && listen(s, 128) == -1)
324
+-        goto err;
325
+-    *sock = s;
326
+-    ret = 1;
327
+- err:
328
+-    if ((ret == 0) && (s != -1)) {
329
+-        SHUTDOWN(s);
330
++    if (res0)
331
++        freeaddrinfo(res0);
332
++
333
++    if (s == INVALID_SOCKET) {
334
++        if (hints.ai_family == AF_INET6) {
335
++            hints.ai_family = AF_INET;
336
++            goto tryipv4;
337
++        }
338
++        perror("socket");
339
++        return (0);
340
+     }
341
+-    return (ret);
342
+-}
343
+ 
344
+-static int init_server(int *sock, int port, int type)
345
+-{
346
+-    return (init_server_long(sock, port, NULL, type));
347
++    perror(failed_call);
348
++    return (0);
349
+ }
350
+ 
351
+ static int do_accept(int acc_sock, int *sock)
352
+ {
353
++    static struct sockaddr_storage from;
354
++    char buffer[NI_MAXHOST];
355
+     int ret;
356
+ 
357
+     if (!ssl_sock_init())
358
+@@ -422,89 +443,33 @@
359
+     return 1;
360
+ }
361
+ 
362
+-int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
363
+-                      short *port_ptr)
364
++int extract_host_port(char *str, char **host_ptr, char **port_ptr)
365
+ {
366
+-    char *h, *p;
367
++    char *h, *p, *x;
368
+ 
369
+-    h = str;
370
+-    p = strchr(str, ':');
371
++    x = h = str;
372
++    if (*h == '[') {
373
++        h++;
374
++        p = strchr(h, ']');
375
++        if (p == NULL) {
376
++            BIO_printf(bio_err, "no ending bracket for IPv6 address\n");
377
++            return (0);
378
++        }
379
++        *(p++) = '\0';
380
++        x = p;
381
++    }
382
++    p = strchr(x, ':');
383
+     if (p == NULL) {
384
+         BIO_printf(bio_err, "no port defined\n");
385
+         return (0);
386
+     }
387
+     *(p++) = '\0';
388
+ 
389
+-    if ((ip != NULL) && !host_ip(str, ip))
390
+-        goto err;
391
+     if (host_ptr != NULL)
392
+         *host_ptr = h;
393
++    if (port_ptr != NULL)
394
++        *port_ptr = p;
395
+ 
396
+-    if (!extract_port(p, port_ptr))
397
+-        goto err;
398
+-    return (1);
399
+- err:
400
+-    return (0);
401
+-}
402
+-
403
+-static int host_ip(char *str, unsigned char ip[4])
404
+-{
405
+-    unsigned int in[4];
406
+-    int i;
407
+-
408
+-    if (sscanf(str, "%u.%u.%u.%u", &(in[0]), &(in[1]), &(in[2]), &(in[3])) ==
409
+-        4) {
410
+-        for (i = 0; i < 4; i++)
411
+-            if (in[i] > 255) {
412
+-                BIO_printf(bio_err, "invalid IP address\n");
413
+-                goto err;
414
+-            }
415
+-        ip[0] = in[0];
416
+-        ip[1] = in[1];
417
+-        ip[2] = in[2];
418
+-        ip[3] = in[3];
419
+-    } else {                    /* do a gethostbyname */
420
+-        struct hostent *he;
421
+-
422
+-        if (!ssl_sock_init())
423
+-            return (0);
424
+-
425
+-        he = GetHostByName(str);
426
+-        if (he == NULL) {
427
+-            BIO_printf(bio_err, "gethostbyname failure\n");
428
+-            goto err;
429
+-        }
430
+-        /* cast to short because of win16 winsock definition */
431
+-        if ((short)he->h_addrtype != AF_INET) {
432
+-            BIO_printf(bio_err, "gethostbyname addr is not AF_INET\n");
433
+-            return (0);
434
+-        }
435
+-        ip[0] = he->h_addr_list[0][0];
436
+-        ip[1] = he->h_addr_list[0][1];
437
+-        ip[2] = he->h_addr_list[0][2];
438
+-        ip[3] = he->h_addr_list[0][3];
439
+-    }
440
+-    return (1);
441
+- err:
442
+-    return (0);
443
+-}
444
+-
445
+-int extract_port(char *str, short *port_ptr)
446
+-{
447
+-    int i;
448
+-    struct servent *s;
449
+-
450
+-    i = atoi(str);
451
+-    if (i != 0)
452
+-        *port_ptr = (unsigned short)i;
453
+-    else {
454
+-        s = getservbyname(str, "tcp");
455
+-        if (s == NULL) {
456
+-            BIO_printf(bio_err, "getservbyname failure for %s\n", str);
457
+-            return (0);
458
+-        }
459
+-        *port_ptr = ntohs((unsigned short)s->s_port);
460
+-    }
461
+     return (1);
462
+ }
463
+ 
... ...
@@ -1,20 +1,18 @@
1 1
 Summary:    Management tools and libraries relating to cryptography
2 2
 Name:       openssl
3
-Version:    1.0.2o
4
-Release:    3%{?dist}
3
+Version:    1.0.2p
4
+Release:    1%{?dist}
5 5
 License:    OpenSSL
6 6
 URL:        http://www.openssl.org
7 7
 Group:      System Environment/Security
8 8
 Vendor:     VMware, Inc.
9 9
 Distribution:   Photon
10 10
 Source0:    http://www.openssl.org/source/%{name}-%{version}.tar.gz
11
-%define sha1 openssl=a47faaca57b47a0d9d5fb085545857cc92062691
11
+%define sha1 openssl=f34b5322e92415755c7d58bf5d0d5cf37666382c
12 12
 Patch0:     c_rehash.patch
13
-Patch1:     openssl-1.0.2n-ipv6apps.patch
13
+Patch1:     openssl-ipv6apps.patch
14 14
 Patch2:     openssl-init-conslidate.patch
15 15
 Patch3:     openssl-drbg-default-read-system-fips.patch
16
-Patch4:     CVE-2018-0737.patch
17
-Patch5:     CVE-2018-0732.patch
18 16
 Requires:   bash glibc libgcc 
19 17
 
20 18
 %description
... ...
@@ -55,8 +53,6 @@ Perl scripts that convert certificates and keys to various formats.
55 55
 %patch1 -p1
56 56
 %patch2 -p1
57 57
 %patch3 -p1
58
-%patch4 -p1
59
-%patch5 -p1
60 58
 
61 59
 %build
62 60
 export CFLAGS="%{optflags}"
... ...
@@ -116,6 +112,8 @@ rm -rf %{buildroot}/*
116 116
 /%{_bindir}/c_rehash
117 117
 
118 118
 %changelog
119
+*   Fri Aug 17 2018 Him Kalyan Bordoloi <bordoloih@vmware.com> 1.0.2p-1
120
+-   Upgrade to 1.0.2p
119 121
 *   Mon Aug 13 2018 Ankit Jain <ankitja@vmware.com> 1.0.2o-3
120 122
 -   Fix of CVE-2018-0732
121 123
 *   Wed Jun 13 2018 Dweep Advani <dadvani@vmware.com> 1.0.2o-2