selftests/bpf: test_progs: fix verbose mode garbage
authorStanislav Fomichev <sdf@google.com>
Sat, 31 Aug 2019 02:34:26 +0000 (19:34 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 3 Sep 2019 13:13:14 +0000 (15:13 +0200)
fseeko(.., 0, SEEK_SET) on a memstream just puts the buffer pointer
to the beginning so when we call fflush on it we get some garbage
log data from the previous test. Let's manually set terminating
byte to zero at the reported buffer size.

To show the issue consider the following snippet:

stream = open_memstream (&buf, &len);

fprintf(stream, "aaa");
fflush(stream);
printf("buf=%s, len=%zu\n", buf, len);
fseeko(stream, 0, SEEK_SET);

fprintf(stream, "b");
fflush(stream);
printf("buf=%s, len=%zu\n", buf, len);

Output:

buf=aaa, len=3
buf=baa, len=1

Fixes: 946152b3c5d6 ("selftests/bpf: test_progs: switch to open_memstream")
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/testing/selftests/bpf/test_progs.c

index e5892cb60eca8108b89a6c261f1e6b79ec662351..e8616e778cb5070cd6a1685f459499e09677b28f 100644 (file)
@@ -45,6 +45,7 @@ static void dump_test_log(const struct prog_test_def *test, bool failed)
 
        if (env.verbose || test->force_log || failed) {
                if (env.log_cnt) {
+                       env.log_buf[env.log_cnt] = '\0';
                        fprintf(env.stdout, "%s", env.log_buf);
                        if (env.log_buf[env.log_cnt - 1] != '\n')
                                fprintf(env.stdout, "\n");