Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp28325pxb; Thu, 20 Jan 2022 08:26:18 -0800 (PST) X-Google-Smtp-Source: ABdhPJx7GrsUbPR4VkMrB83rKXhOxtj2t4Ir/3t+f94xx/cBn3rdJj+VnWHg8lUbzjIxkDsxdXXj X-Received: by 2002:a63:2b8b:: with SMTP id r133mr9099984pgr.265.1642695978442; Thu, 20 Jan 2022 08:26:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642695978; cv=none; d=google.com; s=arc-20160816; b=0TnVAzxeiBdfsqfWKXoPJlyjEUAyI1M94g73vPW0Fv5swcr3jaZe3jIa8THNhRFVOo etpOb/L5pQcZ18dB0iwYEfunj33tAfnhMA+YAviO2hLniGc3Z9PtyiHJv7I0L/P30fak 9zQ6PWftqq32tlkwYMfVrgGT9aSdDlkwnufjJQxUZLGYH7is+Vs+vKC5qu4vNxCkU7vr 2d2H/9yctM7OIoc1GXascVVUlAE4KtG4vE+WoEg+TXMAY6oLYEvy7OUovPoGrEZMv+N/ hNpxGzZBnhAXsiv/B9ukDn52LPQcEuu/iJ1ifNBON0CtCi5sODt8wQEc8+EXSL7UH1oT y8fA== 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=QGe/LsftVUgj1skFGzyTLkYQixmSHOKWDtLwoYdOsvE=; b=oSkQyGxLA3lIgxGNkmACdiIE9daRl4XGQVZITJ5W2x/Q9WvujsHovv5/ovQjS+rnTo XLYjr3dHvL68YydFTYWs3uNkKoSQXRKrok8ap9ZBtYxENWhWxN80bwXZL7q126OnG082 MSV59m3Se2P6yDYXl2YxHThRi2ymkwSZXn7/SSonb0+8VrYeQKVZ1hTDLq0FRQMFx9+q W73clt17fh82iMYUbtf7WTU8JHGAeY/GdriFltWaBbMkJSdveM19RCnemxlfhwbjuidF lTGrJR6kva8bTC6Qdgni/9A/izJjXyhIs3I4gkdUFWcTPBostXzwEz00Bo2+XP+4+DCe km2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=qjNQm0xI; 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 q8si3272412pfc.323.2022.01.20.08.25.59; Thu, 20 Jan 2022 08:26:18 -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=qjNQm0xI; 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 S1346598AbiARQLf (ORCPT + 99 others); Tue, 18 Jan 2022 11:11:35 -0500 Received: from sin.source.kernel.org ([145.40.73.55]:41534 "EHLO sin.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346943AbiARQJ7 (ORCPT ); Tue, 18 Jan 2022 11:09:59 -0500 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 sin.source.kernel.org (Postfix) with ESMTPS id 54141CE1A47; Tue, 18 Jan 2022 16:09:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 171E2C00446; Tue, 18 Jan 2022 16:09:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1642522195; bh=W6HW6KTxGkaoCnMZ0oFHfdfpF+QnYgXzrTD5NEDthIk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qjNQm0xI29X6kwhgVCG/fijfv8LsZyuMJj7Bx+lxHebVuHd0FnqmOahMsob+xsjPU 7C9gqDbGqL4yPxRSlmVl63YmA1jzta7rVKzMjdfik+q2gLmSy7lXeIA2/jRG00tMm3 KwZaQnSNFuPeB4t919hxK6jIe/2HBM9TQ3zqksl8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Eric Van Hensbergen , Latchesar Ionkov , Dominique Martinet , stable@kernel.org, v9fs-developer@lists.sourceforge.net, syzbot+dfac92a50024b54acaa4@syzkaller.appspotmail.com, Christian Brauner Subject: [PATCH 5.15 12/28] 9p: only copy valid iattrs in 9P2000.L setattr implementation Date: Tue, 18 Jan 2022 17:05:58 +0100 Message-Id: <20220118160452.283433634@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220118160451.879092022@linuxfoundation.org> References: <20220118160451.879092022@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: Christian Brauner commit 3cb6ee991496b67ee284c6895a0ba007e2d7bac3 upstream. The 9P2000.L setattr method v9fs_vfs_setattr_dotl() copies struct iattr values without checking whether they are valid causing unitialized values to be copied. The 9P2000 setattr method v9fs_vfs_setattr() method gets this right. Check whether struct iattr fields are valid first before copying in v9fs_vfs_setattr_dotl() too and make sure that all other fields are set to 0 apart from {g,u}id which should be set to INVALID_{G,U}ID. This ensure that they can be safely sent over the wire or printed for debugging later on. Link: https://lkml.kernel.org/r/20211129114434.3637938-1-brauner@kernel.org Link: https://lkml.kernel.org/r/000000000000a0d53f05d1c72a4c%40google.com Cc: Eric Van Hensbergen Cc: Latchesar Ionkov Cc: Dominique Martinet Cc: stable@kernel.org Cc: v9fs-developer@lists.sourceforge.net Reported-by: syzbot+dfac92a50024b54acaa4@syzkaller.appspotmail.com Signed-off-by: Christian Brauner [Dominique: do not set a/mtime with just ATTR_A/MTIME as discussed] Signed-off-by: Dominique Martinet Signed-off-by: Greg Kroah-Hartman --- fs/9p/vfs_inode_dotl.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c @@ -553,7 +553,10 @@ int v9fs_vfs_setattr_dotl(struct user_na { int retval, use_dentry = 0; struct p9_fid *fid = NULL; - struct p9_iattr_dotl p9attr; + struct p9_iattr_dotl p9attr = { + .uid = INVALID_UID, + .gid = INVALID_GID, + }; struct inode *inode = d_inode(dentry); p9_debug(P9_DEBUG_VFS, "\n"); @@ -563,14 +566,22 @@ int v9fs_vfs_setattr_dotl(struct user_na return retval; p9attr.valid = v9fs_mapped_iattr_valid(iattr->ia_valid); - p9attr.mode = iattr->ia_mode; - p9attr.uid = iattr->ia_uid; - p9attr.gid = iattr->ia_gid; - p9attr.size = iattr->ia_size; - p9attr.atime_sec = iattr->ia_atime.tv_sec; - p9attr.atime_nsec = iattr->ia_atime.tv_nsec; - p9attr.mtime_sec = iattr->ia_mtime.tv_sec; - p9attr.mtime_nsec = iattr->ia_mtime.tv_nsec; + if (iattr->ia_valid & ATTR_MODE) + p9attr.mode = iattr->ia_mode; + if (iattr->ia_valid & ATTR_UID) + p9attr.uid = iattr->ia_uid; + if (iattr->ia_valid & ATTR_GID) + p9attr.gid = iattr->ia_gid; + if (iattr->ia_valid & ATTR_SIZE) + p9attr.size = iattr->ia_size; + if (iattr->ia_valid & ATTR_ATIME_SET) { + p9attr.atime_sec = iattr->ia_atime.tv_sec; + p9attr.atime_nsec = iattr->ia_atime.tv_nsec; + } + if (iattr->ia_valid & ATTR_MTIME_SET) { + p9attr.mtime_sec = iattr->ia_mtime.tv_sec; + p9attr.mtime_nsec = iattr->ia_mtime.tv_nsec; + } if (iattr->ia_valid & ATTR_FILE) { fid = iattr->ia_file->private_data;