diff options
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r-- | kernel/bpf/syscall.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 9d3b572d4dec..2cad66a4cacb 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c | |||
@@ -1175,19 +1175,29 @@ static int | |||
1175 | bpf_prog_load_check_attach_type(enum bpf_prog_type prog_type, | 1175 | bpf_prog_load_check_attach_type(enum bpf_prog_type prog_type, |
1176 | enum bpf_attach_type expected_attach_type) | 1176 | enum bpf_attach_type expected_attach_type) |
1177 | { | 1177 | { |
1178 | /* There are currently no prog types that require specifying | 1178 | switch (prog_type) { |
1179 | * attach_type at load time. | 1179 | case BPF_PROG_TYPE_CGROUP_SOCK_ADDR: |
1180 | */ | 1180 | switch (expected_attach_type) { |
1181 | return 0; | 1181 | case BPF_CGROUP_INET4_BIND: |
1182 | case BPF_CGROUP_INET6_BIND: | ||
1183 | return 0; | ||
1184 | default: | ||
1185 | return -EINVAL; | ||
1186 | } | ||
1187 | default: | ||
1188 | return 0; | ||
1189 | } | ||
1182 | } | 1190 | } |
1183 | 1191 | ||
1184 | static int bpf_prog_attach_check_attach_type(const struct bpf_prog *prog, | 1192 | static int bpf_prog_attach_check_attach_type(const struct bpf_prog *prog, |
1185 | enum bpf_attach_type attach_type) | 1193 | enum bpf_attach_type attach_type) |
1186 | { | 1194 | { |
1187 | /* There are currently no prog types that require specifying | 1195 | switch (prog->type) { |
1188 | * attach_type at load time. | 1196 | case BPF_PROG_TYPE_CGROUP_SOCK_ADDR: |
1189 | */ | 1197 | return attach_type == prog->expected_attach_type ? 0 : -EINVAL; |
1190 | return 0; | 1198 | default: |
1199 | return 0; | ||
1200 | } | ||
1191 | } | 1201 | } |
1192 | 1202 | ||
1193 | /* last field in 'union bpf_attr' used by this command */ | 1203 | /* last field in 'union bpf_attr' used by this command */ |
@@ -1479,6 +1489,10 @@ static int bpf_prog_attach(const union bpf_attr *attr) | |||
1479 | case BPF_CGROUP_INET_SOCK_CREATE: | 1489 | case BPF_CGROUP_INET_SOCK_CREATE: |
1480 | ptype = BPF_PROG_TYPE_CGROUP_SOCK; | 1490 | ptype = BPF_PROG_TYPE_CGROUP_SOCK; |
1481 | break; | 1491 | break; |
1492 | case BPF_CGROUP_INET4_BIND: | ||
1493 | case BPF_CGROUP_INET6_BIND: | ||
1494 | ptype = BPF_PROG_TYPE_CGROUP_SOCK_ADDR; | ||
1495 | break; | ||
1482 | case BPF_CGROUP_SOCK_OPS: | 1496 | case BPF_CGROUP_SOCK_OPS: |
1483 | ptype = BPF_PROG_TYPE_SOCK_OPS; | 1497 | ptype = BPF_PROG_TYPE_SOCK_OPS; |
1484 | break; | 1498 | break; |
@@ -1541,6 +1555,10 @@ static int bpf_prog_detach(const union bpf_attr *attr) | |||
1541 | case BPF_CGROUP_INET_SOCK_CREATE: | 1555 | case BPF_CGROUP_INET_SOCK_CREATE: |
1542 | ptype = BPF_PROG_TYPE_CGROUP_SOCK; | 1556 | ptype = BPF_PROG_TYPE_CGROUP_SOCK; |
1543 | break; | 1557 | break; |
1558 | case BPF_CGROUP_INET4_BIND: | ||
1559 | case BPF_CGROUP_INET6_BIND: | ||
1560 | ptype = BPF_PROG_TYPE_CGROUP_SOCK_ADDR; | ||
1561 | break; | ||
1544 | case BPF_CGROUP_SOCK_OPS: | 1562 | case BPF_CGROUP_SOCK_OPS: |
1545 | ptype = BPF_PROG_TYPE_SOCK_OPS; | 1563 | ptype = BPF_PROG_TYPE_SOCK_OPS; |
1546 | break; | 1564 | break; |
@@ -1590,6 +1608,8 @@ static int bpf_prog_query(const union bpf_attr *attr, | |||
1590 | case BPF_CGROUP_INET_INGRESS: | 1608 | case BPF_CGROUP_INET_INGRESS: |
1591 | case BPF_CGROUP_INET_EGRESS: | 1609 | case BPF_CGROUP_INET_EGRESS: |
1592 | case BPF_CGROUP_INET_SOCK_CREATE: | 1610 | case BPF_CGROUP_INET_SOCK_CREATE: |
1611 | case BPF_CGROUP_INET4_BIND: | ||
1612 | case BPF_CGROUP_INET6_BIND: | ||
1593 | case BPF_CGROUP_SOCK_OPS: | 1613 | case BPF_CGROUP_SOCK_OPS: |
1594 | case BPF_CGROUP_DEVICE: | 1614 | case BPF_CGROUP_DEVICE: |
1595 | break; | 1615 | break; |