Commit 0fd431ab authored by Aditya Garg's avatar Aditya Garg Committed by zhaoxiaoqiang11
Browse files

hfsplus: fix bug causing custom uid and gid being unable to be assigned with mount

stable inclusion
from stable-v5.10.163
commit 12407462d3fccd865b0db8123d9d3972fd3c2aa5
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7PJ9N

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=12407462d3fccd865b0db8123d9d3972fd3c2aa5

----------------------------------------------------

commit 9f2b5deb upstream.

Despite specifying UID and GID in mount command, the specified UID and GID
were not being assigned. This patch fixes this issue.

Link: https://lkml.kernel.org/r/C0264BF5-059C-45CF-B8DA-3A3BD2C803A2@live.com


Signed-off-by: default avatarAditya Garg <gargaditya08@live.com>
Reviewed-by: default avatarViacheslav Dubeyko <slava@dubeyko.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarzhaoxiaoqiang11 <zhaoxiaoqiang11@jd.com>
parent b71f515c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -198,6 +198,8 @@ struct hfsplus_sb_info {
#define HFSPLUS_SB_HFSX		3
#define HFSPLUS_SB_CASEFOLD	4
#define HFSPLUS_SB_NOBARRIER	5
#define HFSPLUS_SB_UID		6
#define HFSPLUS_SB_GID		7

static inline struct hfsplus_sb_info *HFSPLUS_SB(struct super_block *sb)
{
+2 −2
Original line number Diff line number Diff line
@@ -187,11 +187,11 @@ static void hfsplus_get_perms(struct inode *inode,
	mode = be16_to_cpu(perms->mode);

	i_uid_write(inode, be32_to_cpu(perms->owner));
	if (!i_uid_read(inode) && !mode)
	if ((test_bit(HFSPLUS_SB_UID, &sbi->flags)) || (!i_uid_read(inode) && !mode))
		inode->i_uid = sbi->uid;

	i_gid_write(inode, be32_to_cpu(perms->group));
	if (!i_gid_read(inode) && !mode)
	if ((test_bit(HFSPLUS_SB_GID, &sbi->flags)) || (!i_gid_read(inode) && !mode))
		inode->i_gid = sbi->gid;

	if (dir) {
+4 −0
Original line number Diff line number Diff line
@@ -140,6 +140,8 @@ int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi)
			if (!uid_valid(sbi->uid)) {
				pr_err("invalid uid specified\n");
				return 0;
			} else {
				set_bit(HFSPLUS_SB_UID, &sbi->flags);
			}
			break;
		case opt_gid:
@@ -151,6 +153,8 @@ int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi)
			if (!gid_valid(sbi->gid)) {
				pr_err("invalid gid specified\n");
				return 0;
			} else {
				set_bit(HFSPLUS_SB_GID, &sbi->flags);
			}
			break;
		case opt_part: