dhcp: fix dhcp_compl_event 69/36069/4
authorJing Peng <pj.hades@gmail.com>
Fri, 29 Apr 2022 19:14:07 +0000 (15:14 -0400)
committerNeale Ranns <neale@graphiant.com>
Mon, 2 May 2022 06:46:18 +0000 (06:46 +0000)
This patch fixes two problems:

1. The lease field in the dhcp_compl_event message can include a list of
vl_api_domain_server_t structs, but no memory is allocated for it.
2. The DNS server address is not copied properly, resulting in wrong IP4
addresses in the event message.

Type: fix

Signed-off-by: Jing Peng <pj.hades@gmail.com>
Change-Id: I42c533e7af697568c69714011d983f88368a7e15

src/plugins/dhcp/dhcp_api.c

index 2b8d41a..91ee0aa 100644 (file)
@@ -279,8 +279,8 @@ dhcp_client_lease_encode (vl_api_dhcp_lease_t * lease,
 
   lease->count = vec_len (client->domain_server_address);
   for (i = 0; i < lease->count; i++)
-    clib_memcpy (&lease->domain_server[i].address,
-                (u8 *) & client->domain_server_address[i],
+    clib_memcpy (&lease->domain_server[i].address.un.ip4,
+                (u8 *) &client->domain_server_address[i],
                 sizeof (ip4_address_t));
 
   clib_memcpy (&lease->host_mac[0], client->client_hardware_address, 6);
@@ -321,7 +321,9 @@ dhcp_compl_event_callback (u32 client_index, const dhcp_client_t * client)
   if (!reg)
     return;
 
-  mp = vl_msg_api_alloc (sizeof (*mp));
+  mp = vl_msg_api_alloc (sizeof (*mp) +
+                        sizeof (vl_api_domain_server_t) *
+                          vec_len (client->domain_server_address));
   mp->client_index = client_index;
   mp->pid = client->pid;
   dhcp_client_lease_encode (&mp->lease, client);