diff options
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r-- | kernel/bpf/syscall.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index b89288e2b589..13642c73dca0 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c | |||
@@ -536,14 +536,18 @@ static int map_get_next_key(union bpf_attr *attr) | |||
536 | if (IS_ERR(map)) | 536 | if (IS_ERR(map)) |
537 | return PTR_ERR(map); | 537 | return PTR_ERR(map); |
538 | 538 | ||
539 | err = -ENOMEM; | 539 | if (ukey) { |
540 | key = kmalloc(map->key_size, GFP_USER); | 540 | err = -ENOMEM; |
541 | if (!key) | 541 | key = kmalloc(map->key_size, GFP_USER); |
542 | goto err_put; | 542 | if (!key) |
543 | 543 | goto err_put; | |
544 | err = -EFAULT; | 544 | |
545 | if (copy_from_user(key, ukey, map->key_size) != 0) | 545 | err = -EFAULT; |
546 | goto free_key; | 546 | if (copy_from_user(key, ukey, map->key_size) != 0) |
547 | goto free_key; | ||
548 | } else { | ||
549 | key = NULL; | ||
550 | } | ||
547 | 551 | ||
548 | err = -ENOMEM; | 552 | err = -ENOMEM; |
549 | next_key = kmalloc(map->key_size, GFP_USER); | 553 | next_key = kmalloc(map->key_size, GFP_USER); |