Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp10104932rwr; Fri, 12 May 2023 04:02:27 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7jqd8snwmZndddQEJbK/+G04kMOrNgsQTx1Ty4YPj/2vx+rBn8W4CU4P2eX1yQQwTGVx/1 X-Received: by 2002:a05:6a00:24d1:b0:63f:ffd:5360 with SMTP id d17-20020a056a0024d100b0063f0ffd5360mr37508745pfv.21.1683889347267; Fri, 12 May 2023 04:02:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683889347; cv=none; d=google.com; s=arc-20160816; b=nIGvOBWF3XAYuQg2Vk4CWOl9qW2tpBZe34A4iw+2IlCFSmCBqw7UsmqhgJmTZE060c 4Q5LDGrH25fhrRLgzuc7Nmq+Cl1+osBaoA7RkMAMIJ4XAC3yDqNu50vz5f5vE3tg6P3c NNyR4bePPHHfXzzB9hwTEmH/7s3rrVgCorBW1JWn1/9BHvu1pZkkPP6hdfsV1ei8k3Ck ZHD4EMtPbSGvP+h/zCgOEngX/+ffU5zaGauOBnfQHGdR9a7j2bVTmIGzXexfveme48ti IZKCWP0lkw+7SuW57jW8dSNDR5MavLfMNkxgRm77Y4Xu8Qrf1kUKztYF2Vg5S8dxzkwI dL6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:content-disposition:mime-version :message-id:subject:cc:to:from:date:dkim-signature; bh=4Ins6rSTGkuS9vQ3+W4aJZgNFWbwMvuVrsqaenjKcTo=; b=gd5qkkq4ezytiTnDTf1wLve7nsXGUz7pduMRp3b3pcD+q4r2Piv/JKzTykq+RvLztQ 9zA80kLl2Ix9+alDyB3LbZhkIXgJVduaeNXxMNUZ9LVVjZhYABcQvmafm1+WN56xAOoE vZ/o3OlJwybZT2kp4NmW3yfm1Iw/RgH2C2hxLKsHGLJJqd7POsSsWrEKo+7gdENLB9cr 8LG2sg5TG3yQ8tr8wLdiBnomqJ5HqGomKxD6AhUeiMlbFTGrgRjhvPWND8IJMwkfZtAJ nVL7WM9Ni40optLkpbjlBi9HisbfUmmS8vZKWwHDNS4mJNMHP8hC82SvYNgud5UFOCb3 6Vrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=D7UJ7Zev; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w14-20020a63a74e000000b00524ba7e95c3si9247085pgo.785.2023.05.12.04.02.11; Fri, 12 May 2023 04:02:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=D7UJ7Zev; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240552AbjELKnk (ORCPT + 99 others); Fri, 12 May 2023 06:43:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43172 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240134AbjELKnj (ORCPT ); Fri, 12 May 2023 06:43:39 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5478269E for ; Fri, 12 May 2023 03:42:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1683888171; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=4Ins6rSTGkuS9vQ3+W4aJZgNFWbwMvuVrsqaenjKcTo=; b=D7UJ7ZeveF5xTuYAZlaHgYoziU4U3TOLbG95QJsFUpbrKvgw2eT8X29J6ZUyZDAc+/HBh0 afgQYXEZhZWq+cED2s6BOsx8Q8LyDEZKCC1nig9KBQ+dGXHarrd5MulE+lLzI3nOzC6Jyo z9TmyGw+FYJK+fFVJgOUjI9WLOi5oOY= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-390-AEle9h5RN96obliCs5BAvg-1; Fri, 12 May 2023 06:42:48 -0400 X-MC-Unique: AEle9h5RN96obliCs5BAvg-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E8029868A00; Fri, 12 May 2023 10:42:47 +0000 (UTC) Received: from dhcp-27-174.brq.redhat.com (unknown [10.45.224.40]) by smtp.corp.redhat.com (Postfix) with SMTP id C45F7400E89; Fri, 12 May 2023 10:42:46 +0000 (UTC) Received: by dhcp-27-174.brq.redhat.com (nbSMTP-1.00) for uid 1000 oleg@redhat.com; Fri, 12 May 2023 12:42:34 +0200 (CEST) Date: Fri, 12 May 2023 12:42:32 +0200 From: Oleg Nesterov To: Peter Zijlstra , Thomas Gleixner Cc: Vernon Lovejoy , linux-kernel@vger.kernel.org, David Laight , Josh Poimboeuf Subject: [PATCH v3] x86/show_trace_log_lvl: ensure stack pointer is aligned, again Message-ID: <20230512104232.GA10227@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Vernon Lovejoy The commit e335bb51cc15 ("x86/unwind: Ensure stack pointer is aligned") tried to align the stack pointer in show_trace_log_lvl(), otherwise the "stack < stack_info.end" check can't guarantee that the last read does not go past the end of the stack. However, we have the same problem with the initial value of the stack pointer, it can also be unaligned. So without this patch this trivial kernel module #include static int init(void) { asm volatile("sub $0x4,%rsp"); dump_stack(); asm volatile("add $0x4,%rsp"); return -EAGAIN; } module_init(init); MODULE_LICENSE("GPL"); crashes the kernel. Fixes: e335bb51cc15 ("x86/unwind: Ensure stack pointer is aligned") Signed-off-by: Vernon Lovejoy Signed-off-by: Oleg Nesterov --- arch/x86/kernel/dumpstack.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c index 0bf6779187dd..f18ca44c904b 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c @@ -195,7 +195,6 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, printk("%sCall Trace:\n", log_lvl); unwind_start(&state, task, regs, stack); - stack = stack ? : get_stack_pointer(task, regs); regs = unwind_get_entry_regs(&state, &partial); /* @@ -214,9 +213,13 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, * - hardirq stack * - entry stack */ - for ( ; stack; stack = PTR_ALIGN(stack_info.next_sp, sizeof(long))) { + for (stack = stack ?: get_stack_pointer(task, regs); + stack; + stack = stack_info.next_sp) { const char *stack_name; + stack = PTR_ALIGN(stack, sizeof(long)); + if (get_stack_info(stack, task, &stack_info, &visit_mask)) { /* * We weren't on a valid stack. It's possible that -- 2.25.1.362.g51ebf55