[PATCH 1/2] hfs: fix potential refcnt problem of nls module

From: Chengguang Xu
Date: Tue Apr 17 2018 - 03:06:26 EST


When specifying iocharset/codepage multiple times in a mount,
current option parsing will cause inaccurate refcount of nls
module. Hence, call unload_nls for previous one in this case.

Signed-off-by: Chengguang Xu <cgxu519@xxxxxxx>
---
fs/hfs/super.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/fs/hfs/super.c b/fs/hfs/super.c
index 1738767..6a5f6fd 100644
--- a/fs/hfs/super.c
+++ b/fs/hfs/super.c
@@ -329,8 +329,10 @@ static int parse_options(char *options, struct hfs_sb_info *hsb)
return 0;
}
p = match_strdup(&args[0]);
- if (p)
+ if (p) {
+ unload_nls(hsb->nls_disk);
hsb->nls_disk = load_nls(p);
+ }
if (!hsb->nls_disk) {
pr_err("unable to load codepage \"%s\"\n", p);
kfree(p);
@@ -344,8 +346,10 @@ static int parse_options(char *options, struct hfs_sb_info *hsb)
return 0;
}
p = match_strdup(&args[0]);
- if (p)
+ if (p) {
+ unload_nls(hsb->nls_io);
hsb->nls_io = load_nls(p);
+ }
if (!hsb->nls_io) {
pr_err("unable to load iocharset \"%s\"\n", p);
kfree(p);
--
1.8.3.1