Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp102079yba; Mon, 20 May 2019 05:44:48 -0700 (PDT) X-Google-Smtp-Source: APXvYqyHCCKeTkLHJVtidzDBC4oxJZaJkpylDkU7aEaVjN/JQptjSouJF4/bBXdedOAm2XD9QTEE X-Received: by 2002:a63:d901:: with SMTP id r1mr37551816pgg.271.1558356288833; Mon, 20 May 2019 05:44:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558356288; cv=none; d=google.com; s=arc-20160816; b=fdwTO53w9V+fB53p+yDyWMNSXLVJdgHTDgds4Gkb08jq23Tx7hgPmKYrXFkWgSKKPN Uq12mQ0/KzppKQKg4e57AMJAVA5LS/+FbhiN9xhnGQyPI4DsnWA0KOvYKRUXiiTifBgg Jg2KmSTd+AXOvLyKVNSaI7c33FCwvWX0AoSmUETbXw2RoMkNyhpGMk/ujL2Gt1dk+ktd eP/odDVE+AZXNQAPW6Q+mHeAxtu+LNlpCopS4XuEyHsVUCn4bRUA6EYXcBDO8dB2W2wA fJ9HGAUS7F7QePgh2k0CVIzSKwIXu0ZCSgL3yf2Iz/8lEyP+Lg+ugYePmROtLbZsUqSc aowA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=02LvYz70vCMxIneatfDkKPDNhFlKvx9KqhzaTw45TnU=; b=nnIL0Zo67XFRVVqgM1xv11Pu8JrHfb+5II28q5JvBO9mH4vex5lMxKSQntUPJiXqZ2 PV9+k+rJGOpSy5J08I66XQCHFTv04DNqd5a2qT/PVY2qW+YlfNh77lo0YxseOas2wviI a4Uqb4ftvfsJzzYspbyc3PKBu7MWEZrB7XlAxOAI+zKcODDYDBpqpI3QPxDWFKL8cikP 9QVaVlDy5reid8LBD3XHp4m+Is4SIOOFpCmFohPYtYKkmLviYbHci9c33u6+y3y3Z4/o iKwHEQUF+7C931OjCihrXOPhFWmLcca26Ws9qtBVMkHZoFIQ3+gUfsYBf43Zp6Ejmwci IFXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Jc1ezlaj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c27si20008279pfp.65.2019.05.20.05.44.34; Mon, 20 May 2019 05:44:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Jc1ezlaj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390071AbfETMaT (ORCPT + 99 others); Mon, 20 May 2019 08:30:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:46492 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390045AbfETMaN (ORCPT ); Mon, 20 May 2019 08:30:13 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 31CAC20815; Mon, 20 May 2019 12:30:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1558355412; bh=VpgFCPF+VQV+9StQj8r5gpwZ4Ry5MHG0rcvGOeYFJvY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Jc1ezlajnoa+D0DobZLFqeZGS7y+wPF115lIgyn1uGCGj7HNMNwLDH88sI8YTicKL sFeHPXq1AhyqXcchFWe+541gYpDS8prcv/B2kHWrEc1NNZPlxOqBnJHl2k0ueDOh3k u8icG0r0XP2eXFIPTbN3AjfkEZRzLosy/sYmQHlE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sriram Rajagopalan , Theodore Tso , stable@kernel.org Subject: [PATCH 5.0 102/123] ext4: zero out the unused memory region in the extent tree block Date: Mon, 20 May 2019 14:14:42 +0200 Message-Id: <20190520115251.812957758@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190520115245.439864225@linuxfoundation.org> References: <20190520115245.439864225@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sriram Rajagopalan commit 592acbf16821288ecdc4192c47e3774a4c48bb64 upstream. This commit zeroes out the unused memory region in the buffer_head corresponding to the extent metablock after writing the extent header and the corresponding extent node entries. This is done to prevent random uninitialized data from getting into the filesystem when the extent block is synced. This fixes CVE-2019-11833. Signed-off-by: Sriram Rajagopalan Signed-off-by: Theodore Ts'o Cc: stable@kernel.org Signed-off-by: Greg Kroah-Hartman --- fs/ext4/extents.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -1035,6 +1035,7 @@ static int ext4_ext_split(handle_t *hand __le32 border; ext4_fsblk_t *ablocks = NULL; /* array of allocated blocks */ int err = 0; + size_t ext_size = 0; /* make decision: where to split? */ /* FIXME: now decision is simplest: at current extent */ @@ -1126,6 +1127,10 @@ static int ext4_ext_split(handle_t *hand le16_add_cpu(&neh->eh_entries, m); } + /* zero out unused area in the extent block */ + ext_size = sizeof(struct ext4_extent_header) + + sizeof(struct ext4_extent) * le16_to_cpu(neh->eh_entries); + memset(bh->b_data + ext_size, 0, inode->i_sb->s_blocksize - ext_size); ext4_extent_block_csum_set(inode, neh); set_buffer_uptodate(bh); unlock_buffer(bh); @@ -1205,6 +1210,11 @@ static int ext4_ext_split(handle_t *hand sizeof(struct ext4_extent_idx) * m); le16_add_cpu(&neh->eh_entries, m); } + /* zero out unused area in the extent block */ + ext_size = sizeof(struct ext4_extent_header) + + (sizeof(struct ext4_extent) * le16_to_cpu(neh->eh_entries)); + memset(bh->b_data + ext_size, 0, + inode->i_sb->s_blocksize - ext_size); ext4_extent_block_csum_set(inode, neh); set_buffer_uptodate(bh); unlock_buffer(bh); @@ -1270,6 +1280,7 @@ static int ext4_ext_grow_indepth(handle_ ext4_fsblk_t newblock, goal = 0; struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es; int err = 0; + size_t ext_size = 0; /* Try to prepend new index to old one */ if (ext_depth(inode)) @@ -1295,9 +1306,11 @@ static int ext4_ext_grow_indepth(handle_ goto out; } + ext_size = sizeof(EXT4_I(inode)->i_data); /* move top-level index/leaf into new block */ - memmove(bh->b_data, EXT4_I(inode)->i_data, - sizeof(EXT4_I(inode)->i_data)); + memmove(bh->b_data, EXT4_I(inode)->i_data, ext_size); + /* zero out unused area in the extent block */ + memset(bh->b_data + ext_size, 0, inode->i_sb->s_blocksize - ext_size); /* set size of new block */ neh = ext_block_hdr(bh);