Skip to content

Commit 1ca8de0

Browse files
committed
lwip: constrain ping address resolution to IPv4
1 parent 1f91468 commit 1ca8de0

4 files changed

Lines changed: 11 additions & 7 deletions

File tree

components/net/lwip/lwip-1.4.1/src/apps/ping/ping.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ rt_err_t ping(char* target_name, rt_uint32_t times, rt_size_t size)
140140
int timeout = (int)PING_RCV_TIMEO;
141141
#else
142142
struct timeval timeout = { PING_RCV_TIMEO / RT_TICK_PER_SECOND, PING_RCV_TIMEO % RT_TICK_PER_SECOND };
143-
#endif / * LWIP_SO_SNDRCVTIMEO_NONSTANDARD */
143+
#endif /* LWIP_SO_SNDRCVTIMEO_NONSTANDARD */
144144

145145
int s, ttl, recv_len;
146146
ip_addr_t target_addr;
@@ -159,13 +159,14 @@ rt_err_t ping(char* target_name, rt_uint32_t times, rt_size_t size)
159159
}
160160

161161
memset(&hint, 0, sizeof(hint));
162+
hint.ai_family = AF_INET;
162163
/* convert URL to IP */
163164
if (lwip_getaddrinfo(target_name, NULL, &hint, &res) != 0)
164165
{
165166
rt_kprintf("ping: unknown host %s\n", target_name);
166167
return -RT_ERROR;
167168
}
168-
memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
169+
h = (struct sockaddr_in *)res->ai_addr;
169170
memcpy(&ina, &h->sin_addr, sizeof(ina));
170171
lwip_freeaddrinfo(res);
171172
if (inet_aton(inet_ntoa(ina), &target_addr) == 0)

components/net/lwip/lwip-2.0.3/src/apps/ping/ping.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ rt_err_t ping(char* target_name, rt_uint32_t times, rt_size_t size)
140140
int timeout = (int)PING_RCV_TIMEO;
141141
#else
142142
struct timeval timeout = { PING_RCV_TIMEO / RT_TICK_PER_SECOND, PING_RCV_TIMEO % RT_TICK_PER_SECOND };
143-
#endif / * LWIP_SO_SNDRCVTIMEO_NONSTANDARD */
143+
#endif /* LWIP_SO_SNDRCVTIMEO_NONSTANDARD */
144144

145145
int s, ttl, recv_len;
146146
ip_addr_t target_addr;
@@ -159,13 +159,14 @@ rt_err_t ping(char* target_name, rt_uint32_t times, rt_size_t size)
159159
}
160160

161161
rt_memset(&hint, 0, sizeof(hint));
162+
hint.ai_family = AF_INET;
162163
/* convert URL to IP */
163164
if (lwip_getaddrinfo(target_name, NULL, &hint, &res) != 0)
164165
{
165166
rt_kprintf("ping: unknown host %s\n", target_name);
166167
return -RT_ERROR;
167168
}
168-
rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
169+
h = (struct sockaddr_in *)res->ai_addr;
169170
rt_memcpy(&ina, &h->sin_addr, sizeof(ina));
170171
lwip_freeaddrinfo(res);
171172
if (inet_aton(inet_ntoa(ina), &target_addr) == 0)

components/net/lwip/lwip-2.1.2/src/apps/ping/ping.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ rt_err_t ping(char* target_name, rt_uint32_t times, rt_size_t size)
140140
int timeout = (int)PING_RCV_TIMEO;
141141
#else
142142
struct timeval timeout = { PING_RCV_TIMEO / RT_TICK_PER_SECOND, PING_RCV_TIMEO % RT_TICK_PER_SECOND };
143-
#endif / * LWIP_SO_SNDRCVTIMEO_NONSTANDARD */
143+
#endif /* LWIP_SO_SNDRCVTIMEO_NONSTANDARD */
144144

145145
int s, ttl, recv_len;
146146
ip_addr_t target_addr;
@@ -159,13 +159,14 @@ rt_err_t ping(char* target_name, rt_uint32_t times, rt_size_t size)
159159
}
160160

161161
memset(&hint, 0, sizeof(hint));
162+
hint.ai_family = AF_INET;
162163
/* convert URL to IP */
163164
if (lwip_getaddrinfo(target_name, NULL, &hint, &res) != 0)
164165
{
165166
rt_kprintf("ping: unknown host %s\n", target_name);
166167
return -RT_ERROR;
167168
}
168-
memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
169+
h = (struct sockaddr_in *)res->ai_addr;
169170
memcpy(&ina, &h->sin_addr, sizeof(ina));
170171
lwip_freeaddrinfo(res);
171172
if (inet_aton(inet_ntoa(ina), &target_addr) == 0)

components/net/lwip/port/ethernetif.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,12 +232,13 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
232232
RT_ASSERT(ping_resp);
233233

234234
rt_memset(&hint, 0x00, sizeof(hint));
235+
hint.ai_family = AF_INET;
235236
/* convert URL to IP */
236237
if (lwip_getaddrinfo(host, RT_NULL, &hint, &res) != 0)
237238
{
238239
return -RT_ERROR;
239240
}
240-
SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *));
241+
h = (struct sockaddr_in *)res->ai_addr;
241242
SMEMCPY(&ina, &h->sin_addr, sizeof(ina));
242243
lwip_freeaddrinfo(res);
243244
if (inet_aton(inet_ntoa(ina), &target_addr) == 0)

0 commit comments

Comments
 (0)