From patchwork Thu Jan 22 21:32:23 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Theodore Ts'o X-Patchwork-Id: 19896 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id AADBFDDDED for ; Fri, 23 Jan 2009 08:32:32 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752067AbZAVVcb (ORCPT ); Thu, 22 Jan 2009 16:32:31 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752207AbZAVVcb (ORCPT ); Thu, 22 Jan 2009 16:32:31 -0500 Received: from THUNK.ORG ([69.25.196.29]:44556 "EHLO thunker.thunk.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751070AbZAVVca (ORCPT ); Thu, 22 Jan 2009 16:32:30 -0500 Received: from root (helo=closure.thunk.org) by thunker.thunk.org with local-esmtp (Exim 4.50 #1 (Debian)) id 1LQ7A4-0003Kj-2F; Thu, 22 Jan 2009 16:32:28 -0500 Received: from tytso by closure.thunk.org with local (Exim 4.69) (envelope-from ) id 1LQ7A2-0002cv-V1; Thu, 22 Jan 2009 16:32:27 -0500 From: Theodore Ts'o To: Ext4 Developers List Cc: Eric Sesterhenn , Theodore Ts'o Subject: [PATCH] e2fsck: Add superblock check to make sure s_first_ino is valid Date: Thu, 22 Jan 2009 16:32:23 -0500 Message-Id: <1232659946-10073-1-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 1.6.0.4.8.g36f27.dirty In-Reply-To: <20090122211224.GJ14966@mit.edu> References: <20090122211224.GJ14966@mit.edu> X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@mit.edu X-SA-Exim-Scanned: No (on thunker.thunk.org); SAEximRunCond expanded to false Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org An deliberately corrupted filesystem with an insanely large s_first_ino field could cause e2fsck to crash with a seg fault. Thanks to Eric Sesterhenn for supplying test cases which demonstrated this issue. Signed-off-by: "Theodore Ts'o" --- e2fsck/super.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/e2fsck/super.c b/e2fsck/super.c index cd2b9f0..24ec7a8 100644 --- a/e2fsck/super.c +++ b/e2fsck/super.c @@ -513,6 +513,10 @@ void check_super_block(e2fsck_t ctx) check_super_value(ctx, "reserved_gdt_blocks", sb->s_reserved_gdt_blocks, MAX_CHECK, 0, fs->blocksize/4); + if (sb->s_rev_level > EXT2_GOOD_OLD_REV) + check_super_value(ctx, "first_ino", sb->s_first_ino, + MIN_CHECK | MAX_CHECK, + EXT2_GOOD_OLD_FIRST_INO, sb->s_inodes_count); inode_size = EXT2_INODE_SIZE(sb); check_super_value(ctx, "inode_size", inode_size, MIN_CHECK | MAX_CHECK,