[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
DNS endianness
From: |
Andrei Borzenkov |
Subject: |
DNS endianness |
Date: |
Mon, 22 Sep 2014 20:53:25 +0400 |
This does not sound right ...
static grub_err_t
recv_hook (grub_net_udp_socket_t sock __attribute__ ((unused)),
struct grub_net_buff *nb,
void *data_)
{
...
head = (struct dns_header *) nb->data;
...
for (i = 0; i < grub_cpu_to_be16 (head->qdcount); i++)
{
We sure want to convert *to* cpu, not *from* cpu here? Same in all
other places in this function.
Do I miss something obvious here? Or how about patch below?
diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c
index 0b771fb..9d0c8fc 100644
--- a/grub-core/net/dns.c
+++ b/grub-core/net/dns.c
@@ -262,7 +262,7 @@ recv_hook (grub_net_udp_socket_t sock __attribute__
((unused)),
grub_netbuff_free (nb);
return GRUB_ERR_NONE;
}
- for (i = 0; i < grub_cpu_to_be16 (head->qdcount); i++)
+ for (i = 0; i < grub_be_to_cpu16 (head->qdcount); i++)
{
if (ptr >= nb->tail)
{
@@ -277,7 +277,7 @@ recv_hook (grub_net_udp_socket_t sock __attribute__
((unused)),
ptr += 4;
}
*data->addresses = grub_malloc (sizeof ((*data->addresses)[0])
- * grub_cpu_to_be16 (head->ancount));
+ * grub_be_to_cpu16 (head->ancount));
if (!*data->addresses)
{
grub_errno = GRUB_ERR_NONE;
@@ -286,7 +286,7 @@ recv_hook (grub_net_udp_socket_t sock __attribute__
((unused)),
}
reparse_ptr = ptr;
reparse:
- for (i = 0, ptr = reparse_ptr; i < grub_cpu_to_be16 (head->ancount); i++)
+ for (i = 0, ptr = reparse_ptr; i < grub_be_to_cpu16 (head->ancount); i++)
{
int ignored = 0;
grub_uint8_t class;
- DNS endianness,
Andrei Borzenkov <=