diff options
author | miod <> | 2014-07-11 12:17:46 +0000 |
---|---|---|
committer | miod <> | 2014-07-11 12:17:46 +0000 |
commit | e88d2ca994975a40c322d00690d7f3dcffdf1711 (patch) | |
tree | 40cb54937d8dcb83597b78a360eea80db2b05d6e /src | |
parent | 8e1d6b3472243c401a193867020cc8eb0a27aa05 (diff) | |
download | openbsd-e88d2ca994975a40c322d00690d7f3dcffdf1711.tar.gz openbsd-e88d2ca994975a40c322d00690d7f3dcffdf1711.tar.bz2 openbsd-e88d2ca994975a40c322d00690d7f3dcffdf1711.zip |
Missing calloc() return value check in dgram_sctp_ctrl(); from Kurt Roeckx via
OpenSSL trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/bio/bss_dgram.c | 32 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/bio/bss_dgram.c | 32 |
2 files changed, 42 insertions, 22 deletions
diff --git a/src/lib/libcrypto/bio/bss_dgram.c b/src/lib/libcrypto/bio/bss_dgram.c index caa8480657..afce2e5290 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.31 2014/07/11 08:44:47 jsing Exp $ */ | 1 | /* $OpenBSD: bss_dgram.c,v 1.32 2014/07/11 12:17:46 miod 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. |
@@ -1166,7 +1166,6 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1166 | bio_dgram_sctp_data *data = NULL; | 1166 | bio_dgram_sctp_data *data = NULL; |
1167 | socklen_t sockopt_len = 0; | 1167 | socklen_t sockopt_len = 0; |
1168 | struct sctp_authkeyid authkeyid; | 1168 | struct sctp_authkeyid authkeyid; |
1169 | struct sctp_authkey *authkey; | ||
1170 | 1169 | ||
1171 | data = (bio_dgram_sctp_data *)b->ptr; | 1170 | data = (bio_dgram_sctp_data *)b->ptr; |
1172 | 1171 | ||
@@ -1208,48 +1207,58 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1208 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_NODELAY, &data->in_handshake, sizeof(int)); | 1207 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_NODELAY, &data->in_handshake, sizeof(int)); |
1209 | break; | 1208 | break; |
1210 | case BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY: | 1209 | case BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY: |
1210 | { | ||
1211 | struct sctp_authkey *authkey; | ||
1212 | |||
1211 | /* New shared key for SCTP AUTH. | 1213 | /* New shared key for SCTP AUTH. |
1212 | * Returns 0 on success, -1 otherwise. | 1214 | * Returns 0 on success, -1 otherwise. |
1213 | */ | 1215 | */ |
1214 | 1216 | ||
1215 | /* Get active key */ | 1217 | /* Get active key */ |
1216 | sockopt_len = sizeof(struct sctp_authkeyid); | 1218 | sockopt_len = sizeof(struct sctp_authkeyid); |
1217 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, &authkeyid, &sockopt_len); | 1219 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, |
1220 | &authkeyid, &sockopt_len); | ||
1218 | if (ret < 0) | 1221 | if (ret < 0) |
1219 | break; | 1222 | break; |
1220 | 1223 | ||
1221 | /* Add new key */ | 1224 | /* Add new key */ |
1222 | sockopt_len = sizeof(struct sctp_authkey) + 64 * sizeof(uint8_t); | 1225 | sockopt_len = sizeof(struct sctp_authkey) + 64 * sizeof(uint8_t); |
1223 | authkey = calloc(1, sockopt_len); | 1226 | authkey = calloc(1, sockopt_len); |
1227 | if (authkey == NULL) { | ||
1228 | ret = -1; | ||
1229 | break; | ||
1230 | } | ||
1224 | authkey->sca_keynumber = authkeyid.scact_keynumber + 1; | 1231 | authkey->sca_keynumber = authkeyid.scact_keynumber + 1; |
1225 | authkey->sca_keylength = 64; | 1232 | authkey->sca_keylength = 64; |
1226 | memcpy(&authkey->sca_key[0], ptr, 64 * sizeof(uint8_t)); | 1233 | memcpy(&authkey->sca_key[0], ptr, 64 * sizeof(uint8_t)); |
1227 | 1234 | ||
1228 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_KEY, authkey, sockopt_len); | 1235 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_KEY, authkey, |
1236 | sockopt_len); | ||
1229 | free(authkey); | 1237 | free(authkey); |
1230 | if (ret < 0) | 1238 | if (ret < 0) |
1231 | break; | 1239 | break; |
1232 | 1240 | ||
1233 | /* Reset active key */ | 1241 | /* Reset active key */ |
1234 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, | 1242 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, |
1235 | &authkeyid, sizeof(struct sctp_authkeyid)); | 1243 | &authkeyid, sizeof(struct sctp_authkeyid)); |
1236 | if (ret < 0) | 1244 | if (ret < 0) |
1237 | break; | 1245 | break; |
1238 | 1246 | } | |
1239 | break; | 1247 | break; |
1240 | case BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY: | 1248 | case BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY: |
1241 | /* Returns 0 on success, -1 otherwise. */ | 1249 | /* Returns 0 on success, -1 otherwise. */ |
1242 | 1250 | ||
1243 | /* Get active key */ | 1251 | /* Get active key */ |
1244 | sockopt_len = sizeof(struct sctp_authkeyid); | 1252 | sockopt_len = sizeof(struct sctp_authkeyid); |
1245 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, &authkeyid, &sockopt_len); | 1253 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, |
1254 | &authkeyid, &sockopt_len); | ||
1246 | if (ret < 0) | 1255 | if (ret < 0) |
1247 | break; | 1256 | break; |
1248 | 1257 | ||
1249 | /* Set active key */ | 1258 | /* Set active key */ |
1250 | authkeyid.scact_keynumber = authkeyid.scact_keynumber + 1; | 1259 | authkeyid.scact_keynumber = authkeyid.scact_keynumber + 1; |
1251 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, | 1260 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, |
1252 | &authkeyid, sizeof(struct sctp_authkeyid)); | 1261 | &authkeyid, sizeof(struct sctp_authkeyid)); |
1253 | if (ret < 0) | 1262 | if (ret < 0) |
1254 | break; | 1263 | break; |
1255 | 1264 | ||
@@ -1269,7 +1278,8 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1269 | if (data->ccs_rcvd == 1 && data->ccs_sent == 1) { | 1278 | if (data->ccs_rcvd == 1 && data->ccs_sent == 1) { |
1270 | /* Get active key */ | 1279 | /* Get active key */ |
1271 | sockopt_len = sizeof(struct sctp_authkeyid); | 1280 | sockopt_len = sizeof(struct sctp_authkeyid); |
1272 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, &authkeyid, &sockopt_len); | 1281 | ret = getsockopt(b->num, IPPROTO_SCTP, |
1282 | SCTP_AUTH_ACTIVE_KEY, &authkeyid, &sockopt_len); | ||
1273 | if (ret < 0) | 1283 | if (ret < 0) |
1274 | break; | 1284 | break; |
1275 | 1285 | ||
@@ -1279,8 +1289,8 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1279 | authkeyid.scact_keynumber = authkeyid.scact_keynumber - 1; | 1289 | authkeyid.scact_keynumber = authkeyid.scact_keynumber - 1; |
1280 | #ifdef SCTP_AUTH_DEACTIVATE_KEY | 1290 | #ifdef SCTP_AUTH_DEACTIVATE_KEY |
1281 | sockopt_len = sizeof(struct sctp_authkeyid); | 1291 | sockopt_len = sizeof(struct sctp_authkeyid); |
1282 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DEACTIVATE_KEY, | 1292 | ret = setsockopt(b->num, IPPROTO_SCTP, |
1283 | &authkeyid, sockopt_len); | 1293 | SCTP_AUTH_DEACTIVATE_KEY, &authkeyid, sockopt_len); |
1284 | if (ret < 0) | 1294 | if (ret < 0) |
1285 | break; | 1295 | break; |
1286 | #endif | 1296 | #endif |
diff --git a/src/lib/libssl/src/crypto/bio/bss_dgram.c b/src/lib/libssl/src/crypto/bio/bss_dgram.c index caa8480657..afce2e5290 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.31 2014/07/11 08:44:47 jsing Exp $ */ | 1 | /* $OpenBSD: bss_dgram.c,v 1.32 2014/07/11 12:17:46 miod 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. |
@@ -1166,7 +1166,6 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1166 | bio_dgram_sctp_data *data = NULL; | 1166 | bio_dgram_sctp_data *data = NULL; |
1167 | socklen_t sockopt_len = 0; | 1167 | socklen_t sockopt_len = 0; |
1168 | struct sctp_authkeyid authkeyid; | 1168 | struct sctp_authkeyid authkeyid; |
1169 | struct sctp_authkey *authkey; | ||
1170 | 1169 | ||
1171 | data = (bio_dgram_sctp_data *)b->ptr; | 1170 | data = (bio_dgram_sctp_data *)b->ptr; |
1172 | 1171 | ||
@@ -1208,48 +1207,58 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1208 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_NODELAY, &data->in_handshake, sizeof(int)); | 1207 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_NODELAY, &data->in_handshake, sizeof(int)); |
1209 | break; | 1208 | break; |
1210 | case BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY: | 1209 | case BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY: |
1210 | { | ||
1211 | struct sctp_authkey *authkey; | ||
1212 | |||
1211 | /* New shared key for SCTP AUTH. | 1213 | /* New shared key for SCTP AUTH. |
1212 | * Returns 0 on success, -1 otherwise. | 1214 | * Returns 0 on success, -1 otherwise. |
1213 | */ | 1215 | */ |
1214 | 1216 | ||
1215 | /* Get active key */ | 1217 | /* Get active key */ |
1216 | sockopt_len = sizeof(struct sctp_authkeyid); | 1218 | sockopt_len = sizeof(struct sctp_authkeyid); |
1217 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, &authkeyid, &sockopt_len); | 1219 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, |
1220 | &authkeyid, &sockopt_len); | ||
1218 | if (ret < 0) | 1221 | if (ret < 0) |
1219 | break; | 1222 | break; |
1220 | 1223 | ||
1221 | /* Add new key */ | 1224 | /* Add new key */ |
1222 | sockopt_len = sizeof(struct sctp_authkey) + 64 * sizeof(uint8_t); | 1225 | sockopt_len = sizeof(struct sctp_authkey) + 64 * sizeof(uint8_t); |
1223 | authkey = calloc(1, sockopt_len); | 1226 | authkey = calloc(1, sockopt_len); |
1227 | if (authkey == NULL) { | ||
1228 | ret = -1; | ||
1229 | break; | ||
1230 | } | ||
1224 | authkey->sca_keynumber = authkeyid.scact_keynumber + 1; | 1231 | authkey->sca_keynumber = authkeyid.scact_keynumber + 1; |
1225 | authkey->sca_keylength = 64; | 1232 | authkey->sca_keylength = 64; |
1226 | memcpy(&authkey->sca_key[0], ptr, 64 * sizeof(uint8_t)); | 1233 | memcpy(&authkey->sca_key[0], ptr, 64 * sizeof(uint8_t)); |
1227 | 1234 | ||
1228 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_KEY, authkey, sockopt_len); | 1235 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_KEY, authkey, |
1236 | sockopt_len); | ||
1229 | free(authkey); | 1237 | free(authkey); |
1230 | if (ret < 0) | 1238 | if (ret < 0) |
1231 | break; | 1239 | break; |
1232 | 1240 | ||
1233 | /* Reset active key */ | 1241 | /* Reset active key */ |
1234 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, | 1242 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, |
1235 | &authkeyid, sizeof(struct sctp_authkeyid)); | 1243 | &authkeyid, sizeof(struct sctp_authkeyid)); |
1236 | if (ret < 0) | 1244 | if (ret < 0) |
1237 | break; | 1245 | break; |
1238 | 1246 | } | |
1239 | break; | 1247 | break; |
1240 | case BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY: | 1248 | case BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY: |
1241 | /* Returns 0 on success, -1 otherwise. */ | 1249 | /* Returns 0 on success, -1 otherwise. */ |
1242 | 1250 | ||
1243 | /* Get active key */ | 1251 | /* Get active key */ |
1244 | sockopt_len = sizeof(struct sctp_authkeyid); | 1252 | sockopt_len = sizeof(struct sctp_authkeyid); |
1245 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, &authkeyid, &sockopt_len); | 1253 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, |
1254 | &authkeyid, &sockopt_len); | ||
1246 | if (ret < 0) | 1255 | if (ret < 0) |
1247 | break; | 1256 | break; |
1248 | 1257 | ||
1249 | /* Set active key */ | 1258 | /* Set active key */ |
1250 | authkeyid.scact_keynumber = authkeyid.scact_keynumber + 1; | 1259 | authkeyid.scact_keynumber = authkeyid.scact_keynumber + 1; |
1251 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, | 1260 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, |
1252 | &authkeyid, sizeof(struct sctp_authkeyid)); | 1261 | &authkeyid, sizeof(struct sctp_authkeyid)); |
1253 | if (ret < 0) | 1262 | if (ret < 0) |
1254 | break; | 1263 | break; |
1255 | 1264 | ||
@@ -1269,7 +1278,8 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1269 | if (data->ccs_rcvd == 1 && data->ccs_sent == 1) { | 1278 | if (data->ccs_rcvd == 1 && data->ccs_sent == 1) { |
1270 | /* Get active key */ | 1279 | /* Get active key */ |
1271 | sockopt_len = sizeof(struct sctp_authkeyid); | 1280 | sockopt_len = sizeof(struct sctp_authkeyid); |
1272 | ret = getsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, &authkeyid, &sockopt_len); | 1281 | ret = getsockopt(b->num, IPPROTO_SCTP, |
1282 | SCTP_AUTH_ACTIVE_KEY, &authkeyid, &sockopt_len); | ||
1273 | if (ret < 0) | 1283 | if (ret < 0) |
1274 | break; | 1284 | break; |
1275 | 1285 | ||
@@ -1279,8 +1289,8 @@ dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
1279 | authkeyid.scact_keynumber = authkeyid.scact_keynumber - 1; | 1289 | authkeyid.scact_keynumber = authkeyid.scact_keynumber - 1; |
1280 | #ifdef SCTP_AUTH_DEACTIVATE_KEY | 1290 | #ifdef SCTP_AUTH_DEACTIVATE_KEY |
1281 | sockopt_len = sizeof(struct sctp_authkeyid); | 1291 | sockopt_len = sizeof(struct sctp_authkeyid); |
1282 | ret = setsockopt(b->num, IPPROTO_SCTP, SCTP_AUTH_DEACTIVATE_KEY, | 1292 | ret = setsockopt(b->num, IPPROTO_SCTP, |
1283 | &authkeyid, sockopt_len); | 1293 | SCTP_AUTH_DEACTIVATE_KEY, &authkeyid, sockopt_len); |
1284 | if (ret < 0) | 1294 | if (ret < 0) |
1285 | break; | 1295 | break; |
1286 | #endif | 1296 | #endif |