susfs.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #ifndef KSU_SUSFS_H
  2. #define KSU_SUSFS_H
  3. #include <linux/version.h>
  4. #include <linux/types.h>
  5. #include <linux/utsname.h>
  6. #include <linux/hashtable.h>
  7. #include <linux/path.h>
  8. #include <linux/susfs_def.h>
  9. #define SUSFS_VERSION "v1.5.5"
  10. #if LINUX_VERSION_CODE < KERNEL_VERSION(5,0,0)
  11. #define SUSFS_VARIANT "NON-GKI"
  12. #else
  13. #define SUSFS_VARIANT "GKI"
  14. #endif
  15. /*********/
  16. /* MACRO */
  17. /*********/
  18. #define getname_safe(name) (name == NULL ? ERR_PTR(-EINVAL) : getname(name))
  19. #define putname_safe(name) (IS_ERR(name) ? NULL : putname(name))
  20. /**********/
  21. /* STRUCT */
  22. /**********/
  23. /* sus_path */
  24. #ifdef CONFIG_KSU_SUSFS_SUS_PATH
  25. struct st_susfs_sus_path {
  26. unsigned long target_ino;
  27. char target_pathname[SUSFS_MAX_LEN_PATHNAME];
  28. };
  29. struct st_susfs_sus_path_hlist {
  30. unsigned long target_ino;
  31. char target_pathname[SUSFS_MAX_LEN_PATHNAME];
  32. struct hlist_node node;
  33. };
  34. #endif
  35. /* sus_mount */
  36. #ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
  37. struct st_susfs_sus_mount {
  38. char target_pathname[SUSFS_MAX_LEN_PATHNAME];
  39. unsigned long target_dev;
  40. };
  41. struct st_susfs_sus_mount_list {
  42. struct list_head list;
  43. struct st_susfs_sus_mount info;
  44. };
  45. #endif
  46. /* sus_kstat */
  47. #ifdef CONFIG_KSU_SUSFS_SUS_KSTAT
  48. struct st_susfs_sus_kstat {
  49. int is_statically;
  50. unsigned long target_ino; // the ino after bind mounted or overlayed
  51. char target_pathname[SUSFS_MAX_LEN_PATHNAME];
  52. unsigned long spoofed_ino;
  53. unsigned long spoofed_dev;
  54. unsigned int spoofed_nlink;
  55. long long spoofed_size;
  56. long spoofed_atime_tv_sec;
  57. long spoofed_mtime_tv_sec;
  58. long spoofed_ctime_tv_sec;
  59. long spoofed_atime_tv_nsec;
  60. long spoofed_mtime_tv_nsec;
  61. long spoofed_ctime_tv_nsec;
  62. unsigned long spoofed_blksize;
  63. unsigned long long spoofed_blocks;
  64. };
  65. struct st_susfs_sus_kstat_hlist {
  66. unsigned long target_ino;
  67. struct st_susfs_sus_kstat info;
  68. struct hlist_node node;
  69. };
  70. #endif
  71. /* try_umount */
  72. #ifdef CONFIG_KSU_SUSFS_TRY_UMOUNT
  73. struct st_susfs_try_umount {
  74. char target_pathname[SUSFS_MAX_LEN_PATHNAME];
  75. int mnt_mode;
  76. };
  77. struct st_susfs_try_umount_list {
  78. struct list_head list;
  79. struct st_susfs_try_umount info;
  80. };
  81. #endif
  82. /* spoof_uname */
  83. #ifdef CONFIG_KSU_SUSFS_SPOOF_UNAME
  84. struct st_susfs_uname {
  85. char release[__NEW_UTS_LEN+1];
  86. char version[__NEW_UTS_LEN+1];
  87. };
  88. #endif
  89. /* open_redirect */
  90. #ifdef CONFIG_KSU_SUSFS_OPEN_REDIRECT
  91. struct st_susfs_open_redirect {
  92. unsigned long target_ino;
  93. char target_pathname[SUSFS_MAX_LEN_PATHNAME];
  94. char redirected_pathname[SUSFS_MAX_LEN_PATHNAME];
  95. };
  96. struct st_susfs_open_redirect_hlist {
  97. unsigned long target_ino;
  98. char target_pathname[SUSFS_MAX_LEN_PATHNAME];
  99. char redirected_pathname[SUSFS_MAX_LEN_PATHNAME];
  100. struct hlist_node node;
  101. };
  102. #endif
  103. /* sus_su */
  104. #ifdef CONFIG_KSU_SUSFS_SUS_SU
  105. struct st_sus_su {
  106. int mode;
  107. };
  108. #endif
  109. /***********************/
  110. /* FORWARD DECLARATION */
  111. /***********************/
  112. /* sus_path */
  113. #ifdef CONFIG_KSU_SUSFS_SUS_PATH
  114. int susfs_add_sus_path(struct st_susfs_sus_path* __user user_info);
  115. int susfs_sus_ino_for_filldir64(unsigned long ino);
  116. #endif
  117. /* sus_mount */
  118. #ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
  119. int susfs_add_sus_mount(struct st_susfs_sus_mount* __user user_info);
  120. #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT
  121. int susfs_auto_add_sus_bind_mount(const char *pathname, struct path *path_target);
  122. #endif // #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT
  123. #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT
  124. void susfs_auto_add_sus_ksu_default_mount(const char __user *to_pathname);
  125. #endif // #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT
  126. #endif // #ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
  127. /* sus_kstat */
  128. #ifdef CONFIG_KSU_SUSFS_SUS_KSTAT
  129. int susfs_add_sus_kstat(struct st_susfs_sus_kstat* __user user_info);
  130. int susfs_update_sus_kstat(struct st_susfs_sus_kstat* __user user_info);
  131. void susfs_sus_ino_for_generic_fillattr(unsigned long ino, struct kstat *stat);
  132. void susfs_sus_ino_for_show_map_vma(unsigned long ino, dev_t *out_dev, unsigned long *out_ino);
  133. #endif
  134. /* try_umount */
  135. #ifdef CONFIG_KSU_SUSFS_TRY_UMOUNT
  136. int susfs_add_try_umount(struct st_susfs_try_umount* __user user_info);
  137. void susfs_try_umount(uid_t target_uid);
  138. #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT
  139. void susfs_auto_add_try_umount_for_bind_mount(struct path *path);
  140. #endif // #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT
  141. #endif // #ifdef CONFIG_KSU_SUSFS_TRY_UMOUNT
  142. /* spoof_uname */
  143. #ifdef CONFIG_KSU_SUSFS_SPOOF_UNAME
  144. int susfs_set_uname(struct st_susfs_uname* __user user_info);
  145. void susfs_spoof_uname(struct new_utsname* tmp);
  146. #endif
  147. /* set_log */
  148. #ifdef CONFIG_KSU_SUSFS_ENABLE_LOG
  149. void susfs_set_log(bool enabled);
  150. #endif
  151. /* spoof_cmdline_or_bootconfig */
  152. #ifdef CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG
  153. int susfs_set_cmdline_or_bootconfig(char* __user user_fake_boot_config);
  154. int susfs_spoof_cmdline_or_bootconfig(struct seq_file *m);
  155. #endif
  156. /* open_redirect */
  157. #ifdef CONFIG_KSU_SUSFS_OPEN_REDIRECT
  158. int susfs_add_open_redirect(struct st_susfs_open_redirect* __user user_info);
  159. struct filename* susfs_get_redirected_path(unsigned long ino);
  160. #endif
  161. /* sus_su */
  162. #ifdef CONFIG_KSU_SUSFS_SUS_SU
  163. int susfs_get_sus_su_working_mode(void);
  164. int susfs_sus_su(struct st_sus_su* __user user_info);
  165. #endif
  166. /* susfs_init */
  167. void susfs_init(void);
  168. #endif