|
@@ -77,6 +77,8 @@ static int cachefiles_check_cache_dir(struct cachefiles_cache *cache,
|
|
/*
|
|
/*
|
|
* check the security details of the on-disk cache
|
|
* check the security details of the on-disk cache
|
|
* - must be called with security override in force
|
|
* - must be called with security override in force
|
|
|
|
+ * - must return with a security override in force - even in the case of an
|
|
|
|
+ * error
|
|
*/
|
|
*/
|
|
int cachefiles_determine_cache_security(struct cachefiles_cache *cache,
|
|
int cachefiles_determine_cache_security(struct cachefiles_cache *cache,
|
|
struct dentry *root,
|
|
struct dentry *root,
|
|
@@ -99,6 +101,8 @@ int cachefiles_determine_cache_security(struct cachefiles_cache *cache,
|
|
* which create files */
|
|
* which create files */
|
|
ret = set_create_files_as(new, root->d_inode);
|
|
ret = set_create_files_as(new, root->d_inode);
|
|
if (ret < 0) {
|
|
if (ret < 0) {
|
|
|
|
+ abort_creds(new);
|
|
|
|
+ cachefiles_begin_secure(cache, _saved_cred);
|
|
_leave(" = %d [cfa]", ret);
|
|
_leave(" = %d [cfa]", ret);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|