summaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorMichael Brown2017-09-07 13:17:18 +0200
committerMichael Brown2017-09-07 13:19:35 +0200
commitaf02a8d07193e8b8900a37a8f42aefcdc332e68c (patch)
tree119e4c79c038f6eac71f44e3147cd095ff0855a3 /src/net
parent[efi] Match behaviour of SnpDxe for truncated received packets (diff)
downloadipxe-af02a8d07193e8b8900a37a8f42aefcdc332e68c.tar.gz
ipxe-af02a8d07193e8b8900a37a8f42aefcdc332e68c.tar.xz
ipxe-af02a8d07193e8b8900a37a8f42aefcdc332e68c.zip
[dns] Ensure DNS names are NUL-terminated when used as diagnostic strings
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net')
-rw-r--r--src/net/udp/dns.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/net/udp/dns.c b/src/net/udp/dns.c
index 897e0f85..f412f710 100644
--- a/src/net/udp/dns.c
+++ b/src/net/udp/dns.c
@@ -417,7 +417,7 @@ static const char * dns_name ( struct dns_name *name ) {
static char buf[256];
int len;
- len = dns_decode ( name, buf, sizeof ( buf ) );
+ len = dns_decode ( name, buf, ( sizeof ( buf ) - 1 /* NUL */ ) );
return ( ( len < 0 ) ? "<INVALID>" : buf );
}
@@ -877,10 +877,16 @@ static void dns_xfer_close ( struct dns_request *dns, int rc ) {
*/
static int dns_progress ( struct dns_request *dns,
struct job_progress *progress ) {
+ int len;
/* Show current question as progress message */
- dns_decode ( &dns->name, progress->message,
- sizeof ( progress->message ) );
+ len = dns_decode ( &dns->name, progress->message,
+ ( sizeof ( progress->message ) - 1 /* NUL */ ) );
+ if ( len < 0 ) {
+ /* Ignore undecodable names */
+ progress->message[0] = '\0';
+ }
+
return 0;
}