mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
Ensures that msg_controllen includes last padding.
Although RFC 3542 allows both cases, Theo de Raadt thinks he knows better, and msg_controllen without last padding fails on OpenBSD. Thanks to Job Snijders for the bugreport.
This commit is contained in:
@@ -705,6 +705,7 @@ sk_prepare_cmsgs6(sock *s, struct msghdr *msg, void *cbuf, size_t cbuflen)
|
||||
{
|
||||
struct cmsghdr *cm;
|
||||
struct in6_pktinfo *pi;
|
||||
int controllen = 0;
|
||||
|
||||
msg->msg_control = cbuf;
|
||||
msg->msg_controllen = cbuflen;
|
||||
@@ -713,12 +714,13 @@ sk_prepare_cmsgs6(sock *s, struct msghdr *msg, void *cbuf, size_t cbuflen)
|
||||
cm->cmsg_level = SOL_IPV6;
|
||||
cm->cmsg_type = IPV6_PKTINFO;
|
||||
cm->cmsg_len = CMSG_LEN(sizeof(*pi));
|
||||
controllen += CMSG_SPACE(sizeof(*pi));
|
||||
|
||||
pi = (struct in6_pktinfo *) CMSG_DATA(cm);
|
||||
pi->ipi6_ifindex = s->iface ? s->iface->index : 0;
|
||||
pi->ipi6_addr = ipa_to_in6(s->saddr);
|
||||
|
||||
msg->msg_controllen = cm->cmsg_len;
|
||||
msg->msg_controllen = controllen;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user