|
@@ -558,7 +558,7 @@ static void test_sockmap(int tasks, void *data)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- /* Test attaching bad fds */
|
|
|
|
|
|
+ /* Test attaching/detaching bad fds */
|
|
err = bpf_prog_attach(-1, fd, BPF_SK_SKB_STREAM_PARSER, 0);
|
|
err = bpf_prog_attach(-1, fd, BPF_SK_SKB_STREAM_PARSER, 0);
|
|
if (!err) {
|
|
if (!err) {
|
|
printf("Failed invalid parser prog attach\n");
|
|
printf("Failed invalid parser prog attach\n");
|
|
@@ -571,6 +571,30 @@ static void test_sockmap(int tasks, void *data)
|
|
goto out_sockmap;
|
|
goto out_sockmap;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ err = bpf_prog_attach(-1, fd, __MAX_BPF_ATTACH_TYPE, 0);
|
|
|
|
+ if (!err) {
|
|
|
|
+ printf("Failed unknown prog attach\n");
|
|
|
|
+ goto out_sockmap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ err = bpf_prog_detach(fd, BPF_SK_SKB_STREAM_PARSER);
|
|
|
|
+ if (err) {
|
|
|
|
+ printf("Failed empty parser prog detach\n");
|
|
|
|
+ goto out_sockmap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ err = bpf_prog_detach(fd, BPF_SK_SKB_STREAM_VERDICT);
|
|
|
|
+ if (err) {
|
|
|
|
+ printf("Failed empty verdict prog detach\n");
|
|
|
|
+ goto out_sockmap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ err = bpf_prog_detach(fd, __MAX_BPF_ATTACH_TYPE);
|
|
|
|
+ if (!err) {
|
|
|
|
+ printf("Detach invalid prog successful\n");
|
|
|
|
+ goto out_sockmap;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* Load SK_SKB program and Attach */
|
|
/* Load SK_SKB program and Attach */
|
|
err = bpf_prog_load(SOCKMAP_PARSE_PROG,
|
|
err = bpf_prog_load(SOCKMAP_PARSE_PROG,
|
|
BPF_PROG_TYPE_SK_SKB, &obj, &parse_prog);
|
|
BPF_PROG_TYPE_SK_SKB, &obj, &parse_prog);
|
|
@@ -643,6 +667,13 @@ static void test_sockmap(int tasks, void *data)
|
|
goto out_sockmap;
|
|
goto out_sockmap;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ err = bpf_prog_attach(verdict_prog, map_fd_rx,
|
|
|
|
+ __MAX_BPF_ATTACH_TYPE, 0);
|
|
|
|
+ if (!err) {
|
|
|
|
+ printf("Attached unknown bpf prog\n");
|
|
|
|
+ goto out_sockmap;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* Test map update elem afterwards fd lives in fd and map_fd */
|
|
/* Test map update elem afterwards fd lives in fd and map_fd */
|
|
for (i = 0; i < 6; i++) {
|
|
for (i = 0; i < 6; i++) {
|
|
err = bpf_map_update_elem(map_fd_rx, &i, &sfd[i], BPF_ANY);
|
|
err = bpf_map_update_elem(map_fd_rx, &i, &sfd[i], BPF_ANY);
|
|
@@ -809,6 +840,24 @@ static void test_sockmap(int tasks, void *data)
|
|
assert(status == 0);
|
|
assert(status == 0);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ err = bpf_prog_detach(map_fd_rx, __MAX_BPF_ATTACH_TYPE);
|
|
|
|
+ if (!err) {
|
|
|
|
+ printf("Detached an invalid prog type.\n");
|
|
|
|
+ goto out_sockmap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ err = bpf_prog_detach(map_fd_rx, BPF_SK_SKB_STREAM_PARSER);
|
|
|
|
+ if (err) {
|
|
|
|
+ printf("Failed parser prog detach\n");
|
|
|
|
+ goto out_sockmap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ err = bpf_prog_detach(map_fd_rx, BPF_SK_SKB_STREAM_VERDICT);
|
|
|
|
+ if (err) {
|
|
|
|
+ printf("Failed parser prog detach\n");
|
|
|
|
+ goto out_sockmap;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* Test map close sockets */
|
|
/* Test map close sockets */
|
|
for (i = 0; i < 6; i++)
|
|
for (i = 0; i < 6; i++)
|
|
close(sfd[i]);
|
|
close(sfd[i]);
|