setuid.c revision c58a43648cd6121c51a2e795a28e2ef90d7813e6
1cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s 2c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// 3c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// setuid(0) hangs on powerpc64 big endian. When this is fixed remove 4c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// the unsupported flag. 5c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// https://llvm.org/bugs/show_bug.cgi?id=25799 6c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// 7c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// UNSUPPORTED: powerpc64-unknown-linux-gnu 8cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar#include "test.h" 9cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar#include <sys/types.h> 10cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar#include <unistd.h> 11cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar 12cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// Setuid call used to hang because the background tsan thread did not handle 13cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// SIGSETXID signal. Note that we don't care whether setuid call succeeds 14cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// or not. 15cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar 16cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainarstatic void *thread(void *arg) { 17cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar (void)arg; 18cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar sleep(1); 19cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar return 0; 20cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar} 21cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar 22cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainarint main() { 23cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar // Create another thread just for completeness of the picture. 24cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar pthread_t th; 25cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar pthread_create(&th, 0, thread, 0); 26cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar setuid(0); 27cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar pthread_join(th, 0); 28cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar fprintf(stderr, "DONE\n"); 29cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar return 0; 30cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar} 31cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar 32cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// CHECK: DONE 33