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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT autolearn=unavailable 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 ACD9BC43613 for ; Fri, 21 Jun 2019 10:41:49 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 831C42084E for ; Fri, 21 Jun 2019 10:41:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ur9hIXjb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 831C42084E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=58wpv261DXTEBRZ7qkCAvABxX7mLrNdKVzMTroMFNnk=; b=Ur9hIXjbopZvb4 N1BOmA4842yNAEpUMhaRNKqKe/JDCITwbu+k9Jsx3I0rtthRgRnDabXERY2LJz++xlHt/cmyDL2wR okSgZrOvvs/71AqqNTj0iek4o0hHdfKtawxaQQjW6CdCUQTSHR/rcIZlI3Ubf0LUCRRpMmLMha5/m i5UO1BRq9KNWgM10FpxBOdN7Teb0Q3VrCK0rv8HiACnXwvAv1w5WBzak7lZbjQ/1n724vpP+lLIk3 oMrfPrMHoFN8E/XS/z+aeihfl4toikzlqYkKFleSeqURx45Jk/vk4MtE6FdPu3rjFFPCB3QTiJkIW fHk4CO9AqheJoKr4mPBQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1heGzH-00027m-Ra; Fri, 21 Jun 2019 10:41:43 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1heGuB-0004Df-8Q for linux-arm-kernel@lists.infradead.org; Fri, 21 Jun 2019 10:36:34 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 922C8147A; Fri, 21 Jun 2019 03:36:26 -0700 (PDT) Received: from e103592.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C53963F718; Fri, 21 Jun 2019 03:36:25 -0700 (PDT) Date: Fri, 21 Jun 2019 11:36:23 +0100 From: Dave Martin To: Cristian Marussi Subject: Re: [PATCH 13/13] kselftest: arm64: fake_sigreturn_overflow_reserved Message-ID: <20190621103623.GU2790@e103592.cambridge.arm.com> References: <20190613111335.7645-1-cristian.marussi@arm.com> <20190613111335.7645-14-cristian.marussi@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190613111335.7645-14-cristian.marussi@arm.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190621_033627_518956_082C033B X-CRM114-Status: GOOD ( 21.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: andreyknvl@google.com, shuah@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kselftest@vger.kernel.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Thu, Jun 13, 2019 at 12:13:35PM +0100, Cristian Marussi wrote: > Added a simple fake_sigreturn testcase which builds a ucontext_t > with the whole __reserved area overflowed with ESR_MAGIC headers > and place it onto the stack. > Expects a SIGSEGV on test PASS. > > Signed-off-by: Cristian Marussi > --- > .../arm64/signal/testcases/.gitignore | 1 + > .../fake_sigreturn_overflow_reserved.c | 48 +++++++++++++++++++ > 2 files changed, 49 insertions(+) > create mode 100644 tools/testing/selftests/arm64/signal/testcases/fake_sigreturn_overflow_reserved.c > > diff --git a/tools/testing/selftests/arm64/signal/testcases/.gitignore b/tools/testing/selftests/arm64/signal/testcases/.gitignore > index 66ba865b3b7e..69a18391c220 100644 > --- a/tools/testing/selftests/arm64/signal/testcases/.gitignore > +++ b/tools/testing/selftests/arm64/signal/testcases/.gitignore > @@ -10,3 +10,4 @@ fake_sigreturn_misaligned > fake_sigreturn_bad_magic > fake_sigreturn_bad_size > fake_sigreturn_bad_size_for_magic0 > +fake_sigreturn_overflow_reserved > diff --git a/tools/testing/selftests/arm64/signal/testcases/fake_sigreturn_overflow_reserved.c b/tools/testing/selftests/arm64/signal/testcases/fake_sigreturn_overflow_reserved.c > new file mode 100644 > index 000000000000..eba109453a65 > --- /dev/null > +++ b/tools/testing/selftests/arm64/signal/testcases/fake_sigreturn_overflow_reserved.c > @@ -0,0 +1,48 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* Copyright (C) 2019 ARM Limited */ > + > +#include > +#include > +#include > + > +#include "test_signals_utils.h" > +#include "testcases.h" > + > +struct a_sigframe sf; > + > +static int fake_sigreturn_overflow_reserved_run(struct tdescr *td, > + siginfo_t *si, > + ucontext_t *uc) > +{ > + size_t offset = 0; > + struct _aarch64_ctx *head = GET_SF_RESV_HEAD(sf); > + > + /* just to fill the ucontext_t with something real */ > + if (!get_current_context(td, &sf.uc)) > + return 1; > + > + /* find the terminator, preserving existig headers */ > + head = get_terminator(head, GET_SF_RESV_SIZE(sf), &offset); > + if (head) { > + /* fill the __reserved area till the end */ > + do { > + head->magic = ESR_MAGIC; Comment on why this magic is chosen. Since it is useful for test purposes to have a record that the kernel ignores completely, it might be worth dropping in comment in parse_user_sigframe() so that we don't add stricter checks by accident. We could alternatively add a special-purpose dummy record with its own magic. This might be better than abusing esr_context ... but I could be persuaded either way. > + head->size = sizeof(struct esr_context); Can we end up with a hole at the end of the frame that is smaller than esr_context and so can't be filled properly? If not, why not? > + offset += head->size; > + head = GET_RESV_NEXT_HEAD(head); > + } while (offset < GET_SF_RESV_SIZE(sf)); > + > + ASSERT_BAD_CONTEXT(&sf.uc); > + fake_sigreturn(&sf, sizeof(sf), 16); We should have something that looks like a valid terminator after the end of the signal frame, so that we can be sure the overrun is detected, rather than the kernel just rejecting the garbage after the last record. > + } > + > + return 1; > +} [...] Cheers ---Dave _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel