aa_label_strn_parse() returns -ENOENT for every failure, so a caller
cannot tell "no such profile" from "could not allocate a label".
Report an allocation failure as -ENOMEM.
Fixes: f1bd904175e8 ("apparmor: add the base fns() for domain labels")
Signed-off-by: Maxime Bélair <[email protected]>
---
security/apparmor/label.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/security/apparmor/label.c b/security/apparmor/label.c
index 82742a471055..8970bfc08c04 100644
--- a/security/apparmor/label.c
+++ b/security/apparmor/label.c
@@ -1955,12 +1955,18 @@ struct aa_label *aa_label_strn_parse(struct aa_label
*base, const char *str,
goto out;
}
- if (create)
+ if (create) {
label = aa_vec_find_or_create_label(vec, len, gfp);
- else
+ if (!label) {
+ /* not absence: creating only fails on allocation */
+ label = ERR_PTR(-ENOMEM);
+ goto out;
+ }
+ } else {
label = vec_find(vec, len);
- if (!label)
- goto fail;
+ if (!label)
+ goto fail;
+ }
out:
/* use adjusted len from after vec_unique, not original */
--
2.51.0