Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp667530iog; Thu, 30 Jun 2022 08:01:54 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vOJ4wSD7sVKOzHmKa40gKc3cI0Z7/5HqsbzfHtfW7w0ACOrMsXzusDrc7UpfLi2dNhofQd X-Received: by 2002:a63:1b58:0:b0:411:90a3:e1e3 with SMTP id b24-20020a631b58000000b0041190a3e1e3mr6066111pgm.345.1656601313771; Thu, 30 Jun 2022 08:01:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656601313; cv=none; d=google.com; s=arc-20160816; b=ZWGOl686E2ZrlFW8V6F+2MUKcCQNKQgypekc90XG5aVBoCh4LnWsJilGI1DUZUdsXj KM7ZwCPx2zJhryVgza6rEjauJb6QBnWmqSLZ1c/SaZ3nR03y0E3kH1JvEs8Jwc8ixRKT hdvWaNMKSUpffjaixsE5wNnnQq2ChHVuRoyXTXrKsCdfxikNK+ytcAX/r33eiZHarW6u Vq2R1d714s8PFxRCqvchEy6lR+2jWMh5MVs5NdOx3n8ex1M+41ESJ6aofTHv8V5y5VZB 0e6rwvXOB1vQ2AuAoC0FW8SzP6N4pBt4fP6qcVavv4o9+zTELebP+8rQLTa2zJIXUkB6 8ZbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=HUp5oobDprGxipQyTXPXgOaWEov3VLl4+iWitXG5LR0=; b=sNw7dISVz/w1gElC2un6eZvLSotDRzevqoQqopOEiwOvQsj2qcoS8/IUMlvzqyHIm6 Rj3Z5cidBzuWn0eBWU/hljQnrcXgOJhKRHh1otw34ocbQVB+Bcfiu3zH8KLb2IL2CKCY r93KtaVRg3IptBwR3n/+bQflrfc/95HMerIUVF4nmojNv9CwnVRMI6rxF+JTt6dqAqkR fwUf+ijjNRGImXiyqjkx1V87BNGM1R2hWj/4TzMZPJQoIRHAalphxSdF5fy/q9sucHR4 6KL75VtdxsFJ82Ix+LvljYX2Jz+nmi3IOycyv3GEWhYYzGep951v6sa+SPXTnMzVSJyw uc2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Zcy9xcN4; 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=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c15-20020a170902d48f00b0016406e6ff4asi30158459plg.102.2022.06.30.08.01.35; Thu, 30 Jun 2022 08:01:53 -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=@linuxfoundation.org header.s=korg header.b=Zcy9xcN4; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236530AbiF3OGJ (ORCPT + 99 others); Thu, 30 Jun 2022 10:06:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236520AbiF3OFh (ORCPT ); Thu, 30 Jun 2022 10:05:37 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A9B5A6EEBA; Thu, 30 Jun 2022 06:53:55 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 6D8F162112; Thu, 30 Jun 2022 13:53:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7F036C34115; Thu, 30 Jun 2022 13:53:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1656597234; bh=HlUdkeevkwlkADXGp1lJ6XF/tQ3oXFSVRy8yE4P3sXM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zcy9xcN41hZIyKgAgBHrDctZ/6bJyoi6qaYYDcAZC0WvtblTiz3Dbcsk8XxdBIkHD 8SgSCJ/lxIXwTxNmsUsAaPSYwFwfS+KlzJmoCxH5xLRMQ2Xuaj76LDMD7DDv0yetej 6MnmExEil0zak/cqqp6qJWlkmcuUd+c/hBIwWY9I= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dave Chinner , "Darrick J. Wong" , Amir Goldstein Subject: [PATCH 5.10 10/12] xfs: check sb_meta_uuid for dabuf buffer recovery Date: Thu, 30 Jun 2022 15:47:15 +0200 Message-Id: <20220630133230.996324972@linuxfoundation.org> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220630133230.676254336@linuxfoundation.org> References: <20220630133230.676254336@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,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: Dave Chinner commit 09654ed8a18cfd45027a67d6cbca45c9ea54feab upstream. Got a report that a repeated crash test of a container host would eventually fail with a log recovery error preventing the system from mounting the root filesystem. It manifested as a directory leaf node corruption on writeback like so: XFS (loop0): Mounting V5 Filesystem XFS (loop0): Starting recovery (logdev: internal) XFS (loop0): Metadata corruption detected at xfs_dir3_leaf_check_int+0x99/0xf0, xfs_dir3_leaf1 block 0x12faa158 XFS (loop0): Unmount and run xfs_repair XFS (loop0): First 128 bytes of corrupted metadata buffer: 00000000: 00 00 00 00 00 00 00 00 3d f1 00 00 e1 9e d5 8b ........=....... 00000010: 00 00 00 00 12 fa a1 58 00 00 00 29 00 00 1b cc .......X...).... 00000020: 91 06 78 ff f7 7e 4a 7d 8d 53 86 f2 ac 47 a8 23 ..x..~J}.S...G.# 00000030: 00 00 00 00 17 e0 00 80 00 43 00 00 00 00 00 00 .........C...... 00000040: 00 00 00 2e 00 00 00 08 00 00 17 2e 00 00 00 0a ................ 00000050: 02 35 79 83 00 00 00 30 04 d3 b4 80 00 00 01 50 .5y....0.......P 00000060: 08 40 95 7f 00 00 02 98 08 41 fe b7 00 00 02 d4 .@.......A...... 00000070: 0d 62 ef a7 00 00 01 f2 14 50 21 41 00 00 00 0c .b.......P!A.... XFS (loop0): Corruption of in-memory data (0x8) detected at xfs_do_force_shutdown+0x1a/0x20 (fs/xfs/xfs_buf.c:1514). Shutting down. XFS (loop0): Please unmount the filesystem and rectify the problem(s) XFS (loop0): log mount/recovery failed: error -117 XFS (loop0): log mount failed Tracing indicated that we were recovering changes from a transaction at LSN 0x29/0x1c16 into a buffer that had an LSN of 0x29/0x1d57. That is, log recovery was overwriting a buffer with newer changes on disk than was in the transaction. Tracing indicated that we were hitting the "recovery immediately" case in xfs_buf_log_recovery_lsn(), and hence it was ignoring the LSN in the buffer. The code was extracting the LSN correctly, then ignoring it because the UUID in the buffer did not match the superblock UUID. The problem arises because the UUID check uses the wrong UUID - it should be checking the sb_meta_uuid, not sb_uuid. This filesystem has sb_uuid != sb_meta_uuid (which is fine), and the buffer has the correct matching sb_meta_uuid in it, it's just the code checked it against the wrong superblock uuid. The is no corruption in the filesystem, and failing to recover the buffer due to a write verifier failure means the recovery bug did not propagate the corruption to disk. Hence there is no corruption before or after this bug has manifested, the impact is limited simply to an unmountable filesystem.... This was missed back in 2015 during an audit of incorrect sb_uuid usage that resulted in commit fcfbe2c4ef42 ("xfs: log recovery needs to validate against sb_meta_uuid") that fixed the magic32 buffers to validate against sb_meta_uuid instead of sb_uuid. It missed the magicda buffers.... Fixes: ce748eaa65f2 ("xfs: create new metadata UUID field and incompat flag") Signed-off-by: Dave Chinner Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong Signed-off-by: Amir Goldstein Acked-by: Darrick J. Wong Signed-off-by: Greg Kroah-Hartman --- fs/xfs/xfs_buf_item_recover.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/fs/xfs/xfs_buf_item_recover.c +++ b/fs/xfs/xfs_buf_item_recover.c @@ -805,7 +805,7 @@ xlog_recover_get_buf_lsn( } if (lsn != (xfs_lsn_t)-1) { - if (!uuid_equal(&mp->m_sb.sb_uuid, uuid)) + if (!uuid_equal(&mp->m_sb.sb_meta_uuid, uuid)) goto recover_immediately; return lsn; }