]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
apparmor: fix '*seclen' is never less than zero
authorJohn Johansen <john.johansen@canonical.com>
Fri, 4 May 2018 08:57:47 +0000 (01:57 -0700)
committerJohn Johansen <john.johansen@canonical.com>
Tue, 8 May 2018 15:34:08 +0000 (08:34 -0700)
smatch warnings:
security/apparmor/secid.c:162 apparmor_secid_to_secctx() warn: unsigned '*seclen' is never less than zero.

vim +162 security/apparmor/secid.c

   140
   141 int apparmor_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
   142 {
   143 /* TODO: cache secctx and ref count so we don't have to recreate */
   144 struct aa_label *label = aa_secid_to_label(secid);
   145
   146 AA_BUG(!secdata);
   147 AA_BUG(!seclen);
   148
   149 if (!label)
   150 return -EINVAL;
   151
   152 if (secdata)
   153 *seclen = aa_label_asxprint(secdata, root_ns, label,
   154     FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
   155     FLAG_HIDDEN_UNCONFINED |
   156     FLAG_ABS_ROOT, GFP_ATOMIC);
   157 else
   158 *seclen = aa_label_snxprint(NULL, 0, root_ns, label,
   159     FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
   160     FLAG_HIDDEN_UNCONFINED |
   161     FLAG_ABS_ROOT);
 > 162 if (*seclen < 0)
   163 return -ENOMEM;
   164
   165 return 0;
   166 }
   167

Fixes: c092921219d2 ("apparmor: add support for mapping secids and using secctxes")
Signed-off-by: John Johansen <john.johansen@canonical.com>
security/apparmor/secid.c

index 502924853986853af9f78530a43be37e761b99f1..c2f0c157115636545737baed0521cd4186aa508b 100644 (file)
@@ -142,6 +142,7 @@ int apparmor_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
 {
        /* TODO: cache secctx and ref count so we don't have to recreate */
        struct aa_label *label = aa_secid_to_label(secid);
+       int len;
 
        AA_BUG(!secdata);
        AA_BUG(!seclen);
@@ -150,18 +151,19 @@ int apparmor_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
                return -EINVAL;
 
        if (secdata)
-               *seclen = aa_label_asxprint(secdata, root_ns, label,
-                                           FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
-                                           FLAG_HIDDEN_UNCONFINED |
-                                           FLAG_ABS_ROOT, GFP_ATOMIC);
+               len = aa_label_asxprint(secdata, root_ns, label,
+                                       FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
+                                       FLAG_HIDDEN_UNCONFINED | FLAG_ABS_ROOT,
+                                       GFP_ATOMIC);
        else
-               *seclen = aa_label_snxprint(NULL, 0, root_ns, label,
-                                           FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
-                                           FLAG_HIDDEN_UNCONFINED |
-                                           FLAG_ABS_ROOT);
-       if (*seclen < 0)
+               len = aa_label_snxprint(NULL, 0, root_ns, label,
+                                       FLAG_SHOW_MODE | FLAG_VIEW_SUBNS |
+                                       FLAG_HIDDEN_UNCONFINED | FLAG_ABS_ROOT);
+       if (len < 0)
                return -ENOMEM;
 
+       *seclen = len;
+
        return 0;
 }