From: Philippe Gerum <[email protected]>

Signed-off-by: Philippe Gerum <[email protected]>
---
 kernel/drivers/net/stack/ipv4/icmp.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/kernel/drivers/net/stack/ipv4/icmp.c 
b/kernel/drivers/net/stack/ipv4/icmp.c
index 0671cbc93..c3563595e 100644
--- a/kernel/drivers/net/stack/ipv4/icmp.c
+++ b/kernel/drivers/net/stack/ipv4/icmp.c
@@ -313,8 +313,17 @@ static int rt_icmp_send_request(u32 daddr, struct icmp_bxm 
*icmp_param)
 int rt_icmp_send_echo(u32 daddr, u16 id, u16 sequence, size_t msg_size)
 {
        struct icmp_bxm icmp_param;
-       unsigned char pattern_buf[msg_size];
+       unsigned char *pattern_buf;
        off_t pos;
+       int ret;
+
+       /*
+        * This is ping, exec time is not that critical, so
+        * rtdm_malloc() is ok for the purpose of echoing.
+        */
+       pattern_buf = rtdm_malloc(msg_size);
+       if (pattern_buf == NULL)
+               return -ENOMEM;
 
        /* first purge any potentially pending ICMP fragments */
        rt_ip_frag_invalidate_socket(icmp_socket);
@@ -343,7 +352,10 @@ int rt_icmp_send_echo(u32 daddr, u16 id, u16 sequence, 
size_t msg_size)
        }
        icmp_param.data.buf = pattern_buf;
 
-       return rt_icmp_send_request(daddr, &icmp_param);
+       ret = rt_icmp_send_request(daddr, &icmp_param);
+       rtdm_free(pattern_buf);
+
+       return ret;
 }
 
 /***
-- 
2.29.2


Reply via email to