summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormiod <>2014-07-11 12:17:46 +0000
committermiod <>2014-07-11 12:17:46 +0000
commite88d2ca994975a40c322d00690d7f3dcffdf1711 (patch)
tree40cb54937d8dcb83597b78a360eea80db2b05d6e /src
parent8e1d6b3472243c401a193867020cc8eb0a27aa05 (diff)
downloadopenbsd-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.c32
-rw-r--r--src/lib/libssl/src/crypto/bio/bss_dgram.c32
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