platform-tracing.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Copyright (c) 2016 Darren Tucker. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #include "includes.h"
  17. #include <sys/types.h>
  18. #if defined(HAVE_SYS_PRCTL_H)
  19. #include <sys/prctl.h> /* For prctl() and PR_SET_DUMPABLE */
  20. #endif
  21. #ifdef HAVE_SYS_PTRACE_H
  22. #include <sys/ptrace.h>
  23. #endif
  24. #ifdef HAVE_PRIV_H
  25. #include <priv.h> /* For setpflags() and __PROC_PROTECT */
  26. #endif
  27. #include <stdarg.h>
  28. #include "log.h"
  29. void
  30. platform_disable_tracing(int strict)
  31. {
  32. #if defined(HAVE_PRCTL) && defined(PR_SET_DUMPABLE)
  33. /* Disable ptrace on Linux without sgid bit */
  34. if (prctl(PR_SET_DUMPABLE, 0) != 0 && strict)
  35. fatal("unable to make the process undumpable");
  36. #endif
  37. #if defined(HAVE_SETPFLAGS) && defined(__PROC_PROTECT)
  38. /* On Solaris, we should make this process untraceable */
  39. if (setpflags(__PROC_PROTECT, 1) != 0 && strict)
  40. fatal("unable to make the process untraceable");
  41. #endif
  42. #ifdef PT_DENY_ATTACH
  43. /* Mac OS X */
  44. if (ptrace(PT_DENY_ATTACH, 0, 0, 0) == -1 && strict)
  45. fatal("unable to set PT_DENY_ATTACH");
  46. #endif
  47. }