diff options
Diffstat (limited to 'fs/cifs/cifsacl.c')
-rw-r--r-- | fs/cifs/cifsacl.c | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c index 0fb15bbbe43c..b45ec7426ae3 100644 --- a/fs/cifs/cifsacl.c +++ b/fs/cifs/cifsacl.c | |||
@@ -1307,42 +1307,39 @@ id_mode_to_cifs_acl(struct inode *inode, const char *path, __u64 nmode, | |||
1307 | 1307 | ||
1308 | /* Get the security descriptor */ | 1308 | /* Get the security descriptor */ |
1309 | pntsd = get_cifs_acl(CIFS_SB(inode->i_sb), inode, path, &secdesclen); | 1309 | pntsd = get_cifs_acl(CIFS_SB(inode->i_sb), inode, path, &secdesclen); |
1310 | |||
1311 | /* Add three ACEs for owner, group, everyone getting rid of | ||
1312 | other ACEs as chmod disables ACEs and set the security descriptor */ | ||
1313 | |||
1314 | if (IS_ERR(pntsd)) { | 1310 | if (IS_ERR(pntsd)) { |
1315 | rc = PTR_ERR(pntsd); | 1311 | rc = PTR_ERR(pntsd); |
1316 | cERROR(1, "%s: error %d getting sec desc", __func__, rc); | 1312 | cERROR(1, "%s: error %d getting sec desc", __func__, rc); |
1317 | } else { | 1313 | goto out; |
1318 | /* allocate memory for the smb header, | 1314 | } |
1319 | set security descriptor request security descriptor | ||
1320 | parameters, and secuirty descriptor itself */ | ||
1321 | |||
1322 | secdesclen = secdesclen < DEFSECDESCLEN ? | ||
1323 | DEFSECDESCLEN : secdesclen; | ||
1324 | pnntsd = kmalloc(secdesclen, GFP_KERNEL); | ||
1325 | if (!pnntsd) { | ||
1326 | cERROR(1, "Unable to allocate security descriptor"); | ||
1327 | kfree(pntsd); | ||
1328 | return -ENOMEM; | ||
1329 | } | ||
1330 | 1315 | ||
1331 | rc = build_sec_desc(pntsd, pnntsd, secdesclen, nmode, uid, gid, | 1316 | /* |
1332 | &aclflag); | 1317 | * Add three ACEs for owner, group, everyone getting rid of other ACEs |
1318 | * as chmod disables ACEs and set the security descriptor. Allocate | ||
1319 | * memory for the smb header, set security descriptor request security | ||
1320 | * descriptor parameters, and secuirty descriptor itself | ||
1321 | */ | ||
1322 | secdesclen = max_t(u32, secdesclen, DEFSECDESCLEN); | ||
1323 | pnntsd = kmalloc(secdesclen, GFP_KERNEL); | ||
1324 | if (!pnntsd) { | ||
1325 | cERROR(1, "Unable to allocate security descriptor"); | ||
1326 | kfree(pntsd); | ||
1327 | return -ENOMEM; | ||
1328 | } | ||
1333 | 1329 | ||
1334 | cFYI(DBG2, "build_sec_desc rc: %d", rc); | 1330 | rc = build_sec_desc(pntsd, pnntsd, secdesclen, nmode, uid, gid, |
1331 | &aclflag); | ||
1335 | 1332 | ||
1336 | if (!rc) { | 1333 | cFYI(DBG2, "build_sec_desc rc: %d", rc); |
1337 | /* Set the security descriptor */ | ||
1338 | rc = set_cifs_acl(pnntsd, secdesclen, inode, | ||
1339 | path, aclflag); | ||
1340 | cFYI(DBG2, "set_cifs_acl rc: %d", rc); | ||
1341 | } | ||
1342 | 1334 | ||
1343 | kfree(pnntsd); | 1335 | if (!rc) { |
1344 | kfree(pntsd); | 1336 | /* Set the security descriptor */ |
1337 | rc = set_cifs_acl(pnntsd, secdesclen, inode, path, aclflag); | ||
1338 | cFYI(DBG2, "set_cifs_acl rc: %d", rc); | ||
1345 | } | 1339 | } |
1346 | 1340 | ||
1341 | kfree(pnntsd); | ||
1342 | kfree(pntsd); | ||
1343 | out: | ||
1347 | return rc; | 1344 | return rc; |
1348 | } | 1345 | } |