smack: fix double free in smack_parse_opts_str()
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Fri, 24 Mar 2017 11:42:05 +0000 (20:42 +0900)
committerCasey Schaufler <casey@schaufler-ca.com>
Tue, 4 Apr 2017 22:41:15 +0000 (15:41 -0700)
smack_parse_opts_str() calls kfree(opts->mnt_opts) when kcalloc() for
opts->mnt_opts_flags failed. But it should not have called it because
security_free_mnt_opts() will call kfree(opts->mnt_opts).

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
fixes: 3bf2789cad9e6573 ("smack: allow mount opts setting over filesystems with binary mount data")
Cc: Vivek Trivedi <t.vivek@samsung.com>
Cc: Amit Sahrawat <a.sahrawat@samsung.com>
Cc: Casey Schaufler <casey@schaufler-ca.com>
security/smack/smack_lsm.c

index 927e60e622d1e83c52c9e09ba1514ca854bc698f..658f5d8c7e76671a27b2629c61ba93eeb449d4a8 100644 (file)
@@ -695,10 +695,8 @@ static int smack_parse_opts_str(char *options,
 
        opts->mnt_opts_flags = kcalloc(NUM_SMK_MNT_OPTS, sizeof(int),
                        GFP_KERNEL);
-       if (!opts->mnt_opts_flags) {
-               kfree(opts->mnt_opts);
+       if (!opts->mnt_opts_flags)
                goto out_err;
-       }
 
        if (fsdefault) {
                opts->mnt_opts[num_mnt_opts] = fsdefault;