@@ -192,23 +192,19 @@ static void setup_dns_hdr(uint8_t *buf, uint16_t answers, uint16_t dns_id)
192
192
193
193
static void add_question (struct net_buf * query , enum dns_rr_type qtype )
194
194
{
195
- char * dot = query -> data + DNS_MSG_HEADER_SIZE ;
196
- char * prev = NULL ;
195
+ char * dot = query -> data + DNS_MSG_HEADER_SIZE + 1 ;
196
+ char * prev = query -> data + DNS_MSG_HEADER_SIZE ;
197
197
uint16_t offset ;
198
198
199
- while ((dot = strchr (dot , '.' ))) {
200
- if (!prev ) {
201
- prev = dot ++ ;
202
- continue ;
203
- }
199
+ /* For the length of the first label. */
200
+ query -> len += 1 ;
204
201
202
+ while ((dot = strchr (dot , '.' )) != NULL ) {
205
203
* prev = dot - prev - 1 ;
206
204
prev = dot ++ ;
207
205
}
208
206
209
- if (prev ) {
210
- * prev = strlen (prev ) - 1 ;
211
- }
207
+ * prev = strlen (prev + 1 );
212
208
213
209
offset = DNS_MSG_HEADER_SIZE + query -> len + 1 ;
214
210
UNALIGNED_PUT (htons (qtype ), (uint16_t * )(query -> data + offset ));
@@ -245,14 +241,15 @@ static int create_answer(enum dns_rr_type qtype,
245
241
/* Prepare the response into the query buffer: move the name
246
242
* query buffer has to get enough free space: dns_hdr + query + answer
247
243
*/
248
- if ((net_buf_max_len (query ) - query -> len ) < (DNS_MSG_HEADER_SIZE +
244
+ if ((net_buf_max_len (query ) - query -> len ) < (DNS_MSG_HEADER_SIZE + 1 +
249
245
(DNS_QTYPE_LEN + DNS_QCLASS_LEN ) * 2 +
250
246
DNS_TTL_LEN + DNS_RDLENGTH_LEN +
251
247
addr_len + query -> len )) {
252
248
return - ENOBUFS ;
253
249
}
254
250
255
- memmove (query -> data + DNS_MSG_HEADER_SIZE , query -> data , query -> len );
251
+ /* +1 for the initial label length */
252
+ memmove (query -> data + DNS_MSG_HEADER_SIZE + 1 , query -> data , query -> len );
256
253
257
254
setup_dns_hdr (query -> data , 1 , dns_id );
258
255
@@ -488,8 +485,8 @@ static int dns_read(int sock,
488
485
result -> data , ret );
489
486
490
487
/* If the query matches to our hostname, then send reply */
491
- if (!strncasecmp (hostname , result -> data + 1 , hostname_len ) &&
492
- (result -> len - 1 ) >= hostname_len ) {
488
+ if (!strncasecmp (hostname , result -> data , hostname_len ) &&
489
+ (result -> len ) >= hostname_len ) {
493
490
NET_DBG ("%s query to our hostname %s" , "LLMNR" ,
494
491
hostname );
495
492
ret = send_response (sock , src_addr , addrlen , result , qtype ,
0 commit comments