Handle pending signals even when resuming current_uthread
[akaros.git] / kern / include / umem.h
index 416a3c3..13269d2 100644 (file)
 
 /* 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 */
-static inline bool is_user_rwaddr(void *addr);
-
-/* 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);
-/* 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);
+ * 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);
 
 /* Copy from proc p into the kernel's dest from src */
 int memcpy_from_user(struct proc *p, void *dest, const void *DANGEROUS va,
@@ -45,8 +40,20 @@ void *kmalloc_errno(int len);
 bool uva_is_kva(struct proc *p, void *uva, void *kva);
 uintptr_t uva2kva(struct proc *p, void *uva);
 
-/* UTOP is defined as virtual address below which a process can write */
-static inline bool is_user_rwaddr(void *addr)
+/* 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)
 {
-       return ((uintptr_t)addr < UTOP) ? TRUE : FALSE;
+       if (((uintptr_t)addr < ULIM) && ((uintptr_t)addr + len <= ULIM))
+               return TRUE;
+       else
+               return FALSE;
 }