| 1406 | } |
| 1407 | |
| 1408 | int |
| 1409 | sctp_expand_mapping_array(struct sctp_association *asoc, uint32_t needed) |
| 1410 | { |
| 1411 | /* mapping array needs to grow */ |
| 1412 | uint8_t *new_array1, *new_array2; |
| 1413 | uint32_t new_size; |
| 1414 | |
| 1415 | new_size = asoc->mapping_array_size + ((needed + 7) / 8 + SCTP_MAPPING_ARRAY_INCR); |
| 1416 | SCTP_MALLOC(new_array1, uint8_t *, new_size, SCTP_M_MAP); |
| 1417 | SCTP_MALLOC(new_array2, uint8_t *, new_size, SCTP_M_MAP); |
| 1418 | if ((new_array1 == NULL) || (new_array2 == NULL)) { |
| 1419 | /* can't get more, forget it */ |
| 1420 | SCTP_PRINTF("No memory for expansion of SCTP mapping array %d\n", new_size); |
| 1421 | if (new_array1) { |
| 1422 | SCTP_FREE(new_array1, SCTP_M_MAP); |
| 1423 | } |
| 1424 | if (new_array2) { |
| 1425 | SCTP_FREE(new_array2, SCTP_M_MAP); |
| 1426 | } |
| 1427 | return (-1); |
| 1428 | } |
| 1429 | memset(new_array1, 0, new_size); |
| 1430 | memset(new_array2, 0, new_size); |
| 1431 | memcpy(new_array1, asoc->mapping_array, asoc->mapping_array_size); |
| 1432 | memcpy(new_array2, asoc->nr_mapping_array, asoc->mapping_array_size); |
| 1433 | SCTP_FREE(asoc->mapping_array, SCTP_M_MAP); |
| 1434 | SCTP_FREE(asoc->nr_mapping_array, SCTP_M_MAP); |
| 1435 | asoc->mapping_array = new_array1; |
| 1436 | asoc->nr_mapping_array = new_array2; |
| 1437 | asoc->mapping_array_size = new_size; |
| 1438 | return (0); |
| 1439 | } |
| 1440 | |
| 1441 | static void |
| 1442 | sctp_iterator_work(struct sctp_iterator *it) |
no test coverage detected