From patchwork Thu Dec 3 05:12:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Collingbourne X-Patchwork-Id: 11947777 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=-18.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT 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 5DFDBC63777 for ; Thu, 3 Dec 2020 05:14:14 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 E4238208A9 for ; Thu, 3 Dec 2020 05:14:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E4238208A9 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:From:Subject:References:Mime-Version:Message-Id: In-Reply-To:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=jqMiIweohmtUJn1Y7LLHSsULCJPKNt78bGKPzRiIl+g=; b=yFzSDvMmsh5t66Di6qVU9c12M oXDXUNRmRJpcoWZ4f+C5ewcpn6fG7OBjP0pF0kwXO/v+SouxPKbpBsKfUrSOyzGoaxOLMhqWHYMV6 9DF6dODd4JLjRYYAOhj/sfDoxyAfkczMmOnSax6VP0H+Sw2ZbsW+nRFRtfkfhpcBjc0eb6+GEouTr vFuTFk2VdXMalpKoTMFATiOllr0axvJyyeOQ4VH/sDqEcJAH6VFbzGd5/9vlQr3fv6ZbqLc6OZSqm 2QYLP3JL8Wgb6VPOWlNumCnO2xy+WUGvZa2o3DrZe5ayPUOre/lKnThvMHWBFy62g09fSHyuhipV7 kQyHPdy8Q==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kkgv1-00051p-7d; Thu, 03 Dec 2020 05:12:39 +0000 Received: from mail-qv1-xf4a.google.com ([2607:f8b0:4864:20::f4a]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kkguw-0004zG-Qg for linux-arm-kernel@lists.infradead.org; Thu, 03 Dec 2020 05:12:35 +0000 Received: by mail-qv1-xf4a.google.com with SMTP id m3so720162qvw.5 for ; Wed, 02 Dec 2020 21:12:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=gyeSa0ydtAGaHDDO8L534svp054R2DTzXRKpgVZSZNo=; b=euKpOE8qpGnE0M6cCwuMds4LP8O6msWAZEPPurYoQEQETbvqUiErWGsrqSt7uQ+mhV LlM0mprZELhYQQhGkSxdtl3izfr9gKePHiroIiZCfd6o8rzDR/YKhKQ53GUp33cHqbud pZgPdWmjyD39wt77vpGQ+VHm/yFbummOjqFPLjK95TJY2GHA4ECOpJn+79CO4RegAhbd ZowW1p+qIHIHPl6wx/MekzXZH550lgJLUNJVmdoOdbYVhHehLCuYNy0Y9HyyT0ThdkTY Lnrme0IQJaMa3gOg4xfbyqPsu8NJxE/t4K3r+jME+Xndrx7XiUV+91YnmUwT5V1kiW9u /sag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=gyeSa0ydtAGaHDDO8L534svp054R2DTzXRKpgVZSZNo=; b=qXX08aZCMyQXvApFk5N51g5DKVlzwFtlgxIlveMhfoiOqBb7vVKQwMqx+zpbHKmpit qC4NBzOAzJ5XTJvtQJzjT9pWwaRI4wyaGEh9/qa4yfD0112I6ri0gmg9OVZMPRvh9e6K MUQU1mVB7hI0lceq/49fDv8XDSMsvIqnPefmbCw5529ul1BukN5hvzYqgNC6c7/prT7S okTSb6F0P2gD9XN/UwrJkqRR4QDHzAHxcYG2Mcgh1ZCk0NdL7tteIyIlChBmtsqzjTY0 FNx50qbxwjnz+9xJGwRNOlvsH6IdIOfHEre3vIaDeP908kgH6gC6+0ciFCqiKaHcLNRz LRAQ== X-Gm-Message-State: AOAM532sdSDrCef/mN7s0nf6oLYLcjoQRBYsF52ArEroJVonN0YkdCZh im29loEKNT1mosYoFll1R17uy1Q= X-Google-Smtp-Source: ABdhPJwLj8pO0tgkZU6lq9j08OHTnRGUszbdvmdjGOiGJI1ojpRqQzY7QRec8EcAk7Ro0OtVkoOWZd4= X-Received: from pcc-desktop.svl.corp.google.com ([2620:15c:2ce:0:7220:84ff:fe09:385a]) (user=pcc job=sendgmr) by 2002:ad4:5bce:: with SMTP id t14mr1480368qvt.6.1606972351172; Wed, 02 Dec 2020 21:12:31 -0800 (PST) Date: Wed, 2 Dec 2020 21:12:23 -0800 In-Reply-To: <01b1819ec213797c9cd44bc23a9e9641f3bb64b2.1606972188.git.pcc@google.com> Message-Id: <41a146c68cdd682dfee51ef881114dd5c809f2ec.1606972188.git.pcc@google.com> Mime-Version: 1.0 References: <01b1819ec213797c9cd44bc23a9e9641f3bb64b2.1606972188.git.pcc@google.com> X-Mailer: git-send-email 2.29.2.454.gaff20da3a2-goog Subject: [PATCH v3 2/3] arm64: stacktrace: Relax frame record alignment requirement to 8 bytes From: Peter Collingbourne To: Mark Brown , Mark Rutland , Will Deacon , Catalin Marinas , Andrey Konovalov , Evgenii Stepanov , Ard Biesheuvel X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201203_001234_900062_96878D1F X-CRM114-Status: GOOD ( 16.49 ) 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: Peter Collingbourne , Linux ARM Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The AAPCS places no requirements on the alignment of the frame record. In theory it could be placed anywhere, although it seems sensible to require it to be aligned to 8 bytes. With an upcoming enhancement to tag-based KASAN Clang will begin creating frame records located at an address that is only aligned to 8 bytes. Accommodate such frame records in the stack unwinding code. As pointed out by Mark Rutland, the userspace stack unwinding code has the same problem, so fix it there as well. Signed-off-by: Peter Collingbourne Link: https://linux-review.googlesource.com/id/Ia22c375230e67ca055e9e4bb639383567f7ad268 Acked-by: Andrey Konovalov --- v2: - fix it in the userspace unwinding code as well arch/arm64/kernel/perf_callchain.c | 2 +- arch/arm64/kernel/stacktrace.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/perf_callchain.c b/arch/arm64/kernel/perf_callchain.c index 88ff471b0bce..4a72c2727309 100644 --- a/arch/arm64/kernel/perf_callchain.c +++ b/arch/arm64/kernel/perf_callchain.c @@ -116,7 +116,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry, tail = (struct frame_tail __user *)regs->regs[29]; while (entry->nr < entry->max_stack && - tail && !((unsigned long)tail & 0xf)) + tail && !((unsigned long)tail & 0x7)) tail = user_backtrace(tail, entry); } else { #ifdef CONFIG_COMPAT diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c index ce613e22b58b..3bc1c44b7910 100644 --- a/arch/arm64/kernel/stacktrace.c +++ b/arch/arm64/kernel/stacktrace.c @@ -44,7 +44,7 @@ int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame) unsigned long fp = frame->fp; struct stack_info info; - if (fp & 0xf) + if (fp & 0x7) return -EINVAL; if (!tsk)