diff options
author | David Howells <dhowells@redhat.com> | 2012-06-25 07:55:18 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-07-14 08:37:27 -0400 |
commit | be34d1a3bc4b6f357a49acb55ae870c81337e4f0 (patch) | |
tree | 39caaf1b4965d47be64ce45491477fce555b2d17 /kernel | |
parent | 55e4def0a6e79e7eb53017c4935adfed76510cd7 (diff) |
VFS: Make clone_mnt()/copy_tree()/collect_mounts() return errors
copy_tree() can theoretically fail in a case other than ENOMEM, but always
returns NULL which is interpreted by callers as -ENOMEM. Change it to return
an explicit error.
Also change clone_mnt() for consistency and because union mounts will add new
error cases.
Thanks to Andreas Gruenbacher <agruen@suse.de> for a bug fix.
[AV: folded braino fix by Dan Carpenter]
Original-author: Valerie Aurora <vaurora@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Cc: Valerie Aurora <valerie.aurora@gmail.com>
Cc: Andreas Gruenbacher <agruen@suse.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/audit_tree.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c index 5bf0790497e7..3a5ca582ba1e 100644 --- a/kernel/audit_tree.c +++ b/kernel/audit_tree.c | |||
@@ -595,7 +595,7 @@ void audit_trim_trees(void) | |||
595 | 595 | ||
596 | root_mnt = collect_mounts(&path); | 596 | root_mnt = collect_mounts(&path); |
597 | path_put(&path); | 597 | path_put(&path); |
598 | if (!root_mnt) | 598 | if (IS_ERR(root_mnt)) |
599 | goto skip_it; | 599 | goto skip_it; |
600 | 600 | ||
601 | spin_lock(&hash_lock); | 601 | spin_lock(&hash_lock); |
@@ -669,8 +669,8 @@ int audit_add_tree_rule(struct audit_krule *rule) | |||
669 | goto Err; | 669 | goto Err; |
670 | mnt = collect_mounts(&path); | 670 | mnt = collect_mounts(&path); |
671 | path_put(&path); | 671 | path_put(&path); |
672 | if (!mnt) { | 672 | if (IS_ERR(mnt)) { |
673 | err = -ENOMEM; | 673 | err = PTR_ERR(mnt); |
674 | goto Err; | 674 | goto Err; |
675 | } | 675 | } |
676 | 676 | ||
@@ -719,8 +719,8 @@ int audit_tag_tree(char *old, char *new) | |||
719 | return err; | 719 | return err; |
720 | tagged = collect_mounts(&path2); | 720 | tagged = collect_mounts(&path2); |
721 | path_put(&path2); | 721 | path_put(&path2); |
722 | if (!tagged) | 722 | if (IS_ERR(tagged)) |
723 | return -ENOMEM; | 723 | return PTR_ERR(tagged); |
724 | 724 | ||
725 | err = kern_path(old, 0, &path1); | 725 | err = kern_path(old, 0, &path1); |
726 | if (err) { | 726 | if (err) { |