From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B7232C282CA for ; Tue, 12 Feb 2019 23:42:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8395A2084E for ; Tue, 12 Feb 2019 23:42:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LYuRR3py" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732565AbfBLXmr (ORCPT ); Tue, 12 Feb 2019 18:42:47 -0500 Received: from mail-pf1-f201.google.com ([209.85.210.201]:54961 "EHLO mail-pf1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731318AbfBLXmp (ORCPT ); Tue, 12 Feb 2019 18:42:45 -0500 Received: by mail-pf1-f201.google.com with SMTP id t72so370070pfi.21 for ; Tue, 12 Feb 2019 15:42:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=3ZgutYnA++A64Vj6utd98pOaehUNh6EdPaqHzHKpz9s=; b=LYuRR3pyREE9bAu950jpcJDMqG9GHRkABId+fhvOR92NY5chdGHrxlX4MewSHfJpvR GrDyM8iMslIjvyKOlNGhzx9AFqIzrG+uMBeBwPpqos1N2WA7sMNMCG8fi1MsRgosjgwc ImIBlxhAt5q6I9Q0e5R4I5M9/LZ5NzfHxmAwDqFdDe8iR1JIEyA6J4HEX+zvOYKBYxkM XzKg9XG0MvldAH6EOBSgQW7dWl3zX7/B17CCLjWzV3VN0oLjKFtZMI6zmr8HXNhU7fpX TT0LQlY+XP872suZOg+qVbwrUVWgIw58jj/v5V6UUZSr7EUNE9XNhS6uEy+kRVl1bEmg nk7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=3ZgutYnA++A64Vj6utd98pOaehUNh6EdPaqHzHKpz9s=; b=PqeBn//xhc50hz+xxpfU+GuLUo+jYFijI3SeN4B1muxLCF7XhyAn2DU1C3fNFqQims ICLEAva0fhzCrWTp4bhxuzm1mdHpNNmvp2wSSug4cOD5v5i3JznEj4uQmv4V6KJS47Y5 n7tK5SSJp/UyKQfvzdiytd+ePDgqY+fap0An8+Q/orAU9JeZsQ+0GBpE5ZfwH/uHZboY xNIHQPIyzgqNTLAMf1Rze0SpAPvLhGwut7TnkGqnelJBo5NRrJifZzKl+qpeFoEEO585 TURZTq2eyAGJRABpNgfAsHDRiipWXJlQ7hm+cZFS8OCXhcvJtE/cNnHjh7aTIJhZ17Kd VDRQ== X-Gm-Message-State: AHQUAuaNqJlGV/0XzgjmN86tm6xq5WM9rTIVSdnOLPBwn7ofLhYPxmsG DzEroXEfnj50uIuGcB0BEmy7FfyLiJ0fv45cqwMFvbarFzMv4dv+7BL6KXdwjaHCzf+GT6Zlv1w rUraM4DearvgOpEJh5MOlVx4bNmopEvaE9TW53/NG1zGIkqsb/7aLTg== X-Google-Smtp-Source: AHgI3Ia9p0HayGcQk2rldI8nRUfxUhxkJrAfTNPm83r/xbdYHT7fYwejF3KypcyaZncHpNGaBBDLTDw= X-Received: by 2002:a17:902:28aa:: with SMTP id f39mr1982074plb.101.1550014964856; Tue, 12 Feb 2019 15:42:44 -0800 (PST) Date: Tue, 12 Feb 2019 15:42:39 -0800 In-Reply-To: <20190212234239.174386-1-sdf@google.com> Message-Id: <20190212234239.174386-2-sdf@google.com> Mime-Version: 1.0 References: <20190212234239.174386-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.791.gb4d0f1c61a-goog Subject: [PATCH bpf 2/2] selftests/bpf: make sure signal interrupts BPF_PROG_TEST_RUN From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, Stanislav Fomichev Content-Type: text/plain; charset="UTF-8" Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Simple test that I used to reproduce the issue in the previous commit: Do BPF_PROG_TEST_RUN with max iterations, each program is 4096 simple move instructions. File alarm in 0.1 second and check that bpf_prog_test_run is interrupted (i.e. test doesn't hang). Feel free to ignore it if you feel like that's just a one-off fix and it doesn't require a test going forward. Signed-off-by: Stanislav Fomichev --- tools/testing/selftests/bpf/test_progs.c | 44 ++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index 25f0083a9b2e..7842e3749b19 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -11,6 +11,7 @@ #include #include #include +#include #include typedef __u16 __sum16; @@ -27,6 +28,7 @@ typedef __u16 __sum16; #include #include #include +#include #include #include @@ -1912,6 +1914,47 @@ static void test_queue_stack_map(int type) bpf_object__close(obj); } +static void sigalrm_handler(int s) {} +static struct sigaction sigalrm_action = { + .sa_handler = sigalrm_handler, +}; + +static void test_signal_pending(void) +{ + struct bpf_insn prog[4096]; + struct itimerval timeo = { + .it_value.tv_usec = 100000, /* 100ms */ + }; + __u32 duration, retval; + int prog_fd; + int err; + int i; + + for (i = 0; i < ARRAY_SIZE(prog); i++) + prog[i] = BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0); + prog[ARRAY_SIZE(prog) - 1] = BPF_EXIT_INSN(); + + prog_fd = bpf_load_program(BPF_PROG_TYPE_SOCKET_FILTER, + prog, ARRAY_SIZE(prog), + "GPL", 0, NULL, 0); + CHECK(prog_fd < 0, "test-run", "errno %d\n", errno); + + err = sigaction(SIGALRM, &sigalrm_action, NULL); + CHECK(err, "test-run-signal-sigaction", "errno %d\n", errno); + + err = setitimer(ITIMER_REAL, &timeo, NULL); + CHECK(err, "test-run-signal-timer", "errno %d\n", errno); + + err = bpf_prog_test_run(prog_fd, 0xffffffff, &pkt_v4, sizeof(pkt_v4), + NULL, NULL, &retval, &duration); + CHECK(err != -1 || errno != EINTR || duration > 1000000000, + "test-run-signal-run", + "err %d errno %d retval %d\n", + err, errno, retval); + + signal(SIGALRM, SIG_DFL); +} + int main(void) { srand(time(NULL)); @@ -1939,6 +1982,7 @@ int main(void) test_reference_tracking(); test_queue_stack_map(QUEUE); test_queue_stack_map(STACK); + test_signal_pending(); printf("Summary: %d PASSED, %d FAILED\n", pass_cnt, error_cnt); return error_cnt ? EXIT_FAILURE : EXIT_SUCCESS; -- 2.20.1.791.gb4d0f1c61a-goog