diff --git a/Makefile b/Makefile
index cf30a8b6463e5d41ac82561a58a1a19bc44c9b32..203b86e9519768266d2bc76c9c20e82b91296d79 100644
--- a/Makefile
+++ b/Makefile
@@ -1258,8 +1258,7 @@ vmlinux: vmlinux.o $(KBUILD_LDS) modpost
 # make sure no implicit rule kicks in
 $(sort $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)): . ;
 
-filechk_kernel.release = \
-	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
+filechk_kernel.release = $(srctree)/scripts/setlocalversion $(srctree)
 
 # Store (new) KERNELRELEASE string in include/config/kernel.release
 include/config/kernel.release: FORCE
@@ -2124,7 +2123,7 @@ checkstack:
 	$(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
 
 kernelrelease:
-	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
+	@$(srctree)/scripts/setlocalversion $(srctree)
 
 kernelversion:
 	@echo $(KERNELVERSION)
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index b8e1018d611e54f29962140c7b04df3b711e2b4c..ad72ea2c82288aa2e1f7dd0a040dc87572e4b5d5 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -102,6 +102,11 @@ if ! test -e include/config/auto.conf; then
 	exit 1
 fi
 
+if [ -z "${KERNELVERSION}" ]; then
+	echo "KERNELVERSION is not set" >&2
+	exit 1
+fi
+
 # localversion* files in the build and source directory
 res="$(collect_files localversion*)"
 if test ! "$srctree" -ef .; then
@@ -127,4 +132,4 @@ elif [ "${LOCALVERSION+set}" != "set" ]; then
 	res="$res$(scm_version --short)"
 fi
 
-echo "$res"
+echo "${KERNELVERSION}${res}"