Cleans up tests/
[akaros.git] / kern / include / umem.h
index 77396fc..fa17d26 100644 (file)
@@ -8,12 +8,19 @@
 #include <ros/common.h>
 #include <process.h>
 
+/* Is this a valid user pointer for read/write?  It doesn't care if the address
+ * is paged out or even an unmapped region: simply if it is in part of the
+ * address space that could be RW user.  Will also check for len bytes. */
+static inline bool is_user_rwaddr(void *addr, size_t len);
+/* Same deal, but read-only */
+static inline bool is_user_raddr(void *addr, size_t len);
+
 /* Can they use the area in the manner of perm? */
 void *user_mem_check(struct proc *p, const void *DANGEROUS va, size_t len,
-                     int perm);
+                     size_t align, int perm);
 /* Kills them if they can't use the area in the manner of perm */
 void *user_mem_assert(struct proc *p, const void *DANGEROUS va, size_t len, 
-                      int perm);
+                      size_t align, int perm);
 
 /* Copy from proc p into the kernel's dest from src */
 int memcpy_from_user(struct proc *p, void *dest, const void *DANGEROUS va,
@@ -34,6 +41,26 @@ void *user_memdup(struct proc *p, const void *va, int len);
 void *user_memdup_errno(struct proc *p, const void *va, int len);
 void user_memdup_free(struct proc *p, void *va);
 /* Same as memdup, but just does strings.  still needs memdup_freed */
-char *user_strdup(struct proc *p, const char *va0, int max);
-char *user_strdup_errno(struct proc *p, const char *va, int max);
+char *user_strdup(struct proc *p, const char *u_string, size_t strlen);
+char *user_strdup_errno(struct proc *p, const char *u_string, size_t strlen);
 void *kmalloc_errno(int len);
+bool uva_is_kva(struct proc *p, void *uva, void *kva);
+uintptr_t uva2kva(struct proc *p, void *uva);
+
+/* UWLIM is defined as virtual address below which a process can write */
+static inline bool is_user_rwaddr(void *addr, size_t len)
+{
+       if (((uintptr_t)addr < UWLIM) && ((uintptr_t)addr + len <= UWLIM))
+               return TRUE;
+       else
+               return FALSE;
+}
+
+/* ULIM is defined as virtual address below which a process can read */
+static inline bool is_user_raddr(void *addr, size_t len)
+{
+       if (((uintptr_t)addr < ULIM) && ((uintptr_t)addr + len <= ULIM))
+               return TRUE;
+       else
+               return FALSE;
+}