]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
get cmsg after setting controllen
authorAlan T. DeKok <aland@freeradius.org>
Fri, 20 Dec 2024 15:20:17 +0000 (10:20 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 20 Dec 2024 22:24:28 +0000 (17:24 -0500)
src/lib/bio/fd.c
src/protocols/radius/bio.c

index d265edeb0d38364836052d12387fbb301d60009a..896dd62fc214ddf20c67d05ac7f4a7d1f4f6b0c8 100644 (file)
@@ -427,14 +427,13 @@ static ssize_t fr_bio_fd_sendfromto4(fr_bio_t *bio, void *packet_ctx, const void
                .msg_flags      = 0,
        };
 
-       cmsg = CMSG_FIRSTHDR(&my->msgh);
-
        {
 #ifdef IP_PKTINFO
                struct in_pktinfo *pkt;
 
                my->msgh.msg_controllen = CMSG_SPACE(sizeof(*pkt));
 
+               cmsg = CMSG_FIRSTHDR(&my->msgh);
                cmsg->cmsg_level = SOL_IP;
                cmsg->cmsg_type = IP_PKTINFO;
                cmsg->cmsg_len = CMSG_LEN(sizeof(*pkt));
@@ -449,6 +448,7 @@ static ssize_t fr_bio_fd_sendfromto4(fr_bio_t *bio, void *packet_ctx, const void
 
                my->msgh.msg_controllen = CMSG_SPACE(sizeof(*in));
 
+               cmsg = CMSG_FIRSTHDR(&my->msgh);
                cmsg->cmsg_level = IPPROTO_IP;
                cmsg->cmsg_type = IP_SENDSRCADDR;
                cmsg->cmsg_len = CMSG_LEN(sizeof(*in));
@@ -575,13 +575,12 @@ static ssize_t fr_bio_fd_sendfromto6(fr_bio_t *bio, void *packet_ctx, const void
                .msg_flags      = 0,
        };
 
-       cmsg = CMSG_FIRSTHDR(&my->msgh);
-
        {
                struct in6_pktinfo *pkt;
 
                my->msgh.msg_controllen = CMSG_SPACE(sizeof(*pkt));
 
+               cmsg = CMSG_FIRSTHDR(&my->msgh);
                cmsg->cmsg_level = IPPROTO_IPV6;
                cmsg->cmsg_type = IPV6_PKTINFO;
                cmsg->cmsg_len = CMSG_LEN(sizeof(*pkt));
index 0e639eae56f76cd162f563e17cb5609011205c48..aa6687ba81b103a2b6d382d2403a721b748fa9d9 100644 (file)
@@ -79,7 +79,7 @@ fr_bio_verify_action_t fr_radius_bio_verify_datagram(UNUSED fr_bio_t *bio, void
 
        want = fr_nbo_to_uint16(hdr + 2);
        if (uctx->max_packet_size && (want > uctx->max_packet_size)) {
-               return FR_BIO_VERIFY_ERROR_DISCARD;
+               return FR_BIO_VERIFY_DISCARD;
        }
 
        /*