sched_setaffinity(): error handling for invalid input
This commit is contained in:
@@ -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 */
|
reason = PF_USER; /* page not present */
|
||||||
for (addr = ustart & PAGE_MASK; addr < uend; addr += PAGE_SIZE) {
|
for (addr = ustart & PAGE_MASK; addr < uend; addr += PAGE_SIZE) {
|
||||||
|
if (!addr)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
error = page_fault_process_vm(vm, (void *)addr, reason);
|
error = page_fault_process_vm(vm, (void *)addr, reason);
|
||||||
if (error) {
|
if (error) {
|
||||||
kprintf("%s: error: PF for %p failed\n", __FUNCTION__, addr);
|
kprintf("%s: error: PF for %p failed\n", __FUNCTION__, addr);
|
||||||
|
|||||||
@@ -5674,6 +5674,10 @@ SYSCALL_DECLARE(sched_setaffinity)
|
|||||||
int empty_set = 1;
|
int empty_set = 1;
|
||||||
extern int num_processors;
|
extern int num_processors;
|
||||||
|
|
||||||
|
if (!u_cpu_set) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
if (sizeof(k_cpu_set) > len) {
|
if (sizeof(k_cpu_set) > len) {
|
||||||
memset(&k_cpu_set, 0, sizeof(k_cpu_set));
|
memset(&k_cpu_set, 0, sizeof(k_cpu_set));
|
||||||
}
|
}
|
||||||
@@ -5681,7 +5685,7 @@ SYSCALL_DECLARE(sched_setaffinity)
|
|||||||
len = MIN2(len, sizeof(k_cpu_set));
|
len = MIN2(len, sizeof(k_cpu_set));
|
||||||
|
|
||||||
if (copy_from_user(&k_cpu_set, u_cpu_set, len)) {
|
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;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user