diff options
author | Marvin Borner | 2021-04-25 16:31:40 +0200 |
---|---|---|
committer | Marvin Borner | 2021-04-25 16:31:40 +0200 |
commit | 0fe14a1ff936c38ab9aa7f85219d0c155d276823 (patch) | |
tree | b3e4b1f9000819a564656fabf0496f871c1e6eba /kernel/inc | |
parent | f2b4acb2fe6a366288b19843e0d2678b8590bdf4 (diff) |
Added range-based memory validator
Diffstat (limited to 'kernel/inc')
-rw-r--r-- | kernel/inc/fs.h | 6 | ||||
-rw-r--r-- | kernel/inc/mm.h | 8 |
2 files changed, 8 insertions, 6 deletions
diff --git a/kernel/inc/fs.h b/kernel/inc/fs.h index 8dbf028..329af21 100644 --- a/kernel/inc/fs.h +++ b/kernel/inc/fs.h @@ -20,7 +20,7 @@ struct vfs_dev { struct vfs *vfs; void *data; res (*read)(void *buf, u32 offset, u32 count, struct vfs_dev *dev) NONNULL; - res (*write)(void *buf, u32 offset, u32 count, struct vfs_dev *dev) NONNULL; + res (*write)(const void *buf, u32 offset, u32 count, struct vfs_dev *dev) NONNULL; res (*ioctl)(u32 request, void *arg1, void *arg2, void *arg3, struct vfs_dev *dev) ATTR((nonnull(5))); }; @@ -38,7 +38,7 @@ struct vfs { void *data; res (*read)(const char *path, void *buf, u32 offset, u32 count, struct vfs_dev *dev) NONNULL; - res (*write)(const char *path, void *buf, u32 offset, u32 count, + res (*write)(const char *path, const void *buf, u32 offset, u32 count, struct vfs_dev *dev) NONNULL; res (*ioctl)(const char *path, u32 request, void *arg1, void *arg2, void *arg3, struct vfs_dev *dev) ATTR((nonnull(1, 6))); @@ -62,7 +62,7 @@ void vfs_add_dev(struct vfs_dev *dev) NONNULL; // No NONNULL on syscalls res vfs_read(const char *path, void *buf, u32 offset, u32 count); -res vfs_write(const char *path, void *buf, u32 offset, u32 count); +res vfs_write(const char *path, const void *buf, u32 offset, u32 count); res vfs_stat(const char *path, struct stat *buf); struct vfs_dev *device_get_by_name(const char *name) NONNULL; diff --git a/kernel/inc/mm.h b/kernel/inc/mm.h index dc28a8d..e912fec 100644 --- a/kernel/inc/mm.h +++ b/kernel/inc/mm.h @@ -116,7 +116,7 @@ struct memory_proc_link { #define MEMORY_USER (1 << 0) #define MEMORY_CLEAR (1 << 1) #define MEMORY_READONLY (1 << 2) -#define memory_range(base, size) ((struct memory_range){ (base), (size) }) +#define memory_range(base, size) ((struct memory_range){ (u32)(base), (size) }) struct memory_range memory_range_from(u32 base, u32 size); struct memory_range memory_range_around(u32 base, u32 size); @@ -135,8 +135,10 @@ void memory_bypass_disable(void); // No NONNULL on verification (for syscalls etc) u8 memory_is_user(const void *addr); -u8 memory_readable(const void *addr); -u8 memory_writable(const void *addr); +u8 memory_readable_range(struct memory_range vrange); +u8 memory_writable_range(struct memory_range vrange); +#define memory_readable(addr) memory_readable_range(memory_range((addr), 1)) +#define memory_writable(addr) memory_writable_range(memory_range((addr), 1)) // User interface - No NONNULL on syscalls res memory_sys_alloc(struct page_dir *dir, u32 size, u32 *addr, u32 *id, u8 shared); |