From 87063d7dc392cb710c70dba49021d6e4ec8961a9 Mon Sep 17 00:00:00 2001 From: Chunwei Chen Date: Tue, 18 Oct 2016 17:29:26 -0700 Subject: [PATCH] Fix splat-cred.c cred usage No need to crhold current_cred(), fix possible leak in splat_cred_test2 Reviewed-by: Brian Behlendorf Signed-off-by: Chunwei Chen Closes #556 --- module/splat/splat-cred.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/module/splat/splat-cred.c b/module/splat/splat-cred.c index fadf9bca0..e3d1c4eee 100644 --- a/module/splat/splat-cred.c +++ b/module/splat/splat-cred.c @@ -53,18 +53,18 @@ splat_cred_test1(struct file *file, void *arg) uid_t uid, ruid, suid; gid_t gid, rgid, sgid, *groups; int ngroups, i, count = 0; + cred_t *cr = CRED(); - uid = crgetuid(CRED()); - ruid = crgetruid(CRED()); - suid = crgetsuid(CRED()); + uid = crgetuid(cr); + ruid = crgetruid(cr); + suid = crgetsuid(cr); - gid = crgetgid(CRED()); - rgid = crgetrgid(CRED()); - sgid = crgetsgid(CRED()); + gid = crgetgid(cr); + rgid = crgetrgid(cr); + sgid = crgetsgid(cr); - crhold(CRED()); - ngroups = crgetngroups(CRED()); - groups = crgetgroups(CRED()); + ngroups = crgetngroups(cr); + groups = crgetgroups(cr); memset(str, 0, GROUP_STR_SIZE); for (i = 0; i < ngroups; i++) { @@ -78,8 +78,6 @@ splat_cred_test1(struct file *file, void *arg) } } - crfree(CRED()); - splat_vprint(file, SPLAT_CRED_TEST1_NAME, "uid: %d ruid: %d suid: %d " "gid: %d rgid: %d sgid: %d\n", @@ -114,6 +112,8 @@ splat_cred_test2(struct file *file, void *arg) gid_t gid, rgid, sgid, *groups; int ngroups, i, count = 0; + crhold(kcred); + uid = crgetuid(kcred); ruid = crgetruid(kcred); suid = crgetsuid(kcred); @@ -122,7 +122,6 @@ splat_cred_test2(struct file *file, void *arg) rgid = crgetrgid(kcred); sgid = crgetsgid(kcred); - crhold(kcred); ngroups = crgetngroups(kcred); groups = crgetgroups(kcred); @@ -134,6 +133,7 @@ splat_cred_test2(struct file *file, void *arg) splat_vprint(file, SPLAT_CRED_TEST2_NAME, "Failed too many group entries for temp " "buffer: %d, %s\n", ngroups, str); + crfree(kcred); return -ENOSPC; } }