|
@@ -74,6 +74,8 @@ static DEFINE_RWLOCK(binfmt_lock);
|
|
|
void __register_binfmt(struct linux_binfmt * fmt, int insert)
|
|
|
{
|
|
|
BUG_ON(!fmt);
|
|
|
+ if (WARN_ON(!fmt->load_binary))
|
|
|
+ return;
|
|
|
write_lock(&binfmt_lock);
|
|
|
insert ? list_add(&fmt->lh, &formats) :
|
|
|
list_add_tail(&fmt->lh, &formats);
|
|
@@ -1389,14 +1391,11 @@ int search_binary_handler(struct linux_binprm *bprm)
|
|
|
for (try=0; try<2; try++) {
|
|
|
read_lock(&binfmt_lock);
|
|
|
list_for_each_entry(fmt, &formats, lh) {
|
|
|
- int (*fn)(struct linux_binprm *) = fmt->load_binary;
|
|
|
- if (!fn)
|
|
|
- continue;
|
|
|
if (!try_module_get(fmt->module))
|
|
|
continue;
|
|
|
read_unlock(&binfmt_lock);
|
|
|
bprm->recursion_depth++;
|
|
|
- retval = fn(bprm);
|
|
|
+ retval = fmt->load_binary(bprm);
|
|
|
bprm->recursion_depth--;
|
|
|
if (retval >= 0) {
|
|
|
put_binfmt(fmt);
|