]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
check for failures and clean up
authorAlan T. DeKok <aland@freeradius.org>
Wed, 25 Feb 2026 00:12:43 +0000 (19:12 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 25 Feb 2026 00:12:43 +0000 (19:12 -0500)
src/lib/io/network.c

index 0ddf3ee4f37c2e09d0659de38ea4962d7e075888..f7ffbb3265ec824569bd31d56010085b1e92a499 100644 (file)
@@ -409,6 +409,7 @@ void fr_network_listen_write(fr_network_t *nr, fr_listen_t *li, uint8_t const *p
  */
 int fr_network_listen_inject(fr_network_t *nr, fr_listen_t *li, uint8_t const *packet, size_t packet_len, fr_time_t recv_time)
 {
+       int rcode;
        fr_ring_buffer_t *rb;
        fr_network_inject_t my_inject;
 
@@ -447,11 +448,14 @@ int fr_network_listen_inject(fr_network_t *nr, fr_listen_t *li, uint8_t const *p
        if (!rb) return -1;
 
        my_inject.listen = li;
-       my_inject.packet = talloc_memdup(NULL, packet, packet_len);
+       MEM(my_inject.packet = talloc_memdup(NULL, packet, packet_len));
        my_inject.packet_len = packet_len;
        my_inject.recv_time = recv_time;
 
-       return fr_control_message_send(nr->control, rb, FR_CONTROL_ID_INJECT, &my_inject, sizeof(my_inject));
+       rcode = fr_control_message_send(nr->control, rb, FR_CONTROL_ID_INJECT, &my_inject, sizeof(my_inject));
+       if (rcode < 0) talloc_free(my_inject.packet);
+
+       return rcode;
 }
 
 static fr_event_update_t const pause_read[] = {