selinux_warning.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #include <linux/types.h>
  2. #include <linux/atomic.h>
  3. #include <linux/mm.h>
  4. #include <linux/export.h>
  5. #include <linux/slab.h>
  6. #include <linux/err.h>
  7. #include <linux/kthread.h>
  8. #include <linux/audit.h>
  9. #include <net/sock.h>
  10. #include <net/netlink.h>
  11. #include <linux/skbuff.h>
  12. #include <linux/netlink.h>
  13. #include <linux/freezer.h>
  14. #include <linux/tty.h>
  15. #include <linux/platform_device.h>
  16. #include <linux/module.h>
  17. #include "selinux_warning.h"
  18. #ifdef CONFIG_MTK_AEE_FEATURE
  19. #include <mt-plat/aee.h>
  20. #endif
  21. #define PRINT_BUF_LEN 100
  22. const char *aee_filter_list[AEE_FILTER_NUM] = {
  23. /* "u:r:adbd:s0", */
  24. "u:r:bootanim:s0",
  25. "u:r:bluetooth:s0",
  26. "u:r:binderservicedomain:s0",
  27. /* "u:r:clatd:s0", */
  28. "u:r:dex2oat:s0",
  29. /* "u:r:debuggerd:s0", */
  30. "u:r:dhcp:s0",
  31. "u:r:dnsmasq:s0",
  32. "u:r:drmserver:s0",
  33. "u:r:dumpstate:s0",
  34. "u:r:gpsd:s0",
  35. "u:r:healthd:s0",
  36. "u:r:hci_attach:s0",
  37. "u:r:hostapd:s0",
  38. "u:r:inputflinger:s0",
  39. "u:r:installd:s0",
  40. "u:r:isolated_app:s0",
  41. "u:r:keystore:s0",
  42. "u:r:lmkd:s0",
  43. "u:r:mdnsd:s0",
  44. "u:r:logd:s0",
  45. /* "u:r:mediaserver:s0", */
  46. "u:r:mtp:s0",
  47. "u:r:netd:s0",
  48. "u:r:nfc:s0",
  49. "u:r:ppp:s0",
  50. /* "u:r:platform_app:s0", */
  51. "u:r:racoon:s0",
  52. /* "u:r:radio:s0", */
  53. "u:r:recovery:s0",
  54. "u:r:rild:s0",
  55. "u:r:runas:s0",
  56. "u:r:sdcardd:s0",
  57. /* "u:r:servicemanager:s0", */
  58. "u:r:shared_relro:s0",
  59. /* "u:r:shell:s0", */
  60. "u:r:system_app:s0",
  61. /* "u:r:system_server:s0", */
  62. "u:r:surfaceflinger:s0",
  63. "u:r:tee:s0",
  64. "u:r:uncrypt:s0",
  65. "u:r:watchdogd:s0",
  66. "u:r:wpa:s0",
  67. "u:r:ueventd:s0",
  68. "u:r:vold:s0",
  69. "u:r:vdc:s0",
  70. /* "u:r:untrusted_app:s0", */
  71. "u:r:zygote:s0",
  72. };
  73. static int mtk_check_filter(char *scontext);
  74. static int mtk_get_scontext(char *data, char *buf);
  75. static int mtk_check_filter(char *scontext)
  76. {
  77. int i = 0;
  78. /*check whether scontext in filter list */
  79. for (i = 0; i < AEE_FILTER_NUM && aee_filter_list[i] != NULL; i++) {
  80. if (strcmp(scontext, aee_filter_list[i]) == 0)
  81. return i;
  82. }
  83. return -1;
  84. }
  85. static int mtk_get_scontext(char *data, char *buf)
  86. {
  87. char *t1;
  88. char *t2;
  89. int diff = 0;
  90. t1 = strstr(data, "scontext=");
  91. if (t1 == NULL)
  92. return 0;
  93. t1 += 9;
  94. t2 = strchr(t1, ' ');
  95. if (t2 == NULL)
  96. return 0;
  97. diff = t2 - t1;
  98. strncpy(buf, t1, diff);
  99. return 1;
  100. }
  101. static char *mtk_get_process(char *in)
  102. {
  103. char *out = in;
  104. char *tmp;
  105. int i;
  106. /*Omit two ':' */
  107. for (i = 0; i < 2; i++) {
  108. out = strchr(out, ':');
  109. if (NULL == out)
  110. return 0;
  111. out = out + 1;
  112. }
  113. tmp = strchr(out, ':');
  114. if (tmp == NULL)
  115. return 0;
  116. *tmp = '\0';
  117. return out;
  118. }
  119. void mtk_audit_hook(char *data)
  120. {
  121. char scontext[AEE_FILTER_LEN] = { '\0' };
  122. char *pname = scontext;
  123. int ret = 0;
  124. /*get scontext from avc warning */
  125. ret = mtk_get_scontext(data, scontext);
  126. if (!ret)
  127. return;
  128. /*check scontext is in warning list */
  129. ret = mtk_check_filter(scontext);
  130. if (ret >= 0) {
  131. pr_warn("[selinux]Enforce: %d, In AEE Warning List scontext: %s\n",
  132. selinux_enforcing, scontext);
  133. pname = mtk_get_process(scontext);
  134. #ifdef CONFIG_MTK_AEE_FEATURE
  135. if (pname != 0) {
  136. char printbuf[PRINT_BUF_LEN] = { '\0' };
  137. sprintf(printbuf, "[SELINUX][WARNING]\nCR_DISPATCH_PROCESSNAME:%s\n", pname);
  138. if (selinux_enforcing) {
  139. aee_kernel_warning_api(__FILE__, __LINE__,
  140. DB_OPT_DEFAULT|DB_OPT_NATIVE_BACKTRACE, printbuf, data);
  141. }
  142. }
  143. #endif
  144. }
  145. }
  146. EXPORT_SYMBOL(mtk_audit_hook);