11#include "netif.h"
22#include "common/io/io.h"
3+ #include "util/mallocHelper.h"
34
45#include <arpa/inet.h>
56#include <linux/rtnetlink.h>
@@ -26,7 +27,7 @@ struct Route4Entry {
2627
2728static bool getDefaultRouteIPv4 (char iface [IF_NAMESIZE + 1 ], uint32_t * ifIndex , uint32_t * preferredSourceAddr )
2829{
29- int sock_fd = socket (AF_NETLINK , SOCK_RAW | SOCK_CLOEXEC , NETLINK_ROUTE );
30+ FF_AUTO_CLOSE_FD int sock_fd = socket (AF_NETLINK , SOCK_RAW | SOCK_CLOEXEC , NETLINK_ROUTE );
3031 if (sock_fd < 0 )
3132 return false;
3233
@@ -38,7 +39,6 @@ static bool getDefaultRouteIPv4(char iface[IF_NAMESIZE + 1], uint32_t* ifIndex,
3839 addr .nl_groups = 0 ;
3940
4041 if (bind (sock_fd , (struct sockaddr * )& addr , sizeof (addr )) < 0 ) {
41- close (sock_fd );
4242 return false;
4343 }
4444
@@ -78,7 +78,6 @@ static bool getDefaultRouteIPv4(char iface[IF_NAMESIZE + 1], uint32_t* ifIndex,
7878 (struct sockaddr * )& dest_addr , sizeof (dest_addr ));
7979
8080 if (sent != sizeof (req )) {
81- close (sock_fd );
8281 return false;
8382 }
8483
@@ -95,17 +94,14 @@ static bool getDefaultRouteIPv4(char iface[IF_NAMESIZE + 1], uint32_t* ifIndex,
9594
9695 ssize_t peek_size = recvmsg (sock_fd , & msg , MSG_PEEK | MSG_TRUNC );
9796 if (peek_size < 0 ) {
98- close (sock_fd );
9997 return false;
10098 }
10199
102- uint8_t * buffer = malloc ((size_t )peek_size );
100+ FF_AUTO_FREE uint8_t * buffer = malloc ((size_t )peek_size );
103101
104102 ssize_t received = recvfrom (sock_fd , buffer , (size_t )peek_size , 0 ,
105103 (struct sockaddr * )& src_addr , & src_addr_len );
106104
107- close (sock_fd );
108-
109105 struct Route4Entry best_gw ;
110106 memset (& best_gw , 0 , sizeof (best_gw ));
111107
@@ -160,8 +156,6 @@ static bool getDefaultRouteIPv4(char iface[IF_NAMESIZE + 1], uint32_t* ifIndex,
160156 }
161157 }
162158
163- free (buffer );
164-
165159 if (best_gw .gateway != 0 ) {
166160 if (ifIndex ) {
167161 * ifIndex = best_gw .ifindex ;
0 commit comments