OSDN Git Service

bpf: Fix compilation warning of selftests
authorJianlin Lv <Jianlin.Lv@arm.com>
Thu, 6 Aug 2020 10:42:24 +0000 (18:42 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 6 Aug 2020 23:58:42 +0000 (16:58 -0700)
Clang compiler version: 12.0.0
The following warning appears during the selftests/bpf compilation:

prog_tests/send_signal.c:51:3: warning: ignoring return value of ‘write’,
declared with attribute warn_unused_result [-Wunused-result]
   51 |   write(pipe_c2p[1], buf, 1);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
prog_tests/send_signal.c:54:3: warning: ignoring return value of ‘read’,
declared with attribute warn_unused_result [-Wunused-result]
   54 |   read(pipe_p2c[0], buf, 1);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~
......

prog_tests/stacktrace_build_id_nmi.c:13:2: warning: ignoring return value
of ‘fscanf’,declared with attribute warn_unused_result [-Wunused-resul]
   13 |  fscanf(f, "%llu", &sample_freq);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

test_tcpnotify_user.c:133:2: warning:ignoring return value of ‘system’,
declared with attribute warn_unused_result [-Wunused-result]
  133 |  system(test_script);
      |  ^~~~~~~~~~~~~~~~~~~
test_tcpnotify_user.c:138:2: warning:ignoring return value of ‘system’,
declared with attribute warn_unused_result [-Wunused-result]
  138 |  system(test_script);
      |  ^~~~~~~~~~~~~~~~~~~
test_tcpnotify_user.c:143:2: warning:ignoring return value of ‘system’,
declared with attribute warn_unused_result [-Wunused-result]
  143 |  system(test_script);
      |  ^~~~~~~~~~~~~~~~~~~

Add code that fix compilation warning about ignoring return value and
handles any errors; Check return value of library`s API make the code
more secure.

Signed-off-by: Jianlin Lv <Jianlin.Lv@arm.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200806104224.95306-1-Jianlin.Lv@arm.com
tools/testing/selftests/bpf/prog_tests/send_signal.c
tools/testing/selftests/bpf/prog_tests/stacktrace_build_id_nmi.c
tools/testing/selftests/bpf/test_tcpnotify_user.c

index 504abb7..7043e6d 100644 (file)
@@ -48,21 +48,19 @@ static void test_send_signal_common(struct perf_event_attr *attr,
                close(pipe_p2c[1]); /* close write */
 
                /* notify parent signal handler is installed */
-               write(pipe_c2p[1], buf, 1);
+               CHECK(write(pipe_c2p[1], buf, 1) != 1, "pipe_write", "err %d\n", -errno);
 
                /* make sure parent enabled bpf program to send_signal */
-               read(pipe_p2c[0], buf, 1);
+               CHECK(read(pipe_p2c[0], buf, 1) != 1, "pipe_read", "err %d\n", -errno);
 
                /* wait a little for signal handler */
                sleep(1);
 
-               if (sigusr1_received)
-                       write(pipe_c2p[1], "2", 1);
-               else
-                       write(pipe_c2p[1], "0", 1);
+               buf[0] = sigusr1_received ? '2' : '0';
+               CHECK(write(pipe_c2p[1], buf, 1) != 1, "pipe_write", "err %d\n", -errno);
 
                /* wait for parent notification and exit */
-               read(pipe_p2c[0], buf, 1);
+               CHECK(read(pipe_p2c[0], buf, 1) != 1, "pipe_read", "err %d\n", -errno);
 
                close(pipe_c2p[1]);
                close(pipe_p2c[0]);
@@ -99,7 +97,7 @@ static void test_send_signal_common(struct perf_event_attr *attr,
        }
 
        /* wait until child signal handler installed */
-       read(pipe_c2p[0], buf, 1);
+       CHECK(read(pipe_c2p[0], buf, 1) != 1, "pipe_read", "err %d\n", -errno);
 
        /* trigger the bpf send_signal */
        skel->bss->pid = pid;
@@ -107,7 +105,7 @@ static void test_send_signal_common(struct perf_event_attr *attr,
        skel->bss->signal_thread = signal_thread;
 
        /* notify child that bpf program can send_signal now */
-       write(pipe_p2c[1], buf, 1);
+       CHECK(write(pipe_p2c[1], buf, 1) != 1, "pipe_write", "err %d\n", -errno);
 
        /* wait for result */
        err = read(pipe_c2p[0], buf, 1);
@@ -121,7 +119,7 @@ static void test_send_signal_common(struct perf_event_attr *attr,
        CHECK(buf[0] != '2', test_name, "incorrect result\n");
 
        /* notify child safe to exit */
-       write(pipe_p2c[1], buf, 1);
+       CHECK(write(pipe_p2c[1], buf, 1) != 1, "pipe_write", "err %d\n", -errno);
 
 disable_pmu:
        close(pmu_fd);
index f002e30..11a769e 100644 (file)
@@ -6,11 +6,13 @@ static __u64 read_perf_max_sample_freq(void)
 {
        __u64 sample_freq = 5000; /* fallback to 5000 on error */
        FILE *f;
+       __u32 duration = 0;
 
        f = fopen("/proc/sys/kernel/perf_event_max_sample_rate", "r");
        if (f == NULL)
                return sample_freq;
-       fscanf(f, "%llu", &sample_freq);
+       CHECK(fscanf(f, "%llu", &sample_freq) != 1, "Get max sample rate",
+                 "return default value: 5000,err %d\n", -errno);
        fclose(f);
        return sample_freq;
 }
index 8549b31..73da7fe 100644 (file)
@@ -124,17 +124,24 @@ int main(int argc, char **argv)
        sprintf(test_script,
                "iptables -A INPUT -p tcp --dport %d -j DROP",
                TESTPORT);
-       system(test_script);
+       if (system(test_script)) {
+               printf("FAILED: execute command: %s, err %d\n", test_script, -errno);
+               goto err;
+       }
 
        sprintf(test_script,
                "nc 127.0.0.1 %d < /etc/passwd > /dev/null 2>&1 ",
                TESTPORT);
-       system(test_script);
+       if (system(test_script))
+               printf("execute command: %s, err %d\n", test_script, -errno);
 
        sprintf(test_script,
                "iptables -D INPUT -p tcp --dport %d -j DROP",
                TESTPORT);
-       system(test_script);
+       if (system(test_script)) {
+               printf("FAILED: execute command: %s, err %d\n", test_script, -errno);
+               goto err;
+       }
 
        rv = bpf_map_lookup_elem(bpf_map__fd(global_map), &key, &g);
        if (rv != 0) {