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

    <tr>
        <th>Summary</th>
        <td>
            [ASAN] why doesn't asan nesting vfork() 
        </td>
    </tr>

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

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

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

<pre>
    why doesn't asan nesting vfork() , using options -lpthread -fsanitize=address -fsanitize=undefined.
···
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <pthread.h>
#include <wait.h>

void *TestPopen(void *arg)
{
    printf("hello TestPopen.\n");
    pid_t pid = vfork();
    if (pid < 0) {
        printf("error vfork.\n");
    } else if (pid == 0) {
        printf("I'm child.\n");
        pid_t childPid = vfork();
        if (childPid < 0) {
            printf("error vfork.\n");
        } else if (childPid == 0) {
            // vfork a grand  processes
            printf("I'm grand child, and call exit(0).\n");
            _exit(0);
        } else {
            printf("I'm child vfork, and call exit(0).\n");
            _exit(0);
        }
    } else {
        // father Processes
        printf("I'm parent.\n");
    }
    while(1) {
       sleep(1);
    }
    return NULL;
}

int main()
{
    printf("hello\n");
    pthread_t tid;
    int ret = pthread_create(&tid, NULL, TestPopen, NULL);
    printf("create pthread ret %d.\n", ret);
    while(1) {
        sleep(1);
    }
    return 0;
}
···

asan couldn't hijack vfork()
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vs1u4zYQfprRhYghDSVLPujg2DVQYLEI0PbSS0CLI4u7NCmQVNLt0xeS7FjOWk5aoD7Q1vx8882MOGPhvToYohKyR8i2kehCY135Z0OmEeaQYMKjvZU_ytfmB5OWvAHMAxNeGGbIB2UO7KW27jtgAbhigBvW-V5q26Cs8exBt6FxJCR7qL0wKqi_CfhWSOnI-2thZyTVypBcQLyFeA0bhMf86hzlyJWpdCeJAd_4IJVdNMB_mdOacE-t1X5WTc6ZeezOKB_krPqU-Kz-VagrYsP5YpVkgOvfyYcn25IBLM4y4Q6Aq5N1_jj-YIyx1ikT6qEH2JDWlr25LyDbGEDsHfnURcnn0J8M-HbawysrVTPAYrTasHho8TTw--DknHUj2lxgyLeMtKcr7G1P4mP4XwHzI6sapeUc_CW3wezpgwQvSU7M5zL9D9neyHjKaz7twRF3gLsxABPs4ISRPQNbkffk75MbazX6DCH7uzk8CK0Z_aUCYNHHvke9_zxPbOdz-7BYk96du_H_8Lnxqv1E7lTZWoSGHHu6XdGf2bfCkQl33uzLw2ujNAEWya3uek3UnpTzEI5C5wz7-seXL29GbwbjqUxgR6HM6c3-xGSYGwfjrHoOLCh5PQJM6JkMt-hsVTkSgQbUZW-Pm5Elbthkbp2F7yJNGI04Z9gxDGaTu73pZe8R7pb239U2vlHYuaUznMPmq2yn5bgJG_VNVN-n4yWSJZcrvhIRlUmOKeerPI2jpuT1StIyE1WyT3lVx0WaprxGXBZLjDOZRqrEGNO4QEyyJOP5ouAFJXkqMkk1pYmENKajUHqh9ctxYd0hUt53VCZxtsyLSIs9aT-sckRDr2zQ9nXMtpEre6eHfXfwkMZa-eAvMEEFPfwHWP-2_grZln1y3Ued02UTQuuBr8c7dVCh6faLyh4Bd32A09dD6-w3qgLgbqDlAXcn3i8l_hMAAP__zyFQDg">