Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED2E04A68A8 for ; Tue, 22 Sep 2026 19:48:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790106499; cv=none; b=pzDMS9lQZUAuGEojOstHH6ymCKTYc6DsMbIwL4c2jh3WshzV3NkHghBA4pBjdJ8o0/fhboicVYM5OzIyZzR8ZYJzvrIRIi21d2uWnR43R+TzW691O23ZTIFe46/ryn+z+d563vJzcWd8lHlALYnbAjDCiT5l1lOuh6YPyJAVGIg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790106499; c=relaxed/simple; bh=21SC+Tjw4cuAWXB5CHlWQbXi6S3bT6575JFzgV8gXQg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WXBvSDeYBiAZMODe9iF3Cw+mj+dyEsL6utOS+qS7jawB9f9iEH9iAw7CaCklwmKNWJh8JRLA5xDoMgXJwzmawpwBniv9IhXtt2hZH6MTFQBZavg4xXFD/Mce8e5CX6VMPGTpfQLgKtmllGg/uKPHcAVxjztzTzKAkLYyPQg+BAY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QPEBwGfm; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QPEBwGfm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B254C1F00899; Tue, 22 Sep 2026 19:48:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790106497; bh=qmRg2/go4uA0PNqyZRH0zMgzY21uCMQ8UtGPqGIh4UM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=QPEBwGfmhWN0tEB3uMJ+GtXYYOaBfamUgjXYPMSYAz4IcG7RphYh6CXWANI8jmbDo 2Nwp43GFOJp4UVxT2j9H6VVdN186aO4aszenw4DHcc+/MAFL/TZbb1fpTdoTHbW7ow 4ChI3FVXWokB5+6FxV7jFRi6+/6VCSDXsjIhT49aAtqdlREKEaxtaFPBzY6RWIQ5g2 OKEJtRX3laLks8lfpNoWWMDjNVPRTQWYNLIfbqx890TffBX9de9Kakjy0kaPUSgiBN GpKMtb4UP4X9N2jYoBXPaogPeOuE5dfpWNR/jjixn5k4Zr1kikqEJWI+lYLDlidOmQ jsEhFTsB7NkAA== From: Sasha Levin To: stable@vger.kernel.org Cc: Paulo Alcantara , Namjae Jeon , David Howells , Tom Talpey , Shyam Prasad N , Ronnie Sahlberg , Bharath SM , Sasha Levin Subject: [PATCH 6.18.y 3/3] smb: client: fix fattr leaking on wsl_to_fattr() failure Date: Tue, 22 Sep 2026 15:48:12 -0400 Message-ID: <20260922194812.85938-3-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260922194812.85938-1-sashal@kernel.org> References: <2026092249-multitude-amigo-b729@gregkh> <20260922194812.85938-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Paulo Alcantara [ Upstream commit e1253a82bb4c0fed6706a5839fc8b6e01be1abe2 ] wsl_to_fattr() mutates fattr fields as it parses each WSL EA. If validation later fails, the function returns false with partially mutated fattr fields that callers do not reset. Fix this by parsing into local variables and only committing them to fattr on success. Closes: https://sashiko.dev/#/patchset/20260906200517.725015-1-pc%40manguebit.org Fixes: 78e26bec4d6d ("smb: client: parse uid, gid, mode and dev from WSL reparse points") Reviewed-by: Namjae Jeon Signed-off-by: Paulo Alcantara Cc: David Howells Cc: Tom Talpey Cc: Shyam Prasad N Cc: Ronnie Sahlberg Cc: Bharath SM Cc: Namjae Jeon Cc: stable@vger.kernel.org Signed-off-by: Sasha Levin --- fs/smb/client/reparse.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c index c87b282da1ce9..fcd0790f1ba62 100644 --- a/fs/smb/client/reparse.c +++ b/fs/smb/client/reparse.c @@ -1111,29 +1111,30 @@ static bool wsl_to_fattr(struct cifs_open_info_data *data, u32 tag, struct cifs_fattr *fattr) { unsigned int sbflags = cifs_sb_flags(cifs_sb); + kuid_t uid = cifs_sb->ctx->linux_uid; + kgid_t gid = cifs_sb->ctx->linux_gid; struct smb2_file_full_ea_info *ea; bool have_xattr_dev = false; + dev_t rdev = 0; + umode_t mode; u32 next = 0; - fattr->cf_uid = cifs_sb->ctx->linux_uid; - fattr->cf_gid = cifs_sb->ctx->linux_gid; - - fattr->cf_mode &= ~S_IFMT; + mode = fattr->cf_mode & ~S_IFMT; switch (tag) { case IO_REPARSE_TAG_LX_SYMLINK: - fattr->cf_mode |= S_IFLNK; + mode |= S_IFLNK; break; case IO_REPARSE_TAG_LX_FIFO: - fattr->cf_mode |= S_IFIFO; + mode |= S_IFIFO; break; case IO_REPARSE_TAG_AF_UNIX: - fattr->cf_mode |= S_IFSOCK; + mode |= S_IFSOCK; break; case IO_REPARSE_TAG_LX_CHR: - fattr->cf_mode |= S_IFCHR; + mode |= S_IFCHR; break; case IO_REPARSE_TAG_LX_BLK: - fattr->cf_mode |= S_IFBLK; + mode |= S_IFBLK; break; } @@ -1157,26 +1158,29 @@ static bool wsl_to_fattr(struct cifs_open_info_data *data, if (!strncmp(name, SMB2_WSL_XATTR_UID, nlen)) { if (!(sbflags & CIFS_MOUNT_OVERR_UID)) - fattr->cf_uid = wsl_make_kuid(cifs_sb, v); + uid = wsl_make_kuid(cifs_sb, v); } else if (!strncmp(name, SMB2_WSL_XATTR_GID, nlen)) { if (!(sbflags & CIFS_MOUNT_OVERR_GID)) - fattr->cf_gid = wsl_make_kgid(cifs_sb, v); + gid = wsl_make_kgid(cifs_sb, v); } else if (!strncmp(name, SMB2_WSL_XATTR_MODE, nlen)) { /* File type in reparse point tag and in xattr mode must match. */ - if (S_DT(fattr->cf_mode) != S_DT(get_unaligned_le32(v))) + if (S_DT(mode) != S_DT(get_unaligned_le32(v))) return false; - fattr->cf_mode = (umode_t)get_unaligned_le32(v); + mode = get_unaligned_le32(v); } else if (!strncmp(name, SMB2_WSL_XATTR_DEV, nlen)) { - fattr->cf_rdev = reparse_mkdev(v); + rdev = reparse_mkdev(v); have_xattr_dev = true; } } while (next); out: - /* Major and minor numbers for char and block devices are mandatory. */ if (!have_xattr_dev && (tag == IO_REPARSE_TAG_LX_CHR || tag == IO_REPARSE_TAG_LX_BLK)) return false; + fattr->cf_uid = uid; + fattr->cf_gid = gid; + fattr->cf_mode = mode; + fattr->cf_rdev = rdev; return true; } -- 2.53.0