Has anyone ended up in __stack_chk_fail() from nxsig_nanosleep()?

I am running ostest on tiva and consistently getting a panic in the
"priority_inheritance: Restoration Test" (priority_inheritance() in
apps/testing/ostest/prioinherit.c).

It always happens in the same place:

The above-mentioned function creates 3 tasks called Task0, Task1,
Task2; grep for NUMBER_OF_COMPETING_THREADS to find the place where
these three tasks are started.

The task main function is adversary() in the same file; adversary()
looks like this:

static int adversary(int argc, FAR char *argv[])
{
  int index        = atoi(argv[1]);
  int inital_delay = atoi(argv[2]);
  int hold_delay   = atoi(argv[3]);

  sleep_and_display(index, inital_delay);
  printf("priority_inheritance: "
         "%s Started, waiting %d uS to take count\n", argv[0], inital_delay);
  sem_wait(&g_sem);
  sleep_and_display(index,  hold_delay);
  sem_post(&g_sem);
  printf("priority_inheritance: %s Posted\n", argv[0]);
  sleep_and_display(index, 0);
  return 0;
}

It runs sleep_and_display(), which calls usleep(), which eventually
calls nxsig_nanosleep(). When nxsig_nanosleep() finishes and wants to
return, the stack smashing protection kicks in and we end up in
__stack_chk_fail(). I think this is happening in Task2() or is in some
way connected to context switching between Task2() and another task
due to the sleep.

So far I can't seem to figure out why.

Thanks,
Nathan

Reply via email to