[BUG] act_ife: sleeping functions called in atomic context

From: Alexey Khoroshilov
Date: Thu Jun 16 2016 - 16:52:19 EST


tcf_ife_init() contains a big chunk of code executed with
ife->tcf_lock spinlock held. But that code contains several calls
to sleeping functions:
populate_metalist() and use_all_metadata()
-> add_metainfo()
-> find_ife_oplist(metaid)
-> read_lock()
-> try_module_get(o->owner)
-> kzalloc(sizeof(*mi), GFP_KERNEL);
-> ops->alloc(mi, metaval);
-> module_put(ops->owner);
_tcf_ife_cleanup()
-> module_put()

The same problem is actual for tcf_ife_cleanup() as well.

Found by Linux Driver Verification project (linuxtesting.org).

--
Alexey Khoroshilov
Linux Verification Center, ISPRAS
web: http://linuxtesting.org