Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: patches/small_records.patch

Issue 9254031: Upgrade chrome's OpenSSL to same version Android ships with. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/openssl/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « patches/sha1_armv4_large.patch ('k') | patches/snap_start.patch » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 --- openssl-1.0.0a.orig/ssl/d1_pkt.c 2010-04-14 00:09:55.000000000 +0000
2 +++ openssl-1.0.0a/ssl/d1_pkt.c 2010-08-25 21:12:39.000000000 +0000
3 @@ -608,6 +608,24 @@ again:
4 goto again;
5 }
6
7 + /* If we receive a valid record larger than the current buffer s ize,
8 + * allocate some memory for it.
9 + */
10 + if (rr->length > s->s3->rbuf.len - DTLS1_RT_HEADER_LENGTH)
11 + {
12 + unsigned char *pp;
13 + unsigned int newlen = rr->length + DTLS1_RT_HEADER_LENGT H;
14 + if ((pp=OPENSSL_realloc(s->s3->rbuf.buf, newlen))==NULL)
15 + {
16 + SSLerr(SSL_F_DTLS1_GET_RECORD,ERR_R_MALLOC_FAILU RE);
17 + return(-1);
18 + }
19 + p = pp + (p - s->s3->rbuf.buf);
20 + s->s3->rbuf.buf=pp;
21 + s->s3->rbuf.len=newlen;
22 + s->packet= &(s->s3->rbuf.buf[0]);
23 + }
24 +
25 /* now s->rstate == SSL_ST_READ_BODY */
26 }
27
28 @@ -1342,6 +1360,7 @@ int do_dtls1_write(SSL *s, int type, con
29 SSL3_BUFFER *wb;
30 SSL_SESSION *sess;
31 int bs;
32 + unsigned int len_with_overhead = len + SSL3_RT_DEFAULT_WRITE_OVERHEAD;
33
34 /* first check if there is a SSL3_BUFFER still being written
35 * out. This will happen with non blocking IO */
36 @@ -1351,6 +1370,16 @@ int do_dtls1_write(SSL *s, int type, con
37 return(ssl3_write_pending(s,type,buf,len));
38 }
39
40 + if (s->s3->wbuf.len < len_with_overhead)
41 + {
42 + if ((p=OPENSSL_realloc(s->s3->wbuf.buf, len_with_overhead)) == N ULL) {
43 + SSLerr(SSL_F_DO_DTLS1_WRITE,ERR_R_MALLOC_FAILURE);
44 + goto err;
45 + }
46 + s->s3->wbuf.buf = p;
47 + s->s3->wbuf.len = len_with_overhead;
48 + }
49 +
50 /* If we have an alert to send, lets send it */
51 if (s->s3->alert_dispatch)
52 {
53 --- openssl-1.0.0a.orig/ssl/s23_srvr.c 2010-02-16 14:20:40.000000000 +0000
54 +++ openssl-1.0.0a/ssl/s23_srvr.c 2010-08-25 21:12:39.000000000 +0000
55 @@ -403,8 +403,13 @@ int ssl23_get_client_hello(SSL *s)
56 v[0] = p[3]; /* == SSL3_VERSION_MAJOR */
57 v[1] = p[4];
58
59 +/* The SSL2 protocol allows n to be larger, just pick
60 + * a reasonable buffer size. */
61 +#if SSL3_RT_DEFAULT_PACKET_SIZE < 1024*4 - SSL3_RT_DEFAULT_WRITE_OVERHEAD
62 +#error "SSL3_RT_DEFAULT_PACKET_SIZE is too small."
63 +#endif
64 n=((p[0]&0x7f)<<8)|p[1];
65 - if (n > (1024*4))
66 + if (n > SSL3_RT_DEFAULT_PACKET_SIZE - 2)
67 {
68 SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_RECORD_TOO_LAR GE);
69 goto err;
70 --- openssl-1.0.0a.orig/ssl/s3_both.c 2010-03-24 23:16:49.000000000 +0000
71 +++ openssl-1.0.0a/ssl/s3_both.c 2010-08-25 21:12:39.000000000 +0000
72 @@ -715,13 +722,20 @@ int ssl3_setup_read_buffer(SSL *s)
73
74 if (s->s3->rbuf.buf == NULL)
75 {
76 - len = SSL3_RT_MAX_PLAIN_LENGTH
77 - + SSL3_RT_MAX_ENCRYPTED_OVERHEAD
78 - + headerlen + align;
79 - if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER)
80 + if (SSL_get_mode(s) & SSL_MODE_SMALL_BUFFERS)
81 {
82 - s->s3->init_extra = 1;
83 - len += SSL3_RT_MAX_EXTRA;
84 + len = SSL3_RT_DEFAULT_PACKET_SIZE;
85 + }
86 + else
87 + {
88 + len = SSL3_RT_MAX_PLAIN_LENGTH
89 + + SSL3_RT_MAX_ENCRYPTED_OVERHEAD
90 + + headerlen + align;
91 + if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER)
92 + {
93 + s->s3->init_extra = 1;
94 + len += SSL3_RT_MAX_EXTRA;
95 + }
96 }
97 #ifndef OPENSSL_NO_COMP
98 if (!(s->options & SSL_OP_NO_COMPRESSION))
99 @@ -757,7 +771,15 @@ int ssl3_setup_write_buffer(SSL *s)
100
101 if (s->s3->wbuf.buf == NULL)
102 {
103 - len = s->max_send_fragment
104 + if (SSL_get_mode(s) & SSL_MODE_SMALL_BUFFERS)
105 + {
106 + len = SSL3_RT_DEFAULT_PACKET_SIZE;
107 + }
108 + else
109 + {
110 + len = s->max_send_fragment;
111 + }
112 + len += 0
113 + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD
114 + headerlen + align;
115 #ifndef OPENSSL_NO_COMP
116 @@ -767,7 +789,6 @@ int ssl3_setup_write_buffer(SSL *s)
117 if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS))
118 len += headerlen + align
119 + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD;
120 -
121 if ((p=freelist_extract(s->ctx, 0, len)) == NULL)
122 goto err;
123 s->s3->wbuf.buf = p;
124 @@ -810,4 +831,3 @@ int ssl3_release_read_buffer(SSL *s)
125 }
126 return 1;
127 }
128 -
129 --- openssl-1.0.0a.orig/ssl/s3_pkt.c 2010-03-25 11:22:42.000000000 +0000
130 +++ openssl-1.0.0a/ssl/s3_pkt.c 2010-08-25 21:12:39.000000000 +0000
131 @@ -293,6 +293,11 @@ static int ssl3_get_record(SSL *s)
132 size_t extra;
133 int decryption_failed_or_bad_record_mac = 0;
134 unsigned char *mac = NULL;
135 +#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0
136 + long align=SSL3_ALIGN_PAYLOAD;
137 +#else
138 + long align=0;
139 +#endif
140
141 rr= &(s->s3->rrec);
142 sess=s->session;
143 @@ -301,7 +306,8 @@ static int ssl3_get_record(SSL *s)
144 extra=SSL3_RT_MAX_EXTRA;
145 else
146 extra=0;
147 - if (extra && !s->s3->init_extra)
148 + if (!(SSL_get_mode(s) & SSL_MODE_SMALL_BUFFERS) &&
149 + extra && !s->s3->init_extra)
150 {
151 /* An application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER
152 * set after ssl3_setup_buffers() was done */
153 @@ -350,6 +356,21 @@ fprintf(stderr, "Record type=%d, Length=
154 goto err;
155 }
156
157 + /* If we receive a valid record larger than the current buffer s ize,
158 + * allocate some memory for it.
159 + */
160 + if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH - align )
161 + {
162 + if ((p=OPENSSL_realloc(s->s3->rbuf.buf, rr->length + SSL 3_RT_HEADER_LENGTH + align))==NULL)
163 + {
164 + SSLerr(SSL_F_SSL3_GET_RECORD,ERR_R_MALLOC_FAILUR E);
165 + goto err;
166 + }
167 + s->s3->rbuf.buf=p;
168 + s->s3->rbuf.len=rr->length + SSL3_RT_HEADER_LENGTH + ali gn;
169 + s->packet= &(s->s3->rbuf.buf[0]);
170 + }
171 +
172 if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH)
173 {
174 al=SSL_AD_RECORD_OVERFLOW;
175 @@ -576,6 +597,7 @@ int ssl3_write_bytes(SSL *s, int type, c
176 const unsigned char *buf=buf_;
177 unsigned int tot,n,nw;
178 int i;
179 + unsigned int max_plain_length;
180
181 s->rwstate=SSL_NOTHING;
182 tot=s->s3->wnum;
183 @@ -595,8 +617,13 @@ int ssl3_write_bytes(SSL *s, int type, c
184 n=(len-tot);
185 for (;;)
186 {
187 - if (n > s->max_send_fragment)
188 - nw=s->max_send_fragment;
189 + if (type == SSL3_RT_APPLICATION_DATA && (SSL_get_mode(s) & SSL_M ODE_SMALL_BUFFERS))
190 + max_plain_length = SSL3_RT_DEFAULT_PLAIN_LENGTH;
191 + else
192 + max_plain_length = s->max_send_fragment;
193 +
194 + if (n > max_plain_length)
195 + nw = max_plain_length;
196 else
197 nw=n;
198
199 @@ -727,6 +727,18 @@ static int do_ssl3_write(SSL *s, int type, const unsigned c har *buf,
200 s->s3->empty_fragment_done = 1;
201 }
202
203 + /* resize if necessary to hold the data. */
204 + if (len + SSL3_RT_DEFAULT_WRITE_OVERHEAD > wb->len)
205 + {
206 + if ((p=OPENSSL_realloc(wb->buf, len + SSL3_RT_DEFAULT_WRITE_OVER HEAD))==NULL)
207 + {
208 + SSLerr(SSL_F_DO_SSL3_WRITE,ERR_R_MALLOC_FAILURE);
209 + goto err;
210 + }
211 + wb->buf = p;
212 + wb->len = len + SSL3_RT_DEFAULT_WRITE_OVERHEAD;
213 + }
214 +
215 if (create_empty_fragment)
216 {
217 #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0
218 --- openssl-1.0.0a.orig/ssl/ssl.h 2010-01-06 17:37:38.000000000 +0000
219 +++ openssl-1.0.0a/ssl/ssl.h 2010-08-25 21:12:39.000000000 +0000
220 @@ -602,6 +602,9 @@ typedef struct ssl_session_st
221 * TLS only.) "Released" buffers are put onto a free-list in the context
222 * or just freed (depending on the context's setting for freelist_max_len). */
223 #define SSL_MODE_RELEASE_BUFFERS 0x00000010L
224 +/* Use small read and write buffers: (a) lazy allocate read buffers for
225 + * large incoming records, and (b) limit the size of outgoing records. */
226 +#define SSL_MODE_SMALL_BUFFERS 0x00000020L
227
228 /* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value,
229 * they cannot be used to clear bits. */
230 --- openssl-1.0.0a.orig/ssl/ssl3.h 2010-01-06 17:37:38.000000000 +0000
231 +++ openssl-1.0.0a/ssl/ssl3.h 2010-08-25 21:12:39.000000000 +0000
232 @@ -280,6 +280,9 @@ extern "C" {
233
234 #define SSL3_RT_MAX_EXTRA (16384)
235
236 +/* Default buffer length used for writen records. Thus a generated record
237 + * will contain plaintext no larger than this value. */
238 +#define SSL3_RT_DEFAULT_PLAIN_LENGTH 2048
239 /* Maximum plaintext length: defined by SSL/TLS standards */
240 #define SSL3_RT_MAX_PLAIN_LENGTH 16384
241 /* Maximum compression overhead: defined by SSL/TLS standards */
242 @@ -311,6 +314,13 @@ extern "C" {
243 #define SSL3_RT_MAX_PACKET_SIZE \
244 (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)
245
246 +/* Extra space for empty fragment, headers, MAC, and padding. */
247 +#define SSL3_RT_DEFAULT_WRITE_OVERHEAD 256
248 +#define SSL3_RT_DEFAULT_PACKET_SIZE 4096 - SSL3_RT_DEFAULT_WRITE_OVERHEAD
249 +#if SSL3_RT_DEFAULT_PLAIN_LENGTH + SSL3_RT_DEFAULT_WRITE_OVERHEAD > SSL3_RT_DEF AULT_PACKET_SIZE
250 +#error "Insufficient space allocated for write buffers."
251 +#endif
252 +
253 #define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54"
254 #define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52"
255
256 @@ -634,4 +645,3 @@ typedef struct ssl3_state_st
257 }
258 #endif
259 #endif
260 -
261 --- openssl-1.0.0a.orig/ssl/ssltest.c 2010-01-24 16:57:38.000000000 +0000
262 +++ openssl-1.0.0a/ssl/ssltest.c 2010-08-25 21:12:39.000000000 +0000
263 @@ -316,6 +316,8 @@ static void sv_usage(void)
264 " (default is sect163r2).\n");
265 #endif
266 fprintf(stderr," -test_cipherlist - verifies the order of the ssl cipher lists\n");
267 + fprintf(stderr," -c_small_records - enable client side use of small SSL record buffers\n");
268 + fprintf(stderr," -s_small_records - enable server side use of small SSL record buffers\n");
269 }
270
271 static void print_details(SSL *c_ssl, const char *prefix)
272 @@ -444,6 +447,9 @@ int opaque_prf_input_cb(SSL *ssl, void *
273 return arg->ret;
274 }
275 #endif
276 + int ssl_mode = 0;
277 + int c_small_records=0;
278 + int s_small_records=0;
279
280 int main(int argc, char *argv[])
281 {
282 @@ -680,6 +687,14 @@ int main(int argc, char *argv[])
283 {
284 test_cipherlist = 1;
285 }
286 + else if (strcmp(*argv, "-c_small_records") == 0)
287 + {
288 + c_small_records = 1;
289 + }
290 + else if (strcmp(*argv, "-s_small_records") == 0)
291 + {
292 + s_small_records = 1;
293 + }
294 else
295 {
296 fprintf(stderr,"unknown option %s\n",*argv);
297 @@ -802,6 +821,21 @@ bad:
298 SSL_CTX_set_cipher_list(s_ctx,cipher);
299 }
300
301 + ssl_mode = 0;
302 + if (c_small_records)
303 + {
304 + ssl_mode = SSL_CTX_get_mode(c_ctx);
305 + ssl_mode |= SSL_MODE_SMALL_BUFFERS;
306 + SSL_CTX_set_mode(c_ctx, ssl_mode);
307 + }
308 + ssl_mode = 0;
309 + if (s_small_records)
310 + {
311 + ssl_mode = SSL_CTX_get_mode(s_ctx);
312 + ssl_mode |= SSL_MODE_SMALL_BUFFERS;
313 + SSL_CTX_set_mode(s_ctx, ssl_mode);
314 + }
315 +
316 #ifndef OPENSSL_NO_DH
317 if (!no_dhe)
318 {
319 --- openssl-1.0.0.orig/test/testssl 2006-03-10 15:06:27.000000000 -0800
320 +++ openssl-1.0.0/test/testssl 2010-04-26 10:24:55.000000000 -0700
321 @@ -70,6 +70,16 @@ $ssltest -client_auth $CA $extra || exit
322 echo test sslv2/sslv3 with both client and server authentication
323 $ssltest -server_auth -client_auth $CA $extra || exit 1
324
325 +echo test sslv2/sslv3 with both client and server authentication and small clie nt buffers
326 +$ssltest -server_auth -client_auth -c_small_records $CA $extra || exit 1
327 +
328 +echo test sslv2/sslv3 with both client and server authentication and small serv er buffers
329 +$ssltest -server_auth -client_auth -s_small_records $CA $extra || exit 1
330 +
331 +echo test sslv2/sslv3 with both client and server authentication and small clie nt and server buffers
332 +$ssltest -server_auth -client_auth -c_small_records -s_small_records $CA $extra || exit 1
333 +
334 +
335 echo test sslv2 via BIO pair
336 $ssltest -bio_pair -ssl2 $extra || exit 1
337
OLDNEW
« no previous file with comments | « patches/sha1_armv4_large.patch ('k') | patches/snap_start.patch » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698