Check if 'cache' is a valid pointer before dereference it
Null pointer dereference occurs when
step1: thread#1 is waiting for DNS response from server.
step2: thread#2 is querying on the same hostname, which release
lock and enter waiting state.
step3: network disconnect.
Bug: b/124776120
Test: runtests.sh pass
Change-Id: I3ef1a2f06c4fd547fa3da4eed1a9152c3c55e704
diff --git a/resolv/res_cache.cpp b/resolv/res_cache.cpp
index d766baf..8d498ab 100644
--- a/resolv/res_cache.cpp
+++ b/resolv/res_cache.cpp
@@ -1502,6 +1502,9 @@
cache = find_named_cache_locked(netid);
return !cache_has_pending_request_locked(cache, &key, false);
});
+ if (!cache) {
+ return RESOLV_CACHE_NOTFOUND;
+ }
if (ret == false) {
resolv_cache_info* info = find_cache_info_locked(netid);
if (info != NULL) {