diff options
author | bcook <> | 2014-11-26 05:37:26 +0000 |
---|---|---|
committer | bcook <> | 2014-11-26 05:37:26 +0000 |
commit | 03b877a53bb53b621e1b711ba68b8743024bc216 (patch) | |
tree | 8ebf5889029291163b28d7005ec9d9fbaaf4ae5b /src | |
parent | 6f652676bf6d92f62e063a7719b1f2d117f9f74b (diff) | |
download | openbsd-03b877a53bb53b621e1b711ba68b8743024bc216.tar.gz openbsd-03b877a53bb53b621e1b711ba68b8743024bc216.tar.bz2 openbsd-03b877a53bb53b621e1b711ba68b8743024bc216.zip |
normalize set/getsockopt usage.
Remove the remaining random casts on optval. Fixups for this can be handled by
the portability layer all in once place.
Remove remaining fake socklen_t unions, though beck@ points out that this also
removes support for socklen_t changing its length at runtime. RIP.
ok tedu@ beck@ miod@ deraadt@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/bio/b_sock.c | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/bio/bss_conn.c | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/bio/bss_dgram.c | 63 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/bio/b_sock.c | 5 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/bio/bss_conn.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/bio/bss_dgram.c | 63 |
6 files changed, 54 insertions, 90 deletions
diff --git a/src/lib/libcrypto/bio/b_sock.c b/src/lib/libcrypto/bio/b_sock.c index 34e5d9830e..8f3c58fda2 100644 --- a/src/lib/libcrypto/bio/b_sock.c +++ b/src/lib/libcrypto/bio/b_sock.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: b_sock.c,v 1.58 2014/10/13 02:49:53 bcook Exp $ */ | 1 | /* $OpenBSD: b_sock.c,v 1.59 2014/11/26 05:37:26 bcook Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -318,8 +318,7 @@ again: | |||
318 | if (bind_mode == BIO_BIND_REUSEADDR) { | 318 | if (bind_mode == BIO_BIND_REUSEADDR) { |
319 | int i = 1; | 319 | int i = 1; |
320 | 320 | ||
321 | ret = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&i, | 321 | ret = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)); |
322 | sizeof(i)); | ||
323 | bind_mode = BIO_BIND_NORMAL; | 322 | bind_mode = BIO_BIND_NORMAL; |
324 | } | 323 | } |
325 | if (bind(s, &server.sa, addrlen) == -1) { | 324 | if (bind(s, &server.sa, addrlen) == -1) { |
diff --git a/src/lib/libcrypto/bio/bss_conn.c b/src/lib/libcrypto/bio/bss_conn.c index e55fc2d163..7f50936677 100644 --- a/src/lib/libcrypto/bio/bss_conn.c +++ b/src/lib/libcrypto/bio/bss_conn.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bss_conn.c,v 1.31 2014/11/21 18:15:40 deraadt Exp $ */ | 1 | /* $OpenBSD: bss_conn.c,v 1.32 2014/11/26 05:37:26 bcook Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -220,7 +220,7 @@ conn_state(BIO *b, BIO_CONNECT *c) | |||
220 | 220 | ||
221 | #if defined(SO_KEEPALIVE) | 221 | #if defined(SO_KEEPALIVE) |
222 | i = 1; | 222 | i = 1; |
223 | i = setsockopt(b->num, SOL_SOCKET, SO_KEEPALIVE,(char *)&i, sizeof(i)); | 223 | i = setsockopt(b->num, SOL_SOCKET, SO_KEEPALIVE, &i, sizeof(i)); |
224 | if (i < 0) { | 224 | if (i < 0) { |
225 | SYSerr(SYS_F_SOCKET, errno); | 225 | SYSerr(SYS_F_SOCKET, errno); |
226 | ERR_asprintf_error_data("host=%s:%s", | 226 | ERR_asprintf_error_data("host=%s:%s", |
diff --git a/src/lib/libcrypto/bio/bss_dgram.c b/src/lib/libcrypto/bio/bss_dgram.c index 8f7f945e73..9809eda92e 100644 --- a/src/lib/libcrypto/bio/bss_dgram.c +++ b/src/lib/libcrypto/bio/bss_dgram.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bss_dgram.c,v 1.34 2014/11/26 05:01:47 bcook Exp $ */ | 1 | /* $OpenBSD: bss_dgram.c,v 1.35 2014/11/26 05:37:26 bcook Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -244,21 +244,17 @@ dgram_adjust_rcv_timeout(BIO *b) | |||
244 | { | 244 | { |
245 | #if defined(SO_RCVTIMEO) | 245 | #if defined(SO_RCVTIMEO) |
246 | bio_dgram_data *data = (bio_dgram_data *)b->ptr; | 246 | bio_dgram_data *data = (bio_dgram_data *)b->ptr; |
247 | union { size_t s; | ||
248 | int i; | ||
249 | } sz = {0}; | ||
250 | 247 | ||
251 | /* Is a timer active? */ | 248 | /* Is a timer active? */ |
252 | if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0) { | 249 | if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0) { |
253 | struct timeval timenow, timeleft; | 250 | struct timeval timenow, timeleft; |
254 | 251 | ||
255 | /* Read current socket timeout */ | 252 | /* Read current socket timeout */ |
256 | sz.i = sizeof(data->socket_timeout); | 253 | socklen_t sz = sizeof(data->socket_timeout); |
257 | if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, | 254 | if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, |
258 | &(data->socket_timeout), (void *)&sz) < 0) { | 255 | &(data->socket_timeout), &sz) < 0) { |
259 | perror("getsockopt"); | 256 | perror("getsockopt"); |
260 | } else if (sizeof(sz.s) != sizeof(sz.i) && sz.i == 0) | 257 | } |
261 | OPENSSL_assert(sz.s <= sizeof(data->socket_timeout)); | ||
262 | 258 | ||
263 | /* Get current time */ | 259 | /* Get current time */ |
264 | get_current_time(&timenow); | 260 | get_current_time(&timenow); |
@@ -469,17 +465,18 @@ dgram_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
469 | switch (addr.sa.sa_family) { | 465 | switch (addr.sa.sa_family) { |
470 | case AF_INET: | 466 | case AF_INET: |
471 | sockopt_val = IP_PMTUDISC_DO; | 467 | sockopt_val = IP_PMTUDISC_DO; |
472 | if ((ret = setsockopt(b->num, IPPROTO_IP, | 468 | ret = setsockopt(b->num, IPPROTO_IP, IP_MTU_DISCOVER, |
473 | IP_MTU_DISCOVER, &sockopt_val, | 469 | &sockopt_val, sizeof(sockopt_val)); |
474 | sizeof(sockopt_val))) < 0) | 470 | if (ret < 0) |
475 | perror("setsockopt"); | 471 | perror("setsockopt"); |
476 | break; | 472 | break; |
477 | #if defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO) | 473 | #if defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO) |
478 | case AF_INET6: | 474 | case AF_INET6: |
479 | sockopt_val = IPV6_PMTUDISC_DO; | 475 | sockopt_val = IPV6_PMTUDISC_DO; |
480 | if ((ret = setsockopt(b->num, IPPROTO_IPV6, | 476 | ret = setsockopt(b->num, IPPROTO_IPV6, |
481 | IPV6_MTU_DISCOVER, &sockopt_val, | 477 | IPV6_MTU_DISCOVER, &sockopt_val, |
482 | sizeof(sockopt_val))) < 0) | 478 | sizeof(sockopt_val)); |
479 | if (ret < 0) | ||
483 | perror("setsockopt"); | 480 | perror("setsockopt"); |
484 | break; | 481 | break; |
485 | #endif | 482 | #endif |
@@ -502,9 +499,9 @@ dgram_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
502 | sockopt_len = sizeof(sockopt_val); | 499 | sockopt_len = sizeof(sockopt_val); |
503 | switch (addr.sa.sa_family) { | 500 | switch (addr.sa.sa_family) { |
504 | case AF_INET: | 501 | case AF_INET: |
505 | if ((ret = getsockopt(b->num, IPPROTO_IP, IP_MTU, | 502 | ret = getsockopt(b->num, IPPROTO_IP, IP_MTU, |
506 | (void *)&sockopt_val, &sockopt_len)) < 0 || | 503 | &sockopt_val, &sockopt_len); |
507 | sockopt_val < 0) { | 504 | if (ret < 0 || sockopt_val < 0) { |
508 | ret = 0; | 505 | ret = 0; |
509 | } else { | 506 | } else { |
510 | /* we assume that the transport protocol is UDP and no | 507 | /* we assume that the transport protocol is UDP and no |
@@ -516,9 +513,9 @@ dgram_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
516 | break; | 513 | break; |
517 | #if defined(IPV6_MTU) | 514 | #if defined(IPV6_MTU) |
518 | case AF_INET6: | 515 | case AF_INET6: |
519 | if ((ret = getsockopt(b->num, IPPROTO_IPV6, IPV6_MTU, | 516 | ret = getsockopt(b->num, IPPROTO_IPV6, IPV6_MTU, |
520 | (void *)&sockopt_val, &sockopt_len)) < 0 || | 517 | &sockopt_val, &sockopt_len); |
521 | sockopt_val < 0) { | 518 | if (ret < 0 || sockopt_val < 0) { |
522 | ret = 0; | 519 | ret = 0; |
523 | } else { | 520 | } else { |
524 | /* we assume that the transport protocol is UDP and no | 521 | /* we assume that the transport protocol is UDP and no |
@@ -626,20 +623,13 @@ default: | |||
626 | break; | 623 | break; |
627 | case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT: | 624 | case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT: |
628 | { | 625 | { |
629 | union { | 626 | socklen_t sz = sizeof(struct timeval); |
630 | size_t s; | ||
631 | int i; | ||
632 | } sz = {0}; | ||
633 | sz.i = sizeof(struct timeval); | ||
634 | if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, | 627 | if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, |
635 | ptr, (void *)&sz) < 0) { | 628 | ptr, &sz) < 0) { |
636 | perror("getsockopt"); | 629 | perror("getsockopt"); |
637 | ret = -1; | 630 | ret = -1; |
638 | } else if (sizeof(sz.s)!=sizeof(sz.i) && sz.i==0) { | ||
639 | OPENSSL_assert(sz.s <= sizeof(struct timeval)); | ||
640 | ret = (int)sz.s; | ||
641 | } else | 631 | } else |
642 | ret = sz.i; | 632 | ret = sz; |
643 | } | 633 | } |
644 | break; | 634 | break; |
645 | #endif | 635 | #endif |
@@ -653,20 +643,13 @@ default: | |||
653 | break; | 643 | break; |
654 | case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT: | 644 | case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT: |
655 | { | 645 | { |
656 | union { | 646 | socklen_t sz = sizeof(struct timeval); |
657 | size_t s; | ||
658 | int i; | ||
659 | } sz = {0}; | ||
660 | sz.i = sizeof(struct timeval); | ||
661 | if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, | 647 | if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, |
662 | ptr, (void *)&sz) < 0) { | 648 | ptr, &sz) < 0) { |
663 | perror("getsockopt"); | 649 | perror("getsockopt"); |
664 | ret = -1; | 650 | ret = -1; |
665 | } else if (sizeof(sz.s) != sizeof(sz.i) && sz.i == 0) { | ||
666 | OPENSSL_assert(sz.s <= sizeof(struct timeval)); | ||
667 | ret = (int)sz.s; | ||
668 | } else | 651 | } else |
669 | ret = sz.i; | 652 | ret = sz; |
670 | } | 653 | } |
671 | break; | 654 | break; |
672 | #endif | 655 | #endif |
@@ -1295,7 +1278,7 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1295 | if (authkeyid.scact_keynumber > 0) { | 1278 | if (authkeyid.scact_keynumber > 0) { |
1296 | authkeyid.scact_keynumber = authkeyid.scact_keynumber - 1; | 1279 | authkeyid.scact_keynumber = authkeyid.scact_keynumber - 1; |
1297 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, | 1280 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, |
1298 | &authkeyid, sizeof(struct sctp_authkeyid)); | 1281 | &authkeyid, sizeof(struct sctp_authkeyid)); |
1299 | if (ret < 0) | 1282 | if (ret < 0) |
1300 | break; | 1283 | break; |
1301 | } | 1284 | } |
diff --git a/src/lib/libssl/src/crypto/bio/b_sock.c b/src/lib/libssl/src/crypto/bio/b_sock.c index 34e5d9830e..8f3c58fda2 100644 --- a/src/lib/libssl/src/crypto/bio/b_sock.c +++ b/src/lib/libssl/src/crypto/bio/b_sock.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: b_sock.c,v 1.58 2014/10/13 02:49:53 bcook Exp $ */ | 1 | /* $OpenBSD: b_sock.c,v 1.59 2014/11/26 05:37:26 bcook Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -318,8 +318,7 @@ again: | |||
318 | if (bind_mode == BIO_BIND_REUSEADDR) { | 318 | if (bind_mode == BIO_BIND_REUSEADDR) { |
319 | int i = 1; | 319 | int i = 1; |
320 | 320 | ||
321 | ret = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&i, | 321 | ret = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)); |
322 | sizeof(i)); | ||
323 | bind_mode = BIO_BIND_NORMAL; | 322 | bind_mode = BIO_BIND_NORMAL; |
324 | } | 323 | } |
325 | if (bind(s, &server.sa, addrlen) == -1) { | 324 | if (bind(s, &server.sa, addrlen) == -1) { |
diff --git a/src/lib/libssl/src/crypto/bio/bss_conn.c b/src/lib/libssl/src/crypto/bio/bss_conn.c index e55fc2d163..7f50936677 100644 --- a/src/lib/libssl/src/crypto/bio/bss_conn.c +++ b/src/lib/libssl/src/crypto/bio/bss_conn.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bss_conn.c,v 1.31 2014/11/21 18:15:40 deraadt Exp $ */ | 1 | /* $OpenBSD: bss_conn.c,v 1.32 2014/11/26 05:37:26 bcook Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -220,7 +220,7 @@ conn_state(BIO *b, BIO_CONNECT *c) | |||
220 | 220 | ||
221 | #if defined(SO_KEEPALIVE) | 221 | #if defined(SO_KEEPALIVE) |
222 | i = 1; | 222 | i = 1; |
223 | i = setsockopt(b->num, SOL_SOCKET, SO_KEEPALIVE,(char *)&i, sizeof(i)); | 223 | i = setsockopt(b->num, SOL_SOCKET, SO_KEEPALIVE, &i, sizeof(i)); |
224 | if (i < 0) { | 224 | if (i < 0) { |
225 | SYSerr(SYS_F_SOCKET, errno); | 225 | SYSerr(SYS_F_SOCKET, errno); |
226 | ERR_asprintf_error_data("host=%s:%s", | 226 | ERR_asprintf_error_data("host=%s:%s", |
diff --git a/src/lib/libssl/src/crypto/bio/bss_dgram.c b/src/lib/libssl/src/crypto/bio/bss_dgram.c index 8f7f945e73..9809eda92e 100644 --- a/src/lib/libssl/src/crypto/bio/bss_dgram.c +++ b/src/lib/libssl/src/crypto/bio/bss_dgram.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bss_dgram.c,v 1.34 2014/11/26 05:01:47 bcook Exp $ */ | 1 | /* $OpenBSD: bss_dgram.c,v 1.35 2014/11/26 05:37:26 bcook Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -244,21 +244,17 @@ dgram_adjust_rcv_timeout(BIO *b) | |||
244 | { | 244 | { |
245 | #if defined(SO_RCVTIMEO) | 245 | #if defined(SO_RCVTIMEO) |
246 | bio_dgram_data *data = (bio_dgram_data *)b->ptr; | 246 | bio_dgram_data *data = (bio_dgram_data *)b->ptr; |
247 | union { size_t s; | ||
248 | int i; | ||
249 | } sz = {0}; | ||
250 | 247 | ||
251 | /* Is a timer active? */ | 248 | /* Is a timer active? */ |
252 | if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0) { | 249 | if (data->next_timeout.tv_sec > 0 || data->next_timeout.tv_usec > 0) { |
253 | struct timeval timenow, timeleft; | 250 | struct timeval timenow, timeleft; |
254 | 251 | ||
255 | /* Read current socket timeout */ | 252 | /* Read current socket timeout */ |
256 | sz.i = sizeof(data->socket_timeout); | 253 | socklen_t sz = sizeof(data->socket_timeout); |
257 | if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, | 254 | if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, |
258 | &(data->socket_timeout), (void *)&sz) < 0) { | 255 | &(data->socket_timeout), &sz) < 0) { |
259 | perror("getsockopt"); | 256 | perror("getsockopt"); |
260 | } else if (sizeof(sz.s) != sizeof(sz.i) && sz.i == 0) | 257 | } |
261 | OPENSSL_assert(sz.s <= sizeof(data->socket_timeout)); | ||
262 | 258 | ||
263 | /* Get current time */ | 259 | /* Get current time */ |
264 | get_current_time(&timenow); | 260 | get_current_time(&timenow); |
@@ -469,17 +465,18 @@ dgram_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
469 | switch (addr.sa.sa_family) { | 465 | switch (addr.sa.sa_family) { |
470 | case AF_INET: | 466 | case AF_INET: |
471 | sockopt_val = IP_PMTUDISC_DO; | 467 | sockopt_val = IP_PMTUDISC_DO; |
472 | if ((ret = setsockopt(b->num, IPPROTO_IP, | 468 | ret = setsockopt(b->num, IPPROTO_IP, IP_MTU_DISCOVER, |
473 | IP_MTU_DISCOVER, &sockopt_val, | 469 | &sockopt_val, sizeof(sockopt_val)); |
474 | sizeof(sockopt_val))) < 0) | 470 | if (ret < 0) |
475 | perror("setsockopt"); | 471 | perror("setsockopt"); |
476 | break; | 472 | break; |
477 | #if defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO) | 473 | #if defined(IPV6_MTU_DISCOVER) && defined(IPV6_PMTUDISC_DO) |
478 | case AF_INET6: | 474 | case AF_INET6: |
479 | sockopt_val = IPV6_PMTUDISC_DO; | 475 | sockopt_val = IPV6_PMTUDISC_DO; |
480 | if ((ret = setsockopt(b->num, IPPROTO_IPV6, | 476 | ret = setsockopt(b->num, IPPROTO_IPV6, |
481 | IPV6_MTU_DISCOVER, &sockopt_val, | 477 | IPV6_MTU_DISCOVER, &sockopt_val, |
482 | sizeof(sockopt_val))) < 0) | 478 | sizeof(sockopt_val)); |
479 | if (ret < 0) | ||
483 | perror("setsockopt"); | 480 | perror("setsockopt"); |
484 | break; | 481 | break; |
485 | #endif | 482 | #endif |
@@ -502,9 +499,9 @@ dgram_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
502 | sockopt_len = sizeof(sockopt_val); | 499 | sockopt_len = sizeof(sockopt_val); |
503 | switch (addr.sa.sa_family) { | 500 | switch (addr.sa.sa_family) { |
504 | case AF_INET: | 501 | case AF_INET: |
505 | if ((ret = getsockopt(b->num, IPPROTO_IP, IP_MTU, | 502 | ret = getsockopt(b->num, IPPROTO_IP, IP_MTU, |
506 | (void *)&sockopt_val, &sockopt_len)) < 0 || | 503 | &sockopt_val, &sockopt_len); |
507 | sockopt_val < 0) { | 504 | if (ret < 0 || sockopt_val < 0) { |
508 | ret = 0; | 505 | ret = 0; |
509 | } else { | 506 | } else { |
510 | /* we assume that the transport protocol is UDP and no | 507 | /* we assume that the transport protocol is UDP and no |
@@ -516,9 +513,9 @@ dgram_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
516 | break; | 513 | break; |
517 | #if defined(IPV6_MTU) | 514 | #if defined(IPV6_MTU) |
518 | case AF_INET6: | 515 | case AF_INET6: |
519 | if ((ret = getsockopt(b->num, IPPROTO_IPV6, IPV6_MTU, | 516 | ret = getsockopt(b->num, IPPROTO_IPV6, IPV6_MTU, |
520 | (void *)&sockopt_val, &sockopt_len)) < 0 || | 517 | &sockopt_val, &sockopt_len); |
521 | sockopt_val < 0) { | 518 | if (ret < 0 || sockopt_val < 0) { |
522 | ret = 0; | 519 | ret = 0; |
523 | } else { | 520 | } else { |
524 | /* we assume that the transport protocol is UDP and no | 521 | /* we assume that the transport protocol is UDP and no |
@@ -626,20 +623,13 @@ default: | |||
626 | break; | 623 | break; |
627 | case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT: | 624 | case BIO_CTRL_DGRAM_GET_RECV_TIMEOUT: |
628 | { | 625 | { |
629 | union { | 626 | socklen_t sz = sizeof(struct timeval); |
630 | size_t s; | ||
631 | int i; | ||
632 | } sz = {0}; | ||
633 | sz.i = sizeof(struct timeval); | ||
634 | if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, | 627 | if (getsockopt(b->num, SOL_SOCKET, SO_RCVTIMEO, |
635 | ptr, (void *)&sz) < 0) { | 628 | ptr, &sz) < 0) { |
636 | perror("getsockopt"); | 629 | perror("getsockopt"); |
637 | ret = -1; | 630 | ret = -1; |
638 | } else if (sizeof(sz.s)!=sizeof(sz.i) && sz.i==0) { | ||
639 | OPENSSL_assert(sz.s <= sizeof(struct timeval)); | ||
640 | ret = (int)sz.s; | ||
641 | } else | 631 | } else |
642 | ret = sz.i; | 632 | ret = sz; |
643 | } | 633 | } |
644 | break; | 634 | break; |
645 | #endif | 635 | #endif |
@@ -653,20 +643,13 @@ default: | |||
653 | break; | 643 | break; |
654 | case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT: | 644 | case BIO_CTRL_DGRAM_GET_SEND_TIMEOUT: |
655 | { | 645 | { |
656 | union { | 646 | socklen_t sz = sizeof(struct timeval); |
657 | size_t s; | ||
658 | int i; | ||
659 | } sz = {0}; | ||
660 | sz.i = sizeof(struct timeval); | ||
661 | if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, | 647 | if (getsockopt(b->num, SOL_SOCKET, SO_SNDTIMEO, |
662 | ptr, (void *)&sz) < 0) { | 648 | ptr, &sz) < 0) { |
663 | perror("getsockopt"); | 649 | perror("getsockopt"); |
664 | ret = -1; | 650 | ret = -1; |
665 | } else if (sizeof(sz.s) != sizeof(sz.i) && sz.i == 0) { | ||
666 | OPENSSL_assert(sz.s <= sizeof(struct timeval)); | ||
667 | ret = (int)sz.s; | ||
668 | } else | 651 | } else |
669 | ret = sz.i; | 652 | ret = sz; |
670 | } | 653 | } |
671 | break; | 654 | break; |
672 | #endif | 655 | #endif |
@@ -1295,7 +1278,7 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1295 | if (authkeyid.scact_keynumber > 0) { | 1278 | if (authkeyid.scact_keynumber > 0) { |
1296 | authkeyid.scact_keynumber = authkeyid.scact_keynumber - 1; | 1279 | authkeyid.scact_keynumber = authkeyid.scact_keynumber - 1; |
1297 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, | 1280 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, |
1298 | &authkeyid, sizeof(struct sctp_authkeyid)); | 1281 | &authkeyid, sizeof(struct sctp_authkeyid)); |
1299 | if (ret < 0) | 1282 | if (ret < 0) |
1300 | break; | 1283 | break; |
1301 | } | 1284 | } |