* [PATCH] net: don't free uninitialized sockets in dns @ 2015-08-18 18:03 Josef Bacik 2015-08-19 16:36 ` Andrei Borzenkov 0 siblings, 1 reply; 4+ messages in thread From: Josef Bacik @ 2015-08-18 18:03 UTC (permalink / raw) To: kernel-team, grub-devel; +Cc: Josef Bacik If we cannot open a connection to our dns server we will have NULL sockets in our array, so don't do the cleanup on any sockets that didn't get created. Signed-off-by: Josef Bacik <jbacik@fb.com> --- grub-core/net/dns.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c index 9d0c8fc..c356318 100644 --- a/grub-core/net/dns.c +++ b/grub-core/net/dns.c @@ -601,7 +601,10 @@ grub_net_dns_lookup (const char *name, grub_free (data.name); grub_netbuff_free (nb); for (j = 0; j < send_servers; j++) - grub_net_udp_close (sockets[j]); + { + if (sockets[j]) + grub_net_udp_close (sockets[j]); + } grub_free (sockets); -- 1.8.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] net: don't free uninitialized sockets in dns 2015-08-18 18:03 [PATCH] net: don't free uninitialized sockets in dns Josef Bacik @ 2015-08-19 16:36 ` Andrei Borzenkov 2015-10-10 7:03 ` Andrei Borzenkov 0 siblings, 1 reply; 4+ messages in thread From: Andrei Borzenkov @ 2015-08-19 16:36 UTC (permalink / raw) To: The development of GNU GRUB, kernel-team; +Cc: Josef Bacik [-- Attachment #1: Type: text/plain, Size: 874 bytes --] 18.08.2015 21:03, Josef Bacik пишет: > If we cannot open a connection to our dns server we will have NULL sockets in > our array, so don't do the cleanup on any sockets that didn't get created. > We can avoid having holes to start with. Could you test attached patch? > Signed-off-by: Josef Bacik <jbacik@fb.com> > --- > grub-core/net/dns.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c > index 9d0c8fc..c356318 100644 > --- a/grub-core/net/dns.c > +++ b/grub-core/net/dns.c > @@ -601,7 +601,10 @@ grub_net_dns_lookup (const char *name, > grub_free (data.name); > grub_netbuff_free (nb); > for (j = 0; j < send_servers; j++) > - grub_net_udp_close (sockets[j]); > + { > + if (sockets[j]) > + grub_net_udp_close (sockets[j]); > + } > > grub_free (sockets); > > [-- Attachment #2: dns-null-free.patch --] [-- Type: text/x-patch, Size: 1812 bytes --] From: Andrei Borzenkov <arvidjaar@gmail.com> Subject: [PATCH] net: avoid closing NULL socket in DNS lookup Refactor code so that we do not store NULL pointers in array of in-flight DNS servers. Reported-By: Josef Bacik <jbacik@fb.com> --- grub-core/net/dns.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c index 9d0c8fc..953f3be 100644 --- a/grub-core/net/dns.c +++ b/grub-core/net/dns.c @@ -437,7 +437,7 @@ grub_net_dns_lookup (const char *name, struct recv_data data = {naddresses, addresses, cache, grub_cpu_to_be16 (id++), 0, 0, name, 0}; grub_uint8_t *nbd; - int have_server = 0; + grub_size_t try_server = 0; if (!servers) { @@ -543,33 +543,31 @@ grub_net_dns_lookup (const char *name, for (i = 0; i < n_servers * 4; i++) { /* Connect to a next server. */ - while (!(i & 1) && send_servers < n_servers) + while (!(i & 1) && try_server < n_servers) { - sockets[send_servers] = grub_net_udp_open (servers[send_servers], + sockets[send_servers] = grub_net_udp_open (servers[try_server++], DNS_PORT, recv_hook, &data); - send_servers++; - if (!sockets[send_servers - 1]) + if (!sockets[send_servers]) { err = grub_errno; grub_errno = GRUB_ERR_NONE; } else { - have_server = 1; + send_servers++; break; } } - if (!have_server) + if (!send_servers) goto out; if (*data.naddresses) goto out; for (j = 0; j < send_servers; j++) { grub_err_t err2; - if (!sockets[j]) - continue; + nb->data = nbd; grub_size_t t = 0; -- tg: (ba218c1..) u/dns-NULL-dereference (depends on: master) ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] net: don't free uninitialized sockets in dns 2015-08-19 16:36 ` Andrei Borzenkov @ 2015-10-10 7:03 ` Andrei Borzenkov 2015-10-12 15:02 ` Josef Bacik 0 siblings, 1 reply; 4+ messages in thread From: Andrei Borzenkov @ 2015-10-10 7:03 UTC (permalink / raw) To: Josef Bacik; +Cc: The development of GNU GRUB, kernel-team ping? 19.08.2015 19:36, Andrei Borzenkov пишет: > 18.08.2015 21:03, Josef Bacik пишет: >> If we cannot open a connection to our dns server we will have NULL >> sockets in >> our array, so don't do the cleanup on any sockets that didn't get >> created. >> > > We can avoid having holes to start with. Could you test attached patch? > >> Signed-off-by: Josef Bacik <jbacik@fb.com> >> --- >> grub-core/net/dns.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c >> index 9d0c8fc..c356318 100644 >> --- a/grub-core/net/dns.c >> +++ b/grub-core/net/dns.c >> @@ -601,7 +601,10 @@ grub_net_dns_lookup (const char *name, >> grub_free (data.name); >> grub_netbuff_free (nb); >> for (j = 0; j < send_servers; j++) >> - grub_net_udp_close (sockets[j]); >> + { >> + if (sockets[j]) >> + grub_net_udp_close (sockets[j]); >> + } >> >> grub_free (sockets); >> >> > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] net: don't free uninitialized sockets in dns 2015-10-10 7:03 ` Andrei Borzenkov @ 2015-10-12 15:02 ` Josef Bacik 0 siblings, 0 replies; 4+ messages in thread From: Josef Bacik @ 2015-10-12 15:02 UTC (permalink / raw) To: Andrei Borzenkov; +Cc: The development of GNU GRUB, kernel-team On 10/10/2015 03:03 AM, Andrei Borzenkov wrote: > ping? Oops sorry forgot to tell you this patch worked as well. Thanks, Josef ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-10-12 15:03 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-08-18 18:03 [PATCH] net: don't free uninitialized sockets in dns Josef Bacik 2015-08-19 16:36 ` Andrei Borzenkov 2015-10-10 7:03 ` Andrei Borzenkov 2015-10-12 15:02 ` Josef Bacik
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).