All of lore.kernel.org
 help / color / mirror / Atom feed
From: Li Wang <liwang@redhat.com>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v1] crypto/af_alg02: fixed read() being stuck
Date: Tue, 7 May 2019 16:07:40 +0800	[thread overview]
Message-ID: <CAEemH2e=9J_7OtSsS5wq+4YgfOm1zj=PK5cnaBk69LKtdR71ZA@mail.gmail.com> (raw)
In-Reply-To: <20190507065530.12174-1-camann@suse.com>

Hi Christian,

On Tue, May 7, 2019 at 2:56 PM Christian Amann <camann@suse.com> wrote:

> On kernels < 4.14 (missing commit 2d97591ef43d) reading from
> the request socket does not return and the testcase does not
> finish.
>
> This fix moves the logic to a child thread in order for the
> parent to handle the timeout and report a message to the user.
>
> Signed-off-by: Christian Amann <camann@suse.com>
> ---
>  testcases/kernel/crypto/Makefile   |  2 ++
>  testcases/kernel/crypto/af_alg02.c | 36
> +++++++++++++++++++++++++++++++++++-
>  2 files changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/testcases/kernel/crypto/Makefile
> b/testcases/kernel/crypto/Makefile
> index 76f9308c2..6547e1cb6 100644
> --- a/testcases/kernel/crypto/Makefile
> +++ b/testcases/kernel/crypto/Makefile
> @@ -20,3 +20,5 @@ include $(top_srcdir)/include/mk/testcases.mk
>  CFLAGS                 += -D_GNU_SOURCE
>
>  include $(top_srcdir)/include/mk/generic_leaf_target.mk
> +
> +af_alg02: CFLAGS += -pthread
> diff --git a/testcases/kernel/crypto/af_alg02.c
> b/testcases/kernel/crypto/af_alg02.c
> index a9e820423..056511993 100644
> --- a/testcases/kernel/crypto/af_alg02.c
> +++ b/testcases/kernel/crypto/af_alg02.c
> @@ -7,12 +7,23 @@
>   * Regression test for commit ecaaab564978 ("crypto: salsa20 - fix
>   * blkcipher_walk API usage"), or CVE-2017-17805.  This test verifies
> that an
>   * empty message can be encrypted with Salsa20 without crashing the
> kernel.
> + *
> + * read() fix:
> + * Calls read() in child thread in order to manually kill it after
> timeout.
> + * With kernels missing commit 2d97591ef43d ("crypto: af_alg -
> consolidation
> + * of duplicate code") read() does not return.
>   */
>
>  #include "tst_test.h"
>  #include "tst_af_alg.h"
> +#include "tst_safe_pthread.h"
> +#include <pthread.h>
> +#include <time.h>
> +#include <errno.h>
>
> -static void run(void)
> +#define VERIFY_TIMEOUT (time(NULL) + 5)
>

It is very neccessary to take some action before process being killed in
timeout. In LTP, we have an tst_timeout_remaining() function. Have a look?

> +
> +void *verify_encrypt(void *arg)
>  {
>         char buf[16];
>         int reqfd = tst_alg_setup_reqfd("skcipher", "salsa20", NULL, 16);
> @@ -22,6 +33,29 @@ static void run(void)
>                 tst_res(TPASS, "Successfully \"encrypted\" an empty
> message");
>         else
>                 tst_res(TBROK, "read() didn't return 0");
> +       return arg;
> +}
> +
> +static void run(void)
> +{
> +       pthread_t thr;
> +       int join_ret;
> +       struct timespec read_timeout;
> +
> +       read_timeout.tv_sec  = VERIFY_TIMEOUT;
> +       read_timeout.tv_nsec = 0;
> +
> +       SAFE_PTHREAD_CREATE(&thr, NULL, verify_encrypt, NULL);
> +       join_ret = pthread_timedjoin_np(thr, NULL, &read_timeout);
> +
> +       if (join_ret != 0) {
> +               if (join_ret == ETIMEDOUT)
> +                       tst_brk(TBROK,
> +                               "Timed out while reading from request
> socket.");
> +               else
> +                       tst_brk(TBROK | TTERRNO,
> +                               "Error while joining child thread");
> +       }
>  }
>
>  static struct tst_test test = {
> --
> 2.16.4
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>


-- 
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20190507/91dec0ac/attachment.html>

  reply	other threads:[~2019-05-07  8:07 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-07  6:55 [LTP] [PATCH v1] crypto/af_alg02: fixed read() being stuck Christian Amann
2019-05-07  8:07 ` Li Wang [this message]
2019-05-07  8:59   ` Christian Amann
2019-05-07 10:06     ` Li Wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAEemH2e=9J_7OtSsS5wq+4YgfOm1zj=PK5cnaBk69LKtdR71ZA@mail.gmail.com' \
    --to=liwang@redhat.com \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.