From 2a2fc4dffe0117ce874a6cf1dcc34321ed8add77 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Wed, 25 Jan 2023 01:02:04 +0100 Subject: kernel/virt: replace the virt_cpy api with a more foolproof one --- src/kernel/mem/virt.h | 52 +++++++++------------------------------------------ 1 file changed, 9 insertions(+), 43 deletions(-) (limited to 'src/kernel/mem/virt.h') diff --git a/src/kernel/mem/virt.h b/src/kernel/mem/virt.h index 1f9ef14..fc35078 100644 --- a/src/kernel/mem/virt.h +++ b/src/kernel/mem/virt.h @@ -1,48 +1,14 @@ -/* contains utilities for interacting with virtual memory */ +// move this to proc.h, maybe? #pragma once #include -#include -#include #include -struct virt_iter { - void *frag; - size_t frag_len; - size_t prior; // sum of all prior frag_lens - bool error; +struct process; - void __user *_virt; - size_t _remaining; - struct pagedir *_pages; - bool _user; - bool _writeable; -}; - -struct virt_cpy_error { - bool read_fail, write_fail; -}; - -/* if pages == NULL, create an iterator over physical memory. */ -void virt_iter_new( - struct virt_iter *iter, void __user *virt, size_t length, - struct pagedir *pages, bool user, bool writeable); - -bool virt_iter_next(struct virt_iter *); - -size_t virt_cpy( - struct pagedir *dest_pages, void __user *dest, - struct pagedir *src_pages, const void __user *src, - size_t length, struct virt_cpy_error *err); - - -/* copies to virtual memory, returns true on success */ -static inline bool virt_cpy_to(struct pagedir *dest_pages, - void __user *dest, const void *src, size_t length) { - return length == virt_cpy(dest_pages, dest, NULL, (userptr_t)src, length, NULL); -} - -/* copies from virtual memory, returns true on success */ -static inline bool virt_cpy_from(struct pagedir *src_pages, - void *dest, const void __user *src, size_t length) { - return length == virt_cpy(NULL, (userptr_t)dest, src_pages, src, length, NULL); -} +size_t pcpy_to(struct process *p, __user void *dst, const void *src, size_t len); +size_t pcpy_from(struct process *p, void *dst, const __user void *src, size_t len); +size_t pcpy_bi( + struct process *dstp, __user void *dst, + struct process *srcp, const __user void *src, + size_t len +); -- cgit v1.2.3