Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2015
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. /*
  2. * SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, size_t, count)
  3. */
  4. #include <stdlib.h>
  5. #include "arch.h" // page_size
  6. #include "maps.h"
  7. #include "random.h"
  8. #include "sanitise.h"
  9. #include "shm.h"
  10. #include "syscall.h"
  11. #include "trinity.h"
  12. #include "utils.h"
  13.  
  14. static void sanitise_write(struct syscallrecord *rec)
  15. {
  16. unsigned int size;
  17. void *ptr;
  18.  
  19. if (RAND_BOOL())
  20. size = 1;
  21. else
  22. size = rand() % page_size;
  23.  
  24. ptr = malloc(size);
  25. if (ptr == NULL)
  26. return;
  27.  
  28. generate_rand_bytes(ptr, size);
  29.  
  30. rec->a2 = (unsigned long) ptr;
  31. rec->a3 = size;
  32. }
  33.  
  34. static void post_write(struct syscallrecord *rec)
  35. {
  36. freeptr(&rec->a2);
  37. }
  38.  
  39. struct syscallentry syscall_write = {
  40. .name = "write",
  41. .num_args = 3,
  42. .arg1name = "fd",
  43. .arg1type = ARG_FD,
  44. .arg2name = "buf",
  45. .arg2type = ARG_NON_NULL_ADDRESS,
  46. .arg3name = "count",
  47. .arg3type = ARG_LEN,
  48. .flags = NEED_ALARM,
  49. .sanitise = sanitise_write,
  50. .post = post_write,
  51. };
  52.  
  53. /*
  54. * SYSCALL_DEFINE3(writev, unsigned long, fd, const struct iovec __user *, vec, unsigned long, vlen)
  55. */
  56.  
  57. struct syscallentry syscall_writev = {
  58. .name = "writev",
  59. .num_args = 3,
  60. .arg1name = "fd",
  61. .arg1type = ARG_FD,
  62. .arg2name = "vec",
  63. .arg2type = ARG_IOVEC,
  64. .arg3name = "vlen",
  65. .arg3type = ARG_IOVECLEN,
  66. .flags = NEED_ALARM,
  67. };
  68.  
  69.  
  70. /*
  71. * SYSCALL_DEFINE(pwrite64)(unsigned int fd, const char __user *buf, size_t count, loff_t po>
  72. */
  73.  
  74. static void sanitise_pwrite64(struct syscallrecord *rec)
  75. {
  76. sanitise_write(rec);
  77.  
  78. retry_pos:
  79. if ((int) rec->a4 < 0) {
  80. rec->a4 = rand64();
  81. goto retry_pos;
  82. }
  83. }
  84.  
  85. struct syscallentry syscall_pwrite64 = {
  86. .name = "pwrite64",
  87. .num_args = 4,
  88. .arg1name = "fd",
  89. .arg1type = ARG_FD,
  90. .arg2name = "buf",
  91. .arg2type = ARG_ADDRESS,
  92. .arg3name = "count",
  93. .arg3type = ARG_LEN,
  94. .arg4name = "pos",
  95. .flags = NEED_ALARM,
  96. .sanitise = sanitise_pwrite64,
  97. .post = post_write,
  98. };
  99.  
  100.  
  101. /*
  102. * SYSCALL_DEFINE5(pwritev, unsigned long, fd, const struct iovec __user *, vec,
  103. unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h)
  104. */
  105.  
  106. struct syscallentry syscall_pwritev = {
  107. .name = "pwritev",
  108. .num_args = 5,
  109. .arg1name = "fd",
  110. .arg1type = ARG_FD,
  111. .arg2name = "vec",
  112. .arg2type = ARG_IOVEC,
  113. .arg3name = "vlen",
  114. .arg3type = ARG_IOVECLEN,
  115. .arg4name = "pos_l",
  116. .arg5name = "pos_h",
  117. .flags = NEED_ALARM,
  118. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement