forked from mirrors/linux
		
	kbuild: check uniqueness of module names
In the recent build test of linux-next, Stephen saw a build error caused by a broken .tmp_versions/*.mod file: https://lkml.org/lkml/2019/5/13/991 drivers/net/phy/asix.ko and drivers/net/usb/asix.ko have the same basename, and there is a race in generating .tmp_versions/asix.mod Kbuild has not checked this before, and it suddenly shows up with obscure error messages when this kind of race occurs. Non-unique module names cause various sort of problems, but it is not trivial to catch them by eyes. Hence, this script. It checks not only real modules, but also built-in modules (i.e. controlled by tristate CONFIG option, but currently compiled with =y). Non-unique names for built-in modules also cause problems because /sys/modules/ would fall over. For the latest kernel, I tested "make allmodconfig all" (or more quickly "make allyesconfig modules"), and it detected the following: warning: same basename if the following are built as modules: drivers/regulator/88pm800.ko drivers/mfd/88pm800.ko warning: same basename if the following are built as modules: drivers/gpu/drm/bridge/adv7511/adv7511.ko drivers/media/i2c/adv7511.ko warning: same basename if the following are built as modules: drivers/net/phy/asix.ko drivers/net/usb/asix.ko warning: same basename if the following are built as modules: fs/coda/coda.ko drivers/media/platform/coda/coda.ko warning: same basename if the following are built as modules: drivers/net/phy/realtek.ko drivers/net/dsa/realtek.ko Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Kees Cook <keescook@chromium.org> Reviewed-by: Stephen Rothwell <sfr@canb.auug.org.au> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
This commit is contained in:
		
							parent
							
								
									aff11cd983
								
							
						
					
					
						commit
						3a48a91901
					
				
					 2 changed files with 17 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
									
									
									
									
								
							|  | @ -1288,6 +1288,7 @@ modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin | ||||||
| 	$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order | 	$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order | ||||||
| 	@$(kecho) '  Building modules, stage 2.'; | 	@$(kecho) '  Building modules, stage 2.'; | ||||||
| 	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost | 	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost | ||||||
|  | 	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh | ||||||
| 
 | 
 | ||||||
| modules.builtin: $(vmlinux-dirs:%=%/modules.builtin) | modules.builtin: $(vmlinux-dirs:%=%/modules.builtin) | ||||||
| 	$(Q)$(AWK) '!x[$$0]++' $^ > $(objtree)/modules.builtin | 	$(Q)$(AWK) '!x[$$0]++' $^ > $(objtree)/modules.builtin | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								scripts/modules-check.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								scripts/modules-check.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # SPDX-License-Identifier: GPL-2.0 | ||||||
|  | 
 | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | # Check uniqueness of module names | ||||||
|  | check_same_name_modules() | ||||||
|  | { | ||||||
|  | 	for m in $(sed 's:.*/::' modules.order modules.builtin | sort | uniq -d) | ||||||
|  | 	do | ||||||
|  | 		echo "warning: same basename if the following are built as modules:" >&2 | ||||||
|  | 		sed "/\/$m/!d;s:^kernel/:  :" modules.order modules.builtin >&2 | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | check_same_name_modules | ||||||
		Loading…
	
		Reference in a new issue
	
	 Masahiro Yamada
						Masahiro Yamada