kernel: use logging for userspace errors
We want to use a single API for this in kernel code. Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
dc246fb1ca
commit
99b3f8617e
2 changed files with 18 additions and 20 deletions
|
@ -17,6 +17,7 @@
|
||||||
#include <kernel_internal.h>
|
#include <kernel_internal.h>
|
||||||
#include <kernel_structs.h>
|
#include <kernel_structs.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <logging/log.h>
|
||||||
|
|
||||||
extern const _k_syscall_handler_t _k_syscall_table[K_SYSCALL_LIMIT];
|
extern const _k_syscall_handler_t _k_syscall_table[K_SYSCALL_LIMIT];
|
||||||
|
|
||||||
|
@ -280,8 +281,9 @@ extern int z_user_string_copy(char *dst, const char *src, size_t maxlen);
|
||||||
#define Z_SYSCALL_VERIFY_MSG(expr, fmt, ...) ({ \
|
#define Z_SYSCALL_VERIFY_MSG(expr, fmt, ...) ({ \
|
||||||
bool expr_copy = !(expr); \
|
bool expr_copy = !(expr); \
|
||||||
if (expr_copy) { \
|
if (expr_copy) { \
|
||||||
printk("syscall %s failed check: " fmt "\n", \
|
LOG_MODULE_DECLARE(os); \
|
||||||
__func__, ##__VA_ARGS__); \
|
LOG_ERR("syscall %s failed check: " fmt, \
|
||||||
|
__func__, ##__VA_ARGS__); \
|
||||||
} \
|
} \
|
||||||
expr_copy; })
|
expr_copy; })
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include <kernel.h>
|
#include <kernel.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/math_extras.h>
|
#include <sys/math_extras.h>
|
||||||
#include <sys/printk.h>
|
|
||||||
#include <sys/rb.h>
|
#include <sys/rb.h>
|
||||||
#include <kernel_structs.h>
|
#include <kernel_structs.h>
|
||||||
#include <sys/sys_io.h>
|
#include <sys/sys_io.h>
|
||||||
|
@ -477,13 +476,10 @@ static int thread_perms_test(struct _k_object *ko)
|
||||||
static void dump_permission_error(struct _k_object *ko)
|
static void dump_permission_error(struct _k_object *ko)
|
||||||
{
|
{
|
||||||
int index = thread_index_get(_current);
|
int index = thread_index_get(_current);
|
||||||
printk("thread %p (%d) does not have permission on %s %p [",
|
LOG_ERR("thread %p (%d) does not have permission on %s %p",
|
||||||
_current, index,
|
_current, index,
|
||||||
otype_to_str(ko->type), ko->name);
|
otype_to_str(ko->type), ko->name);
|
||||||
for (int i = CONFIG_MAX_THREAD_BYTES - 1; i >= 0; i--) {
|
LOG_HEXDUMP_ERR(ko->perms, sizeof(ko->perms), "permission bitmap");
|
||||||
printk("%02x", ko->perms[i]);
|
|
||||||
}
|
|
||||||
printk("]\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void z_dump_object_error(int retval, void *obj, struct _k_object *ko,
|
void z_dump_object_error(int retval, void *obj, struct _k_object *ko,
|
||||||
|
@ -491,16 +487,16 @@ void z_dump_object_error(int retval, void *obj, struct _k_object *ko,
|
||||||
{
|
{
|
||||||
switch (retval) {
|
switch (retval) {
|
||||||
case -EBADF:
|
case -EBADF:
|
||||||
printk("%p is not a valid %s\n", obj, otype_to_str(otype));
|
LOG_ERR("%p is not a valid %s", obj, otype_to_str(otype));
|
||||||
break;
|
break;
|
||||||
case -EPERM:
|
case -EPERM:
|
||||||
dump_permission_error(ko);
|
dump_permission_error(ko);
|
||||||
break;
|
break;
|
||||||
case -EINVAL:
|
case -EINVAL:
|
||||||
printk("%p used before initialization\n", obj);
|
LOG_ERR("%p used before initialization", obj);
|
||||||
break;
|
break;
|
||||||
case -EADDRINUSE:
|
case -EADDRINUSE:
|
||||||
printk("%p %s in use\n", obj, otype_to_str(otype));
|
LOG_ERR("%p %s in use", obj, otype_to_str(otype));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* Not handled error */
|
/* Not handled error */
|
||||||
|
@ -636,7 +632,7 @@ void *z_user_alloc_from_copy(const void *src, size_t size)
|
||||||
|
|
||||||
dst = z_thread_malloc(size);
|
dst = z_thread_malloc(size);
|
||||||
if (dst == NULL) {
|
if (dst == NULL) {
|
||||||
printk("out of thread resource pool memory (%zu)", size);
|
LOG_ERR("out of thread resource pool memory (%zu)", size);
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -683,11 +679,11 @@ char *z_user_string_alloc_copy(const char *src, size_t maxlen)
|
||||||
}
|
}
|
||||||
if (actual_len == maxlen) {
|
if (actual_len == maxlen) {
|
||||||
/* Not NULL terminated */
|
/* Not NULL terminated */
|
||||||
printk("string too long %p (%zu)\n", src, actual_len);
|
LOG_ERR("string too long %p (%zu)", src, actual_len);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (size_add_overflow(actual_len, 1, &actual_len)) {
|
if (size_add_overflow(actual_len, 1, &actual_len)) {
|
||||||
printk("overflow\n");
|
LOG_ERR("overflow");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -716,12 +712,12 @@ int z_user_string_copy(char *dst, const char *src, size_t maxlen)
|
||||||
}
|
}
|
||||||
if (actual_len == maxlen) {
|
if (actual_len == maxlen) {
|
||||||
/* Not NULL terminated */
|
/* Not NULL terminated */
|
||||||
printk("string too long %p (%zu)\n", src, actual_len);
|
LOG_ERR("string too long %p (%zu)", src, actual_len);
|
||||||
ret = EINVAL;
|
ret = EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (size_add_overflow(actual_len, 1, &actual_len)) {
|
if (size_add_overflow(actual_len, 1, &actual_len)) {
|
||||||
printk("overflow\n");
|
LOG_ERR("overflow");
|
||||||
ret = EINVAL;
|
ret = EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -760,7 +756,7 @@ void z_app_shmem_bss_zero(void)
|
||||||
static u32_t handler_bad_syscall(u32_t bad_id, u32_t arg2, u32_t arg3,
|
static u32_t handler_bad_syscall(u32_t bad_id, u32_t arg2, u32_t arg3,
|
||||||
u32_t arg4, u32_t arg5, u32_t arg6, void *ssf)
|
u32_t arg4, u32_t arg5, u32_t arg6, void *ssf)
|
||||||
{
|
{
|
||||||
printk("Bad system call id %u invoked\n", bad_id);
|
LOG_ERR("Bad system call id %u invoked", bad_id);
|
||||||
z_arch_syscall_oops(_current_cpu->syscall_frame);
|
z_arch_syscall_oops(_current_cpu->syscall_frame);
|
||||||
CODE_UNREACHABLE; /* LCOV_EXCL_LINE */
|
CODE_UNREACHABLE; /* LCOV_EXCL_LINE */
|
||||||
}
|
}
|
||||||
|
@ -768,7 +764,7 @@ static u32_t handler_bad_syscall(u32_t bad_id, u32_t arg2, u32_t arg3,
|
||||||
static u32_t handler_no_syscall(u32_t arg1, u32_t arg2, u32_t arg3,
|
static u32_t handler_no_syscall(u32_t arg1, u32_t arg2, u32_t arg3,
|
||||||
u32_t arg4, u32_t arg5, u32_t arg6, void *ssf)
|
u32_t arg4, u32_t arg5, u32_t arg6, void *ssf)
|
||||||
{
|
{
|
||||||
printk("Unimplemented system call\n");
|
LOG_ERR("Unimplemented system call");
|
||||||
z_arch_syscall_oops(_current_cpu->syscall_frame);
|
z_arch_syscall_oops(_current_cpu->syscall_frame);
|
||||||
CODE_UNREACHABLE; /* LCOV_EXCL_LINE */
|
CODE_UNREACHABLE; /* LCOV_EXCL_LINE */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue