diff --git a/arch/x86/kernel/memory.c b/arch/x86/kernel/memory.c index 782df6c2..08c23cee 100644 --- a/arch/x86/kernel/memory.c +++ b/arch/x86/kernel/memory.c @@ -2278,6 +2278,9 @@ int read_process_vm(struct process_vm *vm, void *kdst, const void *usrc, size_t reason = PF_USER; /* page not present */ for (addr = ustart & PAGE_MASK; addr < uend; addr += PAGE_SIZE) { + if (!addr) + return -EINVAL; + error = page_fault_process_vm(vm, (void *)addr, reason); if (error) { kprintf("%s: error: PF for %p failed\n", __FUNCTION__, addr); diff --git a/kernel/syscall.c b/kernel/syscall.c index b3279588..1395d434 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -5674,6 +5674,10 @@ SYSCALL_DECLARE(sched_setaffinity) int empty_set = 1; extern int num_processors; + if (!u_cpu_set) { + return -EINVAL; + } + if (sizeof(k_cpu_set) > len) { memset(&k_cpu_set, 0, sizeof(k_cpu_set)); } @@ -5681,7 +5685,7 @@ SYSCALL_DECLARE(sched_setaffinity) len = MIN2(len, sizeof(k_cpu_set)); if (copy_from_user(&k_cpu_set, u_cpu_set, len)) { - kprintf("%s: error: copy_from_user failed for %p:%d\n", __FUNCTION__, u_cpu_set, len); + dkprintf("%s: error: copy_from_user failed for %p:%d\n", __FUNCTION__, u_cpu_set, len); return -EFAULT; }