fix the leak in integrity_read_file()
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 25 Dec 2015 22:59:12 +0000 (17:59 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 4 Jan 2016 15:28:19 +0000 (10:28 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
security/integrity/iint.c

index 3d2f5b4..c2e3ccd 100644 (file)
@@ -234,12 +234,13 @@ int __init integrity_read_file(const char *path, char **data)
        }
 
        rc = integrity_kernel_read(file, 0, buf, size);
-       if (rc < 0)
-               kfree(buf);
-       else if (rc != size)
-               rc = -EIO;
-       else
+       if (rc == size) {
                *data = buf;
+       } else {
+               kfree(buf);
+               if (rc >= 0)
+                       rc = -EIO;
+       }
 out:
        fput(file);
        return rc;