From: Al Viro Date: Mon, 6 May 2013 02:10:35 +0000 (+0100) Subject: apparmor: no need to delay vfree() X-Git-Tag: firefly_0821_release~4090^2~232 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=f50be83d236b9b0169b85c47b8878f61bb22f448;p=firefly-linux-kernel-4.4.55.git apparmor: no need to delay vfree() vfree() can be called from interrupt contexts now Signed-off-by: Al Viro Acked-by: John Johansen Signed-off-by: James Morris --- diff --git a/security/apparmor/lib.c b/security/apparmor/lib.c index 7430298116d6..5b62af7254ca 100644 --- a/security/apparmor/lib.c +++ b/security/apparmor/lib.c @@ -104,19 +104,6 @@ void *kvmalloc(size_t size) 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) @@ -125,13 +112,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); }