change errno to error to avoid confusion
This commit is contained in:
@@ -12,21 +12,21 @@ struct syscall_ret arch_archctl(uintptr_t op, uintptr_t arg) {
|
|||||||
switch (op) {
|
switch (op) {
|
||||||
case __ARCHCTL_SET_FSBASE:
|
case __ARCHCTL_SET_FSBASE:
|
||||||
if (!arch_mem_addr_is_user(arg)) {
|
if (!arch_mem_addr_is_user(arg)) {
|
||||||
ret.errno = EINVAL;
|
ret.error = EINVAL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
asm_wrmsr(MSR_FS_BASE, arg);
|
asm_wrmsr(MSR_FS_BASE, arg);
|
||||||
return ret;
|
return ret;
|
||||||
case __ARCHCTL_SET_GSBASE:
|
case __ARCHCTL_SET_GSBASE:
|
||||||
if (!arch_mem_addr_is_user(arg)) {
|
if (!arch_mem_addr_is_user(arg)) {
|
||||||
ret.errno = EINVAL;
|
ret.error = EINVAL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
// Update the inactive GSBASE MSR, not ours.
|
// Update the inactive GSBASE MSR, not ours.
|
||||||
asm_wrmsr(MSR_KERNEL_GS_BASE, arg);
|
asm_wrmsr(MSR_KERNEL_GS_BASE, arg);
|
||||||
return ret;
|
return ret;
|
||||||
default:
|
default:
|
||||||
ret.errno = EINVAL;
|
ret.error = EINVAL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
struct syscall_ret {
|
struct syscall_ret {
|
||||||
uintptr_t value;
|
uintptr_t value;
|
||||||
int errno;
|
int error;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct syscall {
|
struct syscall {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#ifndef SYSCALL_DECLARE
|
#ifndef SYSCALL_DECLARE
|
||||||
#define SYSCALL_DECLARE(number, name, num_args) extern void sys_##name(...);
|
#define SYSCALL_DECLARE(number, name, num_args)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SYSCALL_DECLARE(0, exit, 1)
|
SYSCALL_DECLARE(0, exit, 1)
|
||||||
|
|||||||
+2
-1
@@ -8,6 +8,7 @@
|
|||||||
#include <bits/sched.h>
|
#include <bits/sched.h>
|
||||||
|
|
||||||
// Declare all syscalls.
|
// Declare all syscalls.
|
||||||
|
#define SYSCALL_DECLARE(number, name, num_args) extern void sys_##name(...);
|
||||||
#include <zinnia/syscall_list.inc>
|
#include <zinnia/syscall_list.inc>
|
||||||
#undef SYSCALL_DECLARE
|
#undef SYSCALL_DECLARE
|
||||||
|
|
||||||
@@ -43,5 +44,5 @@ void syscall_dispatch(struct arch_context* ctx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx->ARCH_CTX_RET0 = ret.value;
|
ctx->ARCH_CTX_RET0 = ret.value;
|
||||||
ctx->ARCH_CTX_RET1 = ret.errno;
|
ctx->ARCH_CTX_RET1 = ret.error;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
struct syscall_ret sys_exit(int err) {
|
struct syscall_ret sys_exit(int err) {
|
||||||
struct syscall_ret ret = {};
|
struct syscall_ret ret = {};
|
||||||
|
|
||||||
ret.errno = ENOSYS;
|
ret.error = ENOSYS;
|
||||||
|
|
||||||
panic("sys::exit() not implemented!\n");
|
panic("sys::exit() not implemented!\n");
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -20,7 +20,7 @@ struct syscall_ret sys_setuname(const __user struct __utsname* ptr) {
|
|||||||
struct syscall_ret ret = {};
|
struct syscall_ret ret = {};
|
||||||
|
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
ret.errno = EINVAL;
|
ret.error = EINVAL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ struct syscall_ret sys_setuname(const __user struct __utsname* ptr) {
|
|||||||
|
|
||||||
struct __utsname read_buf;
|
struct __utsname read_buf;
|
||||||
if (!usercopy_read(&read_buf, ptr, sizeof(read_buf))) {
|
if (!usercopy_read(&read_buf, ptr, sizeof(read_buf))) {
|
||||||
ret.errno = EFAULT;
|
ret.error = EFAULT;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ struct syscall_ret sys_getuname(__user struct __utsname* ptr) {
|
|||||||
struct syscall_ret ret = {};
|
struct syscall_ret ret = {};
|
||||||
|
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
ret.errno = EINVAL;
|
ret.error = EINVAL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ struct syscall_ret sys_getuname(__user struct __utsname* ptr) {
|
|||||||
spin_unlock(&uname_lock);
|
spin_unlock(&uname_lock);
|
||||||
|
|
||||||
if (!usercopy_write(ptr, &write_buf, sizeof(write_buf)))
|
if (!usercopy_write(ptr, &write_buf, sizeof(write_buf)))
|
||||||
ret.errno = EFAULT;
|
ret.error = EFAULT;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user