1*d21b3d34SFangrui Song // RUN: %clangxx_msan -O0 %s -o %t && %run %t 2*d21b3d34SFangrui Song 3*d21b3d34SFangrui Song #include <sys/types.h> 4*d21b3d34SFangrui Song #include <sys/socket.h> 5*d21b3d34SFangrui Song #include <netdb.h> 6*d21b3d34SFangrui Song #include <stdlib.h> 7*d21b3d34SFangrui Song poison_stack_ahead()8*d21b3d34SFangrui Songvoid poison_stack_ahead() { 9*d21b3d34SFangrui Song char buf[100000]; 10*d21b3d34SFangrui Song // With -O0 this poisons a large chunk of stack. 11*d21b3d34SFangrui Song } 12*d21b3d34SFangrui Song main(void)13*d21b3d34SFangrui Songint main(void) { 14*d21b3d34SFangrui Song poison_stack_ahead(); 15*d21b3d34SFangrui Song 16*d21b3d34SFangrui Song struct addrinfo *ai; 17*d21b3d34SFangrui Song 18*d21b3d34SFangrui Song // This should trigger loading of libnss_dns and friends. 19*d21b3d34SFangrui Song // Those libraries are typically uninstrumented.They will call strlen() on a 20*d21b3d34SFangrui Song // stack-allocated buffer, which is very likely to be poisoned. Test that we 21*d21b3d34SFangrui Song // don't report this as an UMR. 22*d21b3d34SFangrui Song int res = getaddrinfo("not-in-etc-hosts", NULL, NULL, &ai); 23*d21b3d34SFangrui Song return 0; 24*d21b3d34SFangrui Song } 25