<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/148917>148917</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missing ASAN Interceptor for `mempcpy`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mvanotti
</td>
</tr>
</table>
<pre>
It looks like there's no ASAN interceptor for `mempcpy`.
Typically, by default clang will treat `mempcpy` as a built-in function, and replace it by `memcpy`, which would then be replaced by `__asan_memcpy`.
However, if the user specifies a flag like `-std=c++20`, `mempcpy` will no longer be treated as a built-in and will not get any kind of asan instrumentation.
The following C++ program crashes when compiled with `-O0 -fsanitize=address` but fails when compiled with `-O0 -fsanitize=address -std=c++20`
```c++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buffer[1024] = {0};
int main(void) {
void* data = malloc(1020);
mempcpy(data, buffer, 1024);
free(data);
return 0;
}
```
[See in godbolt][godbolt-example]
[godbolt-example]: https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGIM6SuADJ4DJgAcj4ARpjEEgEADqgKhE4MHt6%2B/qRJKY4CIWGRLDFxXAF2mA5pQgRMxAQZPn5ctpj2%2BQy19QSFEdGxegp1DU1ZrcM9fcWlEgCUtqhexMjsHOYAzKHI3lgA1CYbbsP4qAB0CIfYJhoAgpvbu5gHRye0eFEXVzf3ZlsMOy8%2B0OxwIxFCwC%2BG2udx%2ByAQ9T2US8VCosRMAFYLFwNGZJJiACIvIkmADsFg0ZIJhyssLuoQIexYTFCEAAbqg8Og5gdyT89gK9hyuQAqPboJh1YlMsS0VDICA4swaOY0/mCtgsBLIBIATwgErqpCRKLRZD2Sskqo2tNugr2VGImEwBslTGttvtToIywYe0pNp%2BVI4C1onAxvD8HC0pFQnDc1msewUSxWz02PFIBE0IYWAGt/AA2M4ADgAnH8yyWSxsMbWSxjSfpOJJIznY5xeAoQBoszmFnBYDBEChUFq6LFyJQ0OP6HEdoZgAB9MFeBh5vh0AixbsQKLtqKheq6ziZw/MYi6gDyUW0VWz3F4M7YgivDFoJ%2BjvCwyOAbll3aPqQWDMkY4hfsBeBOtUbKYIBMaYKoVReNu7YMu07bvFExDHh4WDtmCeAsKevCwcQUTJJgBKYKBwDvEY/Z8AYwAKAAangmAAO5XgkjAkTIggiGI7BSAJ8hKGo7a6K0BgMaYljWPoHzdpACyoAknSAQAtFeGh7FpVAKIYqQAF6YIcBJMOg6BOgoCi8KgZHglgKkQAsCSGBErBrOEqDJgQ6AOsxXbtPeaQuAw7ieM0ejBKE/QlIMrS5KkAhjC0OTJKlDDTAMZRtB0NQjI00XjAVYUCN0DS5Yl%2BWTKMpUZfVvTxTMSULCmyyrPMzYcBGpBRjGcYcL5/mBVQwV9l%2BcwLAgmBWYMbmkAWGxmGcpIllwpKkpIGhcBsGyFrt0hhhwrakMRGK9oNDmdrYPZTVoA7DhASBLAQCQoVOEAzgkE7EOE3mcKoJaFlpR17AuRh7BAq7rnMvCYPgRDOXo/CCaI4iiej4kqOoEHSaQnE4QkJGhuGbYQcNV4oZ9jKoFQewg2DENQ8AMNw3mPIQB4s6xAcfxcAjj25qQc0LXES2nedl3Xe2w1dg9D5PfmIC1mcGKSBi5a1jiSqFoWGK9RslNDXdyshqQg5QC9SC/f93323OKCycunObrQ27ELu%2B4Qeex78f7l43neDj8c%2BjAEG%2BH7tj%2BXh/gB/EgYu4Exvg0GOLB8GI0hyAoWsMboadMZYThl54QXvCEcRQFkRRSjUbR9GgNNTFMCx7FcTxfFATjQlY9IOOKHjUnZK7KCJpYSlRK5akaWk2m6fphnGY4ZkWVZNlwQo%2BknBZ8lWJYyp7A5TlcnB8DuZ5gNsCAe8bASB/WMq5XVM4ECuOlsWRTVszJVlnQv7/zyGkX%2BSVX6dCqiVTITVQpvy6MVMBdVipANsIg1qeUeqdTTD1U6/Ubodnvo/SeFgX4WxmstEAkhJAay1mYMwdZJCkjMIWKQJ0Wy8FlgNeWd1uy9nIVbW2IB3p00dmOP6c4b5rGZuDSQkNXYc2IGuLmiNkYkC5GjWQ/cRKD1kMPSSBNsjEyYKTR85M%2Bqm1uhwGmH0UJ7AZkzUGsj5GLkUco7mvMJH802GYYW5DZrzSwJLcxMsQBXW4VTXhSt%2Byqw2KSDWrDSQaFJIbLWGxqzG0sR2DgVcYm9TMFkhWIsKFkRSM4SQQA%3D
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUV1uvsjrX_TWsG_KscBS5WBflKCAqgiLe7HCoBSkHKQj467_gWs_-9t7Z75u8iYllzjFmxxw0tI0JKVAN4RclKpSofcRDnzfdV_WM66bvi4-kyeYvq6dx05SExkUJ6T6HHaQ4idB1QwMf7Oii7mGXwrZvOvrWdDS1YipYtWk7Uyvmk2IAxYBgbos0xnimOJVOZjqDt3jAPZ3iuEb0WGBM9x2M-7-T6ZjQMZ0MBe5_FTV9G-q0L5p6qRHXGd3BFscppIt-KfnN_CYuiDEv0pwemwFni-iaTuBvRvaD_-OPmMT1H3_SfsRumhE-YbcUKW4Llx4I7GjSwrS4FXDRdMMx-vaDWjG_SJ9RvJZSnEJxCsf8CPh7K-8e64bGTY1gt4h5NwyzfzS5NPaD7WkEezquZ7os6oxubvQily5q0ndDBes-Xtz47XAO6VuDcTMWNaLVby102zWoiys67WKSQ0KPixFpU7UFhss8ff5uYM_Qv24krou-eEGK1-Is6yAhi-5k6OlbXOD_lUv_mytvpcvg_ftJLSGOL-oUDxmkKV4lfVY0nznF6_-WwkXyn3JdUaM_cwxI87ijk-F2gx0lKizDCZSo0RSv0ZSkMJSkUbzyjSzqnq7ioqa49bMpMoqTFwjFAJqm6e8IoLO4j9_sKsa4SSluzTIcQ3Hyd5kF-vt9c-sF_F7r39NzKv2e_6_gWwfhn8i_xDvYD11NMz_qJO2vnv1YKCo-hHRR06jJkgb3lKhRovLz8AtOcdViuAR_w_8lxQM67_uWUDygOIPijB_MZ9Ohd4B_UTzYR1uUA0N5ZKKnTiAaD5HiqpVyzJQtMFhPTUF80FXgvkald4EEvNHoXU-ZwRHJTu9FOphJkTDeBajTWlGA0yh1AMAJbNoRuE9gRIHf24jVLNACNQLeEA0llq8gGDXnngHTOPXAEYhpuSt_AJotaDYC6V0Ax_au60gH2gM5uS64m35FceKypozH0XYiQbVC87jVjOkCDK4CYuuhozsB73qoxbRv79wb7s2s7PmGnpkTRC2rndhrl7ryLQ2xjtRT_8jh5N7JZh-Bl7OxeIwAq0ZJQg7CAyiMat0iO28Aap_JIKLNcYYMNPTL-XXjr5i4-3n9nobZT6M1Geqovh9Nbsim92gGnhxwJ399VhtydIERbY1xZ15tuwCq9bTKCmjEQMzVsvOZkO3QeBacosBQdQCSB1rvkYiyOVjLyJHzefDA45A0ds5G2CU-c9YsFQhkjPcRQ3FGpfaIKFtLsUAwIr17tOrR2R6vGueT8tFw_W5AHXc2rUofFYIDs--ffdBY8xhBpt21b8lnS1DZpgbTU1tvVKY1vFpL2YrA8eRP4YvhDoal6IwVhcDsKc4AgHMFoCFQb9bzHPoTcZPQn-7-rd3btvWqI3GCoPGUhrwqo1YiTdHV_GQ8Vltjtj1mf1ht9Ky5IqDIrgGVXHzmDCimhHjOtn84OXysXsV1pDjDjYoV0uZTyJzDF28IrhSh4qkZjf1Wfn-q47wHCcZ8fHh4oeaWkZDfiAKVfX9KnMhS3DhymvMR7gYpcgdGSp6GPmmbXAi1vlIhIA58qmPqnQLbRooTOcqoPfWI4ozrGkQjcACIa1QBsBcvqLyDMrAQKkxLUnxgr3PHbKR45TAKcuMI38NDs3llLVDnBpS1DzzQG9DMJaM9A8eKHh4wVpGVKra7Rytljxq1WDvoukEYOaUHiOqbit4p3V5_aDbyVmBPpkvSH2DsDWCUCugy8K44OsUZHrbczhedEuR3ldkHtoM1LQDu9dgrzM67WwxzuYNzdFJ3jOaLEX47FgaO256ut_MzmALXP23Vap67g_uKUsVslePdTKN0Ky5LSzl741n-pqXjFqBKCSM3qUoQmlNlpq2F8dg6ZWuZeaoQcza6nsnzfOzi0j2ajtzstCrrosM1ODdA0nLgK1vgqV5z3uvghUpd0vc6X6VOY8cGbo-sBIZjLingIXW1-1SjAzpq-0tDcYaqxpZQFPAulI99o2_82Kt1wSttMx_MJPLS3VlorvLdaQwPjojT9J23Bu5u5KuD5SkCWU0gvU0puN858eGlzPai-1wNM8xfIDeyGZI18XCrLJWtUtPxlUKM2XvhP4wmNB35SPBOu2QzyR8eEj1V9lWKM24yz3P83lHndKj3Sedxkr4d3n4JHoSTtL5JWOBrqN3X6fd6Bbr5Hmyk_v4eXPLlU7185HQUDYI-PRFj7rfK2rSYfAZNSNykiTP3GgU5FgXv8lT19OgZ5fHo30_JUTbRbhcYrjpJRhpMNwMEdw9HsrXfO5v7qb46kqPabeTjoyPGZRyWXLW6tXltRsK1DM_XHR695i2lrJXrGod2NLcSEAOc1spaG64i2hEVwHUC_EVm6D7Ey9kVdHXYYxIegzN52Wdce0-J4ozXbJaXdzX_fFll6qM4B1Zw9trnvHLPrpKdixbsiIXYBzzBRxYEGntaUZxxSpqsfi6v2ocGugjhVJFeB2Vug3hmq8gds6utlnfXCh3PZsJ5bWC0g2HGDrNcW-ck5CyFbxkmq_aHVSokYmdeB833yt0lSjnLHLZVsSujUhXNe-hRnJEeHY0t3YPvKzty1-fICY5r0X2Lf1TskI9mtWFOtgSu5etkkrtobstT2kjV07U3a4YzoygUtWv38kd7m04u8ZRLKJyDS-7331vBY-QcXws7zfdiw7aSbWhOj5fJkCOnoXMaVXLgGmUeWsQxyqPvCr7nAYoT-Z-d_iP74jOZl-MP-MVKIrdieH7Ff-RfWSavoAxTLpOTTGBuyYplbpIgpKzIprK0-ii-OIYTGYkV2TW7YvjPhOVSMVvfeClJJV6WKYGBVVzgT4yf1XJG-CgIGeAXK6xlVvrAcQIx-X2R6L4W1K9kQIQSGFyQnvw_ry96DL_cgpDlqPq-Q1j_7Q7xMXT46x9HlaLPh-QzbSqKM5bCP3-_2q65w3TZc97qCMUZPwKfX9z_BQAA___bWyDo">