Advertisement
ItsTotallyRSX

Consider implement better mm abstraction within linux fork

Nov 27th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. /*
  2. Purpose: Unfuck Linux memory management
  3. Author: Reece W. (2018)
  4. License: All Rights Reserved J. Reece Wilson, released under MIT
  5. */
  6.  
  7. typedef void * virtual_context_h;
  8. typedef void * virtual_reserve_h;
  9. typedef void * mmu_ctx_h;
  10.  
  11. #define LM_ACCESS_READ (1 << 0)
  12. #define LM_ACCESS_READ_WRITE (1 << 1)
  13. #define LM_ACCESS_READ_WRITE_EXECUTE (1 << 2)
  14.  
  15. enum lm_error_e
  16. {
  17. LM_ERROR_SUCCESS,
  18. LM_ERROR_LINUX_FAULT,
  19. LM_ERROR_NO_PERMISSION,
  20. LM_ERROR_ARCH_NOT_SUPPORTED,
  21. LM_ERROR_NOT_IMPLEMENTED,
  22. LM_ERROR_BUFFER_OVERFLOW,
  23. LM_ERROR_BUFFER_NOT_COMMITED,
  24. LM_ERROR_NO_MAP_EXISTS,
  25. LM_ERROR_MAP_ALREADY_EXISTS,
  26. LM_ERROR_CONTEXT_ALREADY_CREATED
  27. };
  28.  
  29. enum lm_cache_e
  30. {
  31. LM_CACHE_NO_CACHE,
  32. LM_CACHE_WRITECOMBINED,
  33. LM_CACHE_DEVICE
  34. };
  35.  
  36. lm_error_e lm_helper_pagelen ();
  37.  
  38. // Allocate virtual address spaces
  39. lm_error_e lm_mmu_get_kernel (mmu_ctx_h *);
  40. lm_error_e lm_mmu_get_usermode (struct task_struct *, mmu_ctx_h *);
  41.  
  42. lm_error_e lm_addresses_reserve (mmu_ctx_h, size_t length, virtual_reserve_h * ctx);
  43. lm_error_e lm_addresses_reserve_ex (mmu_ctx_h, size_t address, size_t length, virtual_reserve_h * ctx);
  44. int lm_addresses_get_start (virtual_reserve_h reserve);
  45. int lm_addresses_get_end (virtual_reserve_h reserve);
  46. int lm_addresses_get_length (virtual_reserve_h reserve);
  47. lm_error_e lm_addresses_allocate (virtual_reserve_h reserve, size_t pg_offset, size_t length, virtual_context_h *);
  48.  
  49. // Setup context
  50. lm_error_e lm_virtual_set_x86_cache (virtual_context_h, enum page_cache_mode pcm);
  51. lm_error_e lm_virtual_set_cache (virtual_context_h, lm_cache_e cache);
  52. lm_error_e lm_virtual_set_prot (virtual_context_h, size_t prot);
  53. lm_error_e lm_virtual_set_page (virtual_context_h, size_t pg_offset, struct page * page);
  54. lm_error_e lm_virtual_commit (virtual_context_h);
  55.  
  56. lm_error_e lm_free_context (virtual_context_h);
  57. lm_error_e lm_free_address (virtual_reserve_h);
  58. lm_error_e lm_free_mmu (mmu_ctx_h);
  59.  
  60. enum lm_direction_e
  61. {
  62. LM_DIRECTION_READ,
  63. LM_DIRECTION_WRITE
  64. };
  65.  
  66. struct lm_access_request_s
  67. {
  68. mmu_ctx_h mmu;
  69. size_t virtual_address;
  70. lm_direction_e direction;
  71. union
  72. {
  73. void * read;
  74. const void * write;
  75. void * buffer;
  76. };
  77. size_t length;
  78. };
  79.  
  80. lm_error_e lm_access_memory(lm_access_request_s *);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement