Skip to content

Commit 9f2b5de

Browse files
AdityaGarg8akpm00
authored andcommitted
hfsplus: fix bug causing custom uid and gid being unable to be assigned with mount
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/[email protected] Signed-off-by: Aditya Garg <[email protected]> Reviewed-by: Viacheslav Dubeyko <[email protected]> Cc: <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent d5b6e6e commit 9f2b5de

File tree

3 files changed

+8
-2
lines changed

3 files changed

+8
-2
lines changed

fs/hfsplus/hfsplus_fs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ struct hfsplus_sb_info {
198198
#define HFSPLUS_SB_HFSX 3
199199
#define HFSPLUS_SB_CASEFOLD 4
200200
#define HFSPLUS_SB_NOBARRIER 5
201+
#define HFSPLUS_SB_UID 6
202+
#define HFSPLUS_SB_GID 7
201203

202204
static inline struct hfsplus_sb_info *HFSPLUS_SB(struct super_block *sb)
203205
{

fs/hfsplus/inode.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,11 @@ static void hfsplus_get_perms(struct inode *inode,
192192
mode = be16_to_cpu(perms->mode);
193193

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

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

202202
if (dir) {

fs/hfsplus/options.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi)
140140
if (!uid_valid(sbi->uid)) {
141141
pr_err("invalid uid specified\n");
142142
return 0;
143+
} else {
144+
set_bit(HFSPLUS_SB_UID, &sbi->flags);
143145
}
144146
break;
145147
case opt_gid:
@@ -151,6 +153,8 @@ int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi)
151153
if (!gid_valid(sbi->gid)) {
152154
pr_err("invalid gid specified\n");
153155
return 0;
156+
} else {
157+
set_bit(HFSPLUS_SB_GID, &sbi->flags);
154158
}
155159
break;
156160
case opt_part:

0 commit comments

Comments
 (0)