diff --git a/libs/libc/netdb/lib_dnsquery.c b/libs/libc/netdb/lib_dnsquery.c index 45c984396c..7b749f7b9f 100644 --- a/libs/libc/netdb/lib_dnsquery.c +++ b/libs/libc/netdb/lib_dnsquery.c @@ -334,6 +334,7 @@ static int dns_recv_response(int sd, FAR union dns_addr_u *addr, int naddr, FAR struct dns_answer_s *ans; FAR struct dns_header_s *hdr; FAR struct dns_question_s *que; + struct dns_question_s bak; uint16_t nquestions; uint16_t nanswers; uint16_t temp; @@ -437,12 +438,13 @@ static int dns_recv_response(int sd, FAR union dns_addr_u *addr, int naddr, /* Validate query type and class */ que = (FAR struct dns_question_s *)nameptr; + memcpy(&bak, que, sizeof(struct dns_question_s)); /* N.B. Unaligned access may occur here */ temp = HTONS(DNS_CLASS_IN); - if (memcmp(&que->type, &qinfo->rectype, sizeof(uint16_t)) != 0 || - memcmp(&que->class, &temp, sizeof(uint16_t)) != 0) + if (memcmp(&bak.type, &qinfo->rectype, sizeof(uint16_t)) != 0 || + memcmp(&bak.class, &temp, sizeof(uint16_t)) != 0) { nerr("ERROR: DNS response with wrong question\n"); return -EBADMSG;