seccomp.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // SPDX-License-Identifier: LGPL-2.1
  2. #ifndef SECCOMP_SET_MODE_STRICT
  3. #define SECCOMP_SET_MODE_STRICT 0
  4. #endif
  5. #ifndef SECCOMP_SET_MODE_FILTER
  6. #define SECCOMP_SET_MODE_FILTER 1
  7. #endif
  8. static size_t syscall_arg__scnprintf_seccomp_op(char *bf, size_t size, struct syscall_arg *arg)
  9. {
  10. bool show_prefix = arg->show_string_prefix;
  11. const char *prefix = "SECCOMP_SET_MODE_";
  12. int op = arg->val;
  13. size_t printed = 0;
  14. switch (op) {
  15. #define P_SECCOMP_SET_MODE_OP(n) case SECCOMP_SET_MODE_##n: printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n); break
  16. P_SECCOMP_SET_MODE_OP(STRICT);
  17. P_SECCOMP_SET_MODE_OP(FILTER);
  18. #undef P_SECCOMP_SET_MODE_OP
  19. default: printed = scnprintf(bf, size, "%#x", op); break;
  20. }
  21. return printed;
  22. }
  23. #define SCA_SECCOMP_OP syscall_arg__scnprintf_seccomp_op
  24. #ifndef SECCOMP_FILTER_FLAG_TSYNC
  25. #define SECCOMP_FILTER_FLAG_TSYNC 1
  26. #endif
  27. static size_t syscall_arg__scnprintf_seccomp_flags(char *bf, size_t size,
  28. struct syscall_arg *arg)
  29. {
  30. bool show_prefix = arg->show_string_prefix;
  31. const char *prefix = "SECCOMP_FILTER_FLAG_";
  32. int printed = 0, flags = arg->val;
  33. #define P_FLAG(n) \
  34. if (flags & SECCOMP_FILTER_FLAG_##n) { \
  35. printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
  36. flags &= ~SECCOMP_FILTER_FLAG_##n; \
  37. }
  38. P_FLAG(TSYNC);
  39. #undef P_FLAG
  40. if (flags)
  41. printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
  42. return printed;
  43. }
  44. #define SCA_SECCOMP_FLAGS syscall_arg__scnprintf_seccomp_flags