apparmor: no need to delay vfree()
authorAl Viro <viro@ZenIV.linux.org.uk>
Mon, 6 May 2013 02:10:35 +0000 (03:10 +0100)
committerJames Morris <james.l.morris@oracle.com>
Sun, 12 May 2013 11:31:02 +0000 (21:31 +1000)
vfree() can be called from interrupt contexts now

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: John Johansen <john.johansen@canonical.com>
Signed-off-by: James Morris <james.l.morris@oracle.com>
security/apparmor/lib.c

index d40bc59..fcfe023 100644 (file)
@@ -110,19 +110,6 @@ void *__aa_kvmalloc(size_t size, gfp_t flags)
        return buffer;
 }
 
-/**
- * do_vfree - workqueue routine for freeing vmalloced memory
- * @work: data to be freed
- *
- * The work_struct is overlaid to the data being freed, as at the point
- * the work is scheduled the data is no longer valid, be its freeing
- * needs to be delayed until safe.
- */
-static void do_vfree(struct work_struct *work)
-{
-       vfree(work);
-}
-
 /**
  * kvfree - free an allocation do by kvmalloc
  * @buffer: buffer to free (MAYBE_NULL)
@@ -131,13 +118,8 @@ static void do_vfree(struct work_struct *work)
  */
 void kvfree(void *buffer)
 {
-       if (is_vmalloc_addr(buffer)) {
-               /* Data is no longer valid so just use the allocated space
-                * as the work_struct
-                */
-               struct work_struct *work = (struct work_struct *) buffer;
-               INIT_WORK(work, do_vfree);
-               schedule_work(work);
-       } else
+       if (is_vmalloc_addr(buffer))
+               vfree(buffer);
+       else
                kfree(buffer);
 }