<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/59007>59007</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            AddressSanitizer:DEADLYSIGNAL in getaddrinfo() when compiled with clang-15 with "-nodefaultlibs" without "-lresolv"
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          mmatrosov
      </td>
    </tr>
</table>

<pre>
    The following code
```
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>

int main() {
  addrinfo hints = {};
  addrinfo* res;
  getaddrinfo("api.binance.com", nullptr, &hints, &res);
  printf("%s\n", inet_ntoa(reinterpret_cast<sockaddr_in*>(res->ai_addr)->sin_addr));
  freeaddrinfo(res);
  return 0;
}
```
compiled with
```
clang-15 -fsanitize=address test.cpp -nodefaultlibs -lgcc_eh -lc -lm -lpthread -ldl
```
produces the following error:
```
$ ./a.out
AddressSanitizer:DEADLYSIGNAL
=================================================================
==1010333==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x000000000000 bp 0x7ffd91eac050 sp 0x7ffd91eab808 T0)
==1010333==Hint: pc points to the zero page.
==1010333==The signal is caused by a READ memory access.
==1010333==Hint: address points to the zero page.
    #0 0x0  (<unknown module>)
    #1 0x7f5bab6b6805 in gaih_getanswer_slice /build/glibc-SzIz7B/glibc-2.31/resolv/nss_dns/dns-host.c:1147:8

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (<unknown module>)
==1010333==ABORTING
```

If `-lresolv` option is added, it works as expected:

```
$ clang-15 -fsanitize=address test.cpp -nodefaultlibs -lgcc_eh -lc -lm -lpthread -ldl -lresolv -o b.out && ./b.out
13.32.142.177
```
It also works as expected if I use `clang-14` instead of `clang-15`.

This is a very practical issue, because it is reproduced when using python's `requests` module with dynamically loaded sanitizer runtime (necessary when using sanitized python extensions):
```
$ LD_PRELOAD=$(clang++-15 -print-file-name=libclang_rt.asan-x86_64.so) python -c 'import requests
print(requests.get("https://api.binance.com/"))'
AddressSanitizer:DEADLYSIGNAL
=================================================================
==919440==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x000000000000 bp 0x7ffe180677c0 sp 0x7ffe18066f78 T0)
==919440==Hint: pc points to the zero page.
==919440==The signal is caused by a READ memory access.
==919440==Hint: address points to the zero page.
    #0 0x0  (<unknown module>)
    #1 0x7f3048604805 in gaih_getanswer_slice /build/glibc-SzIz7B/glibc-2.31/resolv/nss_dns/dns-host.c:1147:8

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (<unknown module>)
==919440==ABORTING
```

More info:
```
$ ldd ./a.out # this one crashes
        linux-vdso.so.1 (0x00007ffc6537a000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f77efcbf000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f77efb70000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f77efb4d000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f77efb47000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f77f0930000)

$ ldd ./b.out # this one does not crash
        linux-vdso.so.1 (0x00007ffde1385000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f15e3c18000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f15e3ac9000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f15e3aa6000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f15e3aa0000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f15e3a84000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f15e488c000)

$ clang-15 --version
Ubuntu clang version 15.0.4-++20221031075612+08bd84e8a635-1~exp1~20221031075700.87
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

$ python --version
Python 3.8.10

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:        20.04
Codename:       focal
```

I posted the same bug at https://github.com/google/sanitizers/issues/1592, because I am not sure if it is related to sanitizers or clang-15.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlGNlu4zbwa-QXQoLu48EPzjrZBsjuFklaoE8GRVE2uzSpklSO_foOKdmWHSd7oFugaGBb1MxwLs7F1LJ5nt9vKGol5_KRiTUisqFeuPTChZeH42d4jRMmCO8birzkHVYd9uIrJqgJNl5yeY4GcE39Klabhskp1v0yYdAWM-HFpRdXyCsuBjhCuGkUE61EG6DRwGHpsMXSS17QePECKaonmDU1BySwjnHHgpoJLAgNiNwCxIvfIdFz3hlll16cO0nj2rKLqwnHDpiZdmDmxZn2sndi5GK9shJGgodKRYGMqk4BiGBtrOWSfLbKrKyZC-sAS6Z9WGG2shiQZN80E7vXY9mtonRizgvdQFivBAr3IOumc4cKlneM0wY9MrM5T8GxWPtRhvxWY8EM-0LB9VY41RoZqk1Aug75AuKmxT03nNUa-XxNyIpuYEHgu4VvZzYKlIZVw89K6pRsekKB6VFAUqWk8pLFK0GZogDiEAeyNwNoMah2Nyprty4vF8ubP-6u339c3Iz7kuV__jMxJAqjMEmS4eXy9vbTLViNzngC3V2-_x1JgXrxWchHgXYHGT6Fkz8I-LIjp8C6A0jRtk0VUUzCLER6CqnLsET3oY3E11T7BXLBagG8O-nS2Eh33KCdRB1e0-DVvbZMabYWmCOmEcG9hrCtnxFGt3C8aEu3UsEbgQjSr3PZabCz-201EPxB1QqtJ-yqhOzdeW4L0cqpy97qiDpyPslqXOd1XoYZlAO0xmyzsjVI6EeqVpozAkUwvqp7xht4riFriH_35foLlLTdaxwkEbyAnpI_wEJovWoEpPoV_PobaVMPbImitIBHOS2jp0cP_hJISANVSz4wKMBgP2Ck8yYUkdHeu98-fFjc_vFm8HzNC2ecvrj4dHt__fH9-RR2v9ctAojPR2PzEMnO6mfPGnSljaurBj1K9RkgGtGnjhID8H1leK0-_JQKhnaqIl-i2lYf2yTg48pRfShHURIkcRCl8C2KszpeG4S5li9NQ6xF1wji3LpmtCK1rmFCG6uIbCeYDJbB1BX3G_CddR96oJAZncLEMOLSR_fU-rOmLo2sX4FO0bECQzfYUCgR2pbf7tlsJPSpQltZiv7Vg8O01WI4etc5UPMs8NYy58-ISwznhfQ-9lQvDNvaeC8FtemJQZ2JiB1lMwoDBxgqNJz-0NZeP9qb5erX28ubTwtXEOMUJDhveDFk0YU7c9em_RaanA8q2pO3uWWJVsoEGGT7T2W-ytNASztxjCr4BNQt2LaTyqC91WOfsjXEdt0BGkBeD2PAxphOW33jK9uTTieMKzceuFYeF__fZlVFVZqG_1KvolEZ5kVBDr3KQfK2ONOrppp9Z6uabv3hTnVO_k9vVEmYljl8_6eNaurzb-hTH6SiTpG3yhJvmsNUaj0NZwaRIAVFRGG9oXrHsuJM9E_-Q6Ml1J8gskoPkQyRSvIsKTCsDyrbDTWxpDlyOl_awwEY_A5lzB84rkU_IHbEB75FQVtSty_5br-H7_Ys37oIX_Id-6bdEH4j9-MtJzLS5qWMhlva-BvZ76lPORcnnAfyPLXPZuQCLH3XLk4ZtGGVnJh_GhH1y4hoJFx5bMS70PimwGholJTZPx4YUUYTAtXxnw4MyxeT6qcGhpOB858QGAPnM2E9lLvv4X6040RCmf546AGDtCzJ-dA7jL8-zIF2qhpwv9UwlvUDGo0YFGVBGKT-MD_FYRzDFB-FRZZHMLlchGXdlCktcZ5kfuQVlzCp2seEEBIoKMfh5h4rOxpBPR7d0ZGJR8YZ1U3UUJwpd91WavY0jsUw5MI8SZslczUd_NBrZXOIiVMbd0PbsYW_DtAkKIMofJGRul4pyimG-dfHA_yjRDd3F2OrgMEZSj1-wIzjmu8a7ZJpo1jdG6nQ9dI1gWrw5Iinmijmri5TJIrDIEyDDN3c3w2Et4PsgchhB_g7cMUwqFpEK2GmfuvaZD1mrwp2KNCwDdX9GmGDjkfRNczofT1OoWsp19AJ46v9hG47tbsU2EWUVfH0cnCN8NbVJ93b1tfubwscO8HyMOlDQVP7eAtmdB7leZklWVFls2aeNFVS4ZlhhtP5VwZfN4qc_MuuGu4MR_-yOkS3e4MB-_gaBwCHGapuvL9fxvGsV3z-hpc4f9g94A4h_4Qb2dRLGZSzYraZ05IkaVYmRRVnVdUWYZRWCYxWDU5JGeN4BsFDuZ57GWRULOjj7vYVe9lyxuYudaIog7JbZVlAqrws4jaPmjxtaZJ7aUi3EIGB1SOQaj1Tc6cSHLMGJGf2ArJHYm3nTkqdOOCPezBdzbdbbJTU8mHmhM-d8n8DiTVPtA">