Fix alignment of buffers in ra_process and dhcpv6_request The packet buffer needs to be 32-bit aligned to ensure that the various 32-bit fields we pick out are naturally aligned. The control message buffers needs to be naturally aligned for struct cmsghdr. Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Fix iteration after expiring a list entry After removing an entry, the next entry will be at the same offset as the entry we just removed. Also the total length will have changed. Update the length when we remove an entry, and advance the offset only when we don't. Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Fix script environment variable setting for empty lists When setting an environment variable as a space-separated list, and the list is empty, we must not delete the '=' before the value. In practice putenv() is likely to discard the invalid string, leaving the variable unset, but this is not guaranteed. Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Fix potential log forgery via status string We should not include any control characters from the server status message when logging it; in particular if we include '\n' this could result in additional arbitrary log lines. In dhcpv6_log_status_code, replace all control characters with '?'. Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Check for unsupported PD exclusion configuration in dhcpv6_parse_ia We currently only support PD exclusions that only affect bits 64-95 of the address, so we require: 32 <= PD prefix length < exclusion prefix length <= 64 The first inequality was not validated, and this could result in a buffer overflow when generating the next request message. Signed-off-by: Ben Hutchings <ben@decadent.org.uk>