Commit a7b4bc09 authored by Petr Pavlu's avatar Petr Pavlu Committed by Sami Tolvanen
Browse files

module: Remove duplicate freeing of lockdep classes



In the error path of load_module(), under the free_module label, the
code calls lockdep_free_key_range() to release lock classes associated
with the MOD_DATA, MOD_RODATA and MOD_RO_AFTER_INIT module regions, and
subsequently invokes module_deallocate().

Since commit ac3b4328 ("module: replace module_layout with
module_memory"), the module_deallocate() function calls free_mod_mem(),
which releases the lock classes as well and considers all module
regions.

Attempting to free these classes twice is unnecessary. Remove the
redundant code in load_module().

Fixes: ac3b4328 ("module: replace module_layout with module_memory")
Signed-off-by: default avatarPetr Pavlu <petr.pavlu@suse.com>
Reviewed-by: default avatarDaniel Gomez <da.gomez@samsung.com>
Reviewed-by: default avatarAaron Tomlin <atomlin@atomlin.com>
Acked-by: default avatarSong Liu <song@kernel.org>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarSami Tolvanen <samitolvanen@google.com>
parent 6de23f81
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -3544,12 +3544,6 @@ static int load_module(struct load_info *info, const char __user *uargs,
	mutex_unlock(&module_mutex);
 free_module:
	mod_stat_bump_invalid(info, flags);
	/* Free lock-classes; relies on the preceding sync_rcu() */
	for_class_mod_mem_type(type, core_data) {
		lockdep_free_key_range(mod->mem[type].base,
				       mod->mem[type].size);
	}

	module_memory_restore_rox(mod);
	module_deallocate(mod, info);
 free_copy: