aboutsummaryrefslogtreecommitdiff
path: root/embassy-net
diff options
context:
space:
mode:
authorGasper Stukelj <[email protected]>2024-07-28 21:50:52 +0200
committerGasper Stukelj <[email protected]>2024-07-29 23:24:44 +0200
commitc5d077a2c62edb4d704fc64dc6eeea5a3ed0dcb0 (patch)
tree04b018b0a10376eb1a7892425b40785b4053c348 /embassy-net
parente54c753537b4b12c3d2fd03ad8e8ba9eaaded06e (diff)
embassy-net: dns: bound the dns_servers slice
`smoltcp::socket::dns::Socket::update_servers()` will panic if a slice exceeding a fixed length is passed to it. This is can be especially inconvenient when using DHCP config. Avoid panicking by using at most `DNS_MAX_SERVER_COUNT` DNS servers from the config.
Diffstat (limited to 'embassy-net')
-rw-r--r--embassy-net/src/lib.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs
index 12f5f30b4..524799a1b 100644
--- a/embassy-net/src/lib.rs
+++ b/embassy-net/src/lib.rs
@@ -34,6 +34,8 @@ use embassy_sync::waitqueue::WakerRegistration;
34use embassy_time::{Instant, Timer}; 34use embassy_time::{Instant, Timer};
35#[allow(unused_imports)] 35#[allow(unused_imports)]
36use heapless::Vec; 36use heapless::Vec;
37#[cfg(feature = "dns")]
38pub use smoltcp::config::DNS_MAX_SERVER_COUNT;
37#[cfg(feature = "igmp")] 39#[cfg(feature = "igmp")]
38pub use smoltcp::iface::MulticastError; 40pub use smoltcp::iface::MulticastError;
39#[allow(unused_imports)] 41#[allow(unused_imports)]
@@ -823,9 +825,17 @@ impl<D: Driver> Inner<D> {
823 825
824 // Apply DNS servers 826 // Apply DNS servers
825 #[cfg(feature = "dns")] 827 #[cfg(feature = "dns")]
826 s.sockets 828 if !dns_servers.is_empty() {
827 .get_mut::<smoltcp::socket::dns::Socket>(self.dns_socket) 829 let count = if dns_servers.len() > DNS_MAX_SERVER_COUNT {
828 .update_servers(&dns_servers[..]); 830 warn!("Number of DNS servers exceeds DNS_MAX_SERVER_COUNT, truncating list.");
831 DNS_MAX_SERVER_COUNT
832 } else {
833 dns_servers.len()
834 };
835 s.sockets
836 .get_mut::<smoltcp::socket::dns::Socket>(self.dns_socket)
837 .update_servers(&dns_servers[..count]);
838 }
829 839
830 self.config_waker.wake(); 840 self.config_waker.wake();
831 } 841 }