Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp874164pxb; Tue, 1 Feb 2022 12:11:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJzI81/JyXBAkgK3UctzGQTGk7WMBSFZfiEQbn7q5VElbAtRa2MdVILq9aobkojKaYwoh7I7 X-Received: by 2002:a17:90a:1941:: with SMTP id 1mr4311978pjh.16.1643746305061; Tue, 01 Feb 2022 12:11:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643746305; cv=none; d=google.com; s=arc-20160816; b=yeUqsEarjFRhXrcIW4K4OEAcYq9wrPsZuXm5wiqO1DAha4SX8mL2Fchy17BQAVPgQM QZnkWjPz8j/+6ydXZGAQcVHFm0MUzNIQ5EvVxjff+QDrYLx1bM+zwmV7Y3oc5r44Cmyv ttHngspiMrV78mkRhFWa13h1bNja8ZwRHwkrRzj0pY9JNBqqt8V/N6oaJR04QS0HzNAV tNCN5g3Y2iEnfOrmphgyCNcjrLUr5Uh7seJ2/9X0r2EHJMr4o9cuBzb9IpiBf6uE1Y4n 5lQYm9/dqxpAfWveTUwhNrufB2q2yF9L+FFWGG9jBKi0s0GVZe/sGGJgYjf38twMKf5O 6TxQ== 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=p1Xj2P7uYMcgN1gLuqeLdRbLr/bq6J7fXsWyajZd9sI=; b=k0UOFbS/x1reqqBlxd8Jv5cOPl4JPpYSgb98F3Nud/ceKWOVs/m4tI/BEd7xpqGKrx 21ExCf3rmuZO6rQwaMJYd2C5lpVPDdolSfIHmGqc3PZOHejbMozeGPeVHxR/qqwzVhGq I39Ng67PoWCaJQwUn8wR8XV8iPoW2tHB2C5qXaJY5o7Lt//D8Ardnx6kKmMvVE7AYMZx 45Wy2Et6qhGdhC8pJM6AwJwce3PsoVcbXGuSa88YrLX2q0eZvO1wiFX9WIEnv0QhQziF mdY1/Pm5FTthA9efq1OSr+BtSN/jjw42TmEbBAHdcDgm3eJvei/6j4uCe5O1o6GgrSLt nf3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=CJjMNZvw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s12si5271235pgs.212.2022.02.01.12.11.30; Tue, 01 Feb 2022 12:11:45 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=CJjMNZvw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S1379584AbiAaLjS (ORCPT + 99 others); Mon, 31 Jan 2022 06:39:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378759AbiAaL3G (ORCPT ); Mon, 31 Jan 2022 06:29:06 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38438C0613EC; Mon, 31 Jan 2022 03:18:22 -0800 (PST) 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 ams.source.kernel.org (Postfix) with ESMTPS id EFF7BB82A60; Mon, 31 Jan 2022 11:18:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0B9A2C340E8; Mon, 31 Jan 2022 11:18:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643627899; bh=Qaq1eYmEKuHp4EfSym8gVoXa+XNpJfoIhWl2rY8NBjo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CJjMNZvwB5fsqVMFDwGusrHQGDDJXxJgUZUzBEb6OIKeDfcEIZVVTOWbsqN9PqIKW 3xyTTQfy5GwvJRN9jwFvKwKEUkRN0xl+HoN86gQzSyglbpoA+6TdLawKd9OFGvJ9X9 B3bUYoTkjSejnhrdmBVTPSLlAoAsIyKgc/tgEtuc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, butt3rflyh4ck , Christoph Hellwig , Jan Kara Subject: [PATCH 5.16 027/200] udf: Fix NULL ptr deref when converting from inline format Date: Mon, 31 Jan 2022 11:54:50 +0100 Message-Id: <20220131105234.484099734@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220131105233.561926043@linuxfoundation.org> References: <20220131105233.561926043@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jan Kara commit 7fc3b7c2981bbd1047916ade327beccb90994eee upstream. udf_expand_file_adinicb() calls directly ->writepage to write data expanded into a page. This however misses to setup inode for writeback properly and so we can crash on inode->i_wb dereference when submitting page for IO like: BUG: kernel NULL pointer dereference, address: 0000000000000158 #PF: supervisor read access in kernel mode ... __folio_start_writeback+0x2ac/0x350 __block_write_full_page+0x37d/0x490 udf_expand_file_adinicb+0x255/0x400 [udf] udf_file_write_iter+0xbe/0x1b0 [udf] new_sync_write+0x125/0x1c0 vfs_write+0x28e/0x400 Fix the problem by marking the page dirty and going through the standard writeback path to write the page. Strictly speaking we would not even have to write the page but we want to catch e.g. ENOSPC errors early. Reported-by: butt3rflyh4ck CC: stable@vger.kernel.org Fixes: 52ebea749aae ("writeback: make backing_dev_info host cgroup-specific bdi_writebacks") Reviewed-by: Christoph Hellwig Signed-off-by: Jan Kara Signed-off-by: Greg Kroah-Hartman --- fs/udf/inode.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -258,10 +258,6 @@ int udf_expand_file_adinicb(struct inode char *kaddr; struct udf_inode_info *iinfo = UDF_I(inode); int err; - struct writeback_control udf_wbc = { - .sync_mode = WB_SYNC_NONE, - .nr_to_write = 1, - }; WARN_ON_ONCE(!inode_is_locked(inode)); if (!iinfo->i_lenAlloc) { @@ -305,8 +301,10 @@ int udf_expand_file_adinicb(struct inode iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG; /* from now on we have normal address_space methods */ inode->i_data.a_ops = &udf_aops; + set_page_dirty(page); + unlock_page(page); up_write(&iinfo->i_data_sem); - err = inode->i_data.a_ops->writepage(page, &udf_wbc); + err = filemap_fdatawrite(inode->i_mapping); if (err) { /* Restore everything back so that we don't lose data... */ lock_page(page);