brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 0340241 Raw
74 lines · c
1// RUN: %clang_analyze_cc1 -analyzer-checker=core,security.SetgidSetuidOrder -analyzer-output=text -verify %s2 3typedef int uid_t;4typedef int gid_t;5 6int setuid(uid_t);7int setgid(gid_t);8 9uid_t getuid();10gid_t getgid();11 12 13 14void test_note_1() {15  if (setuid(getuid()) == -1) // expected-note{{Assuming the condition is false}} \16                              // expected-note{{Taking false branch}}17    return;18  if (setuid(getuid()) == -1) // expected-note{{Call to 'setuid' found here that removes superuser privileges}} \19                              // expected-note{{Assuming the condition is false}} \20                              // expected-note{{Taking false branch}}21    return;22  if (setgid(getgid()) == -1) // expected-warning{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}} \23                              // expected-note{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}}24    return;25}26 27void test_note_2() {28  if (setuid(getuid()) == -1) // expected-note{{Call to 'setuid' found here that removes superuser privileges}} \29                              // expected-note 2 {{Assuming the condition is false}} \30                              // expected-note 2 {{Taking false branch}}31    return;32  if (setgid(getgid()) == -1) // expected-warning{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}} \33                              // expected-note{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}} \34                              // expected-note{{Assuming the condition is false}} \35                              // expected-note{{Taking false branch}}36    return;37  if (setuid(getuid()) == -1) // expected-note{{Call to 'setuid' found here that removes superuser privileges}} \38                              // expected-note{{Assuming the condition is false}} \39                              // expected-note{{Taking false branch}}40    return;41  if (setgid(getgid()) == -1) // expected-warning{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}} \42                              // expected-note{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}}43    return;44}45 46int f_setuid() {47  return setuid(getuid()); // expected-note{{Call to 'setuid' found here that removes superuser privileges}}48}49 50int f_setgid() {51  return setgid(getgid()); // expected-warning{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}} \52                           // expected-note{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}}53}54 55void test_note_3() {56  if (f_setuid() == -1) // expected-note{{Assuming the condition is false}} \57                        // expected-note{{Calling 'f_setuid'}} \58                        // expected-note{{Returning from 'f_setuid'}} \59                        // expected-note{{Taking false branch}}60    return;61  if (f_setgid() == -1) // expected-note{{Calling 'f_setgid'}}62    return;63}64 65void test_note_4() {66  if (setuid(getuid()) == 0) {   // expected-note{{Assuming the condition is true}} \67                                 // expected-note{{Call to 'setuid' found here that removes superuser privileges}} \68                                 // expected-note{{Taking true branch}}69    if (setgid(getgid()) == 0) { // expected-warning{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}} \70                                 // expected-note{{A 'setgid(getgid())' call following a 'setuid(getuid())' call is likely to fail}}71    }72  }73}74