From b988b821372466ed58eb1d2116bcbb158f70346c Mon Sep 17 00:00:00 2001 From: dzwdz Date: Tue, 24 Aug 2021 19:05:46 +0200 Subject: switch to using user_ptr for pointers coming from userland this avoid accidental dereferences, and now it's easy to tell apart which pointers are safe to directly read and which aren't. cons: - const is completely discarded --- src/kernel/fd.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/kernel/fd.c') diff --git a/src/kernel/fd.c b/src/kernel/fd.c index e99fb7d..c495c8c 100644 --- a/src/kernel/fd.c +++ b/src/kernel/fd.c @@ -3,9 +3,9 @@ #include #include -static int fdop_special_tty(enum fdop fdop, struct fd *fd, void *ptr, size_t len); +static int fdop_special_tty(enum fdop fdop, struct fd *fd, user_ptr ptr, size_t len); -int fdop_dispatch(enum fdop fdop, struct fd *fd, void *ptr, size_t len) { +int fdop_dispatch(enum fdop fdop, struct fd *fd, user_ptr ptr, size_t len) { switch(fd->type) { case FD_EMPTY: return -1; @@ -16,15 +16,14 @@ int fdop_dispatch(enum fdop fdop, struct fd *fd, void *ptr, size_t len) { } } -static int fdop_special_tty(enum fdop fdop, struct fd *fd, void *ptr, size_t len) { +static int fdop_special_tty(enum fdop fdop, struct fd *fd, user_ptr ptr, size_t len) { switch(fdop) { case FDOP_READ: return -1; // input not implemented yet case FDOP_WRITE: { struct virt_iter iter; - virt_iter_new(&iter, (void*)ptr, len, - process_current->pages, true, false); + virt_iter_new(&iter, ptr, len, process_current->pages, true, false); while (virt_iter_next(&iter)) tty_write(iter.frag, iter.frag_len); return iter.prior; -- cgit v1.2.3