aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/bpf/syscall.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r--kernel/bpf/syscall.c36
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
1175bpf_prog_load_check_attach_type(enum bpf_prog_type prog_type, 1175bpf_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
1184static int bpf_prog_attach_check_attach_type(const struct bpf_prog *prog, 1192static 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;