aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/bpf/syscall.c7
-rw-r--r--kernel/bpf/verifier.c2
2 files changed, 8 insertions, 1 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index 85cbeec06e50..f9554d9a14e1 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -1452,9 +1452,14 @@ static int bpf_prog_load(union bpf_attr *attr, union bpf_attr __user *uattr)
1452 if (CHECK_ATTR(BPF_PROG_LOAD)) 1452 if (CHECK_ATTR(BPF_PROG_LOAD))
1453 return -EINVAL; 1453 return -EINVAL;
1454 1454
1455 if (attr->prog_flags & ~BPF_F_STRICT_ALIGNMENT) 1455 if (attr->prog_flags & ~(BPF_F_STRICT_ALIGNMENT | BPF_F_ANY_ALIGNMENT))
1456 return -EINVAL; 1456 return -EINVAL;
1457 1457
1458 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) &&
1459 (attr->prog_flags & BPF_F_ANY_ALIGNMENT) &&
1460 !capable(CAP_SYS_ADMIN))
1461 return -EPERM;
1462
1458 /* copy eBPF program license from user space */ 1463 /* copy eBPF program license from user space */
1459 if (strncpy_from_user(license, u64_to_user_ptr(attr->license), 1464 if (strncpy_from_user(license, u64_to_user_ptr(attr->license),
1460 sizeof(license) - 1) < 0) 1465 sizeof(license) - 1) < 0)
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 9584438fa2cc..71988337ac14 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -6505,6 +6505,8 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr,
6505 env->strict_alignment = !!(attr->prog_flags & BPF_F_STRICT_ALIGNMENT); 6505 env->strict_alignment = !!(attr->prog_flags & BPF_F_STRICT_ALIGNMENT);
6506 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)) 6506 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))
6507 env->strict_alignment = true; 6507 env->strict_alignment = true;
6508 if (attr->prog_flags & BPF_F_ANY_ALIGNMENT)
6509 env->strict_alignment = false;
6508 6510
6509 ret = replace_map_fd_with_map_ptr(env); 6511 ret = replace_map_fd_with_map_ptr(env);
6510 if (ret < 0) 6512 if (ret < 0)