]> granicus.if.org Git - strace/commitdiff
bpf: add support for new fields in BPF_PROG_TEST_RUN
authorDmitry V. Levin <ldv@altlinux.org>
Tue, 2 Jul 2019 11:49:15 +0000 (11:49 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 2 Jul 2019 11:49:15 +0000 (11:49 +0000)
* bpf_attr.h (struct BPF_PROG_TEST_RUN_struct): Add ctx_size_in,
ctx_size_out, ctx_in, and ctx_out fields.
* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_TEST_RUN)): Decode these fields
introduced by Linux kernel commit v5.2-rc1~133^2~193^2~6.
* tests/bpf.c (BPF_PROG_TEST_RUN_checks): Check it.

bpf.c
bpf_attr.h
tests/bpf.c

diff --git a/bpf.c b/bpf.c
index 5329fc2fe47e2cbc3a4521ebd70c803fdfc86147..20ad938f526374d05d2e497212056d8584d9d034 100644 (file)
--- a/bpf.c
+++ b/bpf.c
@@ -387,6 +387,16 @@ BEGIN_BPF_CMD_DECODER(BPF_PROG_TEST_RUN)
        PRINT_FIELD_ADDR64(", ", attr, data_out);
        PRINT_FIELD_U(", ", attr, repeat);
        PRINT_FIELD_U(", ", attr, duration);
+       /*
+        * The following four fields were introduced by Linux commit
+        * v5.2-rc1~133^2~193^2~6.
+        */
+       if (len > offsetof(struct BPF_PROG_TEST_RUN_struct, ctx_size_in)) {
+               PRINT_FIELD_U(", ", attr, ctx_size_in);
+               PRINT_FIELD_U(", ", attr, ctx_size_out);
+               PRINT_FIELD_ADDR64(", ", attr, ctx_in);
+               PRINT_FIELD_ADDR64(", ", attr, ctx_out);
+       }
        tprints("}");
 }
 END_BPF_CMD_DECODER(RVAL_DECODED)
index 21b4cd767d3d352995210d4244e8e8048f207f2e..741a412407fb5cd3f5051310cc4e987b9ea7a9b9 100644 (file)
@@ -172,11 +172,15 @@ struct BPF_PROG_TEST_RUN_struct /* test */ {
        uint64_t ATTRIBUTE_ALIGNED(8) data_out;
        uint32_t repeat;
        uint32_t duration;
+       uint32_t ctx_size_in;
+       uint32_t ctx_size_out;
+       uint64_t ATTRIBUTE_ALIGNED(8) ctx_in;
+       uint64_t ATTRIBUTE_ALIGNED(8) ctx_out;
 };
 
 # define BPF_PROG_TEST_RUN_struct_size \
        sizeof(struct BPF_PROG_TEST_RUN_struct)
-# define expected_BPF_PROG_TEST_RUN_struct_size 40
+# define expected_BPF_PROG_TEST_RUN_struct_size 64
 
 struct BPF_PROG_GET_NEXT_ID_struct {
        uint32_t start_id;
index 08f78964744eaddd030d0a8109f667b487b1f504..da6da0e8ee20f8cf69ad58b2fdecef04219c1ad4 100644 (file)
@@ -819,6 +819,33 @@ static const struct bpf_attr_check BPF_PROG_TEST_RUN_checks[] = {
                       ", data_in=0xfacef11dbadc2ded"
                       ", data_out=0xfacef33dbadc4ded"
                       ", repeat=4207410904, duration=4207541978}"
+       },
+       {
+               .data = { .BPF_PROG_TEST_RUN_data = {
+                       .prog_fd = -1,
+                       .retval = 0xfac1fed2,
+                       .data_size_in = 0xfac3fed4,
+                       .data_size_out = 0xfac5fed6,
+                       .data_in = (uint64_t) 0xfacef11dbadc2dedULL,
+                       .data_out = (uint64_t) 0xfacef33dbadc4dedULL,
+                       .repeat = 0xfac7fed8,
+                       .duration = 0xfac9feda,
+                       .ctx_size_in = 0xfacbfedc,
+                       .ctx_size_out = 0xfacdfede,
+                       .ctx_in = (uint64_t) 0xfacef55dbadc6dedULL,
+                       .ctx_out = (uint64_t) 0xfacef77dbadc8dedULL
+               } },
+               .size = offsetofend(struct BPF_PROG_TEST_RUN_struct, ctx_out),
+               .str = "test={prog_fd=-1, retval=4207017682"
+                      ", data_size_in=4207148756, data_size_out=4207279830"
+                      ", data_in=0xfacef11dbadc2ded"
+                      ", data_out=0xfacef33dbadc4ded"
+                      ", repeat=4207410904"
+                      ", duration=4207541978"
+                      ", ctx_size_in=4207673052"
+                      ", ctx_size_out=4207804126"
+                      ", ctx_in=0xfacef55dbadc6ded"
+                      ", ctx_out=0xfacef77dbadc8ded}"
        }
 };