mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-22 14:53:03 +00:00
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.
This commit is contained in:
parent
e54c753537
commit
c5d077a2c6
@ -34,6 +34,8 @@ use embassy_sync::waitqueue::WakerRegistration;
|
|||||||
use embassy_time::{Instant, Timer};
|
use embassy_time::{Instant, Timer};
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
#[cfg(feature = "dns")]
|
||||||
|
pub use smoltcp::config::DNS_MAX_SERVER_COUNT;
|
||||||
#[cfg(feature = "igmp")]
|
#[cfg(feature = "igmp")]
|
||||||
pub use smoltcp::iface::MulticastError;
|
pub use smoltcp::iface::MulticastError;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
@ -823,9 +825,17 @@ impl<D: Driver> Inner<D> {
|
|||||||
|
|
||||||
// Apply DNS servers
|
// Apply DNS servers
|
||||||
#[cfg(feature = "dns")]
|
#[cfg(feature = "dns")]
|
||||||
s.sockets
|
if !dns_servers.is_empty() {
|
||||||
.get_mut::<smoltcp::socket::dns::Socket>(self.dns_socket)
|
let count = if dns_servers.len() > DNS_MAX_SERVER_COUNT {
|
||||||
.update_servers(&dns_servers[..]);
|
warn!("Number of DNS servers exceeds DNS_MAX_SERVER_COUNT, truncating list.");
|
||||||
|
DNS_MAX_SERVER_COUNT
|
||||||
|
} else {
|
||||||
|
dns_servers.len()
|
||||||
|
};
|
||||||
|
s.sockets
|
||||||
|
.get_mut::<smoltcp::socket::dns::Socket>(self.dns_socket)
|
||||||
|
.update_servers(&dns_servers[..count]);
|
||||||
|
}
|
||||||
|
|
||||||
self.config_waker.wake();
|
self.config_waker.wake();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user