From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AH8x226XOJ4FvMOy/sAO+iFDDr3Big2sDffF/rN8sHQByLpNK0pBNHf4ZP1zbce8OfQxJ4YYgMjj ARC-Seal: i=1; a=rsa-sha256; t=1519032102; cv=none; d=google.com; s=arc-20160816; b=Aqa6IXOF9owhix7PaY0R5zX1UdDAYPl4jYC3nQb4+GDkxGjxEKKoa3kVMpk3IND+i9 No1VXftTO9QOoUAHpenAkwiPhbC3Xy5qwTrYJMCYjySmf7qydY+/rmGdWMCq+m7qW6KX zmgbq1UbQHUmprL194/XEbzpHTKJ+wNbHDLbUhLjugaHzxTrzfKSptHSkMKXH8d50+PJ B7Oa1CwBua7aK8XSy2BkMCh7pHvrVr1CFoiXa/xkalJTne3Sk8p+SXdAN9eFDI8j5cOT vMVo0X1px777HhizoigiMubV1nwPOBO8kVYmlpuQspXVLN/EiCXDHiUeB+iDbyAzyF3R ATzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from:arc-authentication-results; bh=BjrqQYFkqdSFuLCHZmJGvnOZ6kzH4TFvO1Estp65Ouw=; b=A20R9LOE1nTlBNHi3y2Z4q/hc2bjb+ftu0f/PFfOy02g7VafpVwh+7lK3vvEqXO0A9 mwJlpFLdNhdz0NqIfJ/OM1Sn4ijDLJkooP3MnxRzMW4FJZKcxZ7d00Hv5zCeAreagYsT Esk/Blu5tMFBIzjMoBDxSE1Othwx5n/JbcLtqxltGbBtK+xfJWd4S1g9SZmg/WF+iD2j rA45E6U8TDFZTb75VztIK7UQpHGMZ7XmyHCxX8G6oOXoEZNqaQ/zl6QL1VZxk/ec7A4z 6U69YSH/HOKeZUnpYOu2CC3KEWWiMlDpPaAvNeg458pbq+bUahJOYLTEMNxS9mAHBrtu sBDg== ARC-Authentication-Results: i=1; mx.google.com; spf=softfail (google.com: domain of transitioning richard@nod.at does not designate 109.75.188.150 as permitted sender) smtp.mailfrom=richard@nod.at Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning richard@nod.at does not designate 109.75.188.150 as permitted sender) smtp.mailfrom=richard@nod.at From: Richard Weinberger To: linux-kernel@vger.kernel.org Cc: gregkh@linuxfoundation.org, kstewart@linuxfoundation.org, npiggin@gmail.com, yamada.masahiro@socionext.com, keescook@chromium.org, akpm@linux-foundation.org, david@sigma-star.at, kbuild-all@01.org, Richard Weinberger , Sam Ravnborg , Arnaud Lacombe , Nick Bowler , Michal Marek , Nicolas Pitre , Rusty Russell Subject: [PATCH v2] kbuild: Don't source kernel config Date: Mon, 19 Feb 2018 10:22:45 +0100 Message-Id: <20180219092245.26404-1-richard@nod.at> X-Mailer: git-send-email 2.13.6 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1592820606337824892?= X-GMAIL-MSGID: =?utf-8?q?1592820606337824892?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: Don't source the kernel config file in shell scripts. The config file is not a shell script and often imported from untrusted sources. What could possible go wrong? ;-) Instead, read config file line by line and access config entries using a bash array. Cc: Sam Ravnborg Cc: Arnaud Lacombe Cc: Nick Bowler Cc: Michal Marek Cc: Nicolas Pitre Cc: Rusty Russell Fixes: 23121ca2b56b ("kbuild: create/adjust generated/autoksyms.h") Fixes: 1f2bfbd00e46 ("kbuild: link of vmlinux moved to a script") Signed-off-by: Richard Weinberger --- Changes since v1: - Fixed out of tree build --- scripts/adjust_autoksyms.sh | 13 +++---------- scripts/importkconf.sh | 14 ++++++++++++++ scripts/link-vmlinux.sh | 23 ++++++++--------------- 3 files changed, 25 insertions(+), 25 deletions(-) create mode 100755 scripts/importkconf.sh diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh index 513da1a4a2da..b72a8a0bf08a 100755 --- a/scripts/adjust_autoksyms.sh +++ b/scripts/adjust_autoksyms.sh @@ -39,14 +39,7 @@ case "$KBUILD_VERBOSE" in esac # We need access to CONFIG_ symbols -case "${KCONFIG_CONFIG}" in -*/*) - . "${KCONFIG_CONFIG}" - ;; -*) - # Force using a file from the current directory - . "./${KCONFIG_CONFIG}" -esac +. ${KBUILD_SRC}/scripts/importkconf.sh # In case it doesn't exist yet... if [ -e "$cur_ksyms_file" ]; then touch "$cur_ksyms_file"; fi @@ -62,14 +55,14 @@ EOT [ "$(ls -A "$MODVERDIR")" ] && sed -ns -e '3{s/ /\n/g;/^$/!p;}' "$MODVERDIR"/*.mod | sort -u | while read sym; do - if [ -n "$CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX" ]; then + if [ -n "${KERNEL_CONFIG[CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX]}" ]; then sym="${sym#_}" fi echo "#define __KSYM_${sym} 1" done >> "$new_ksyms_file" # Special case for modversions (see modpost.c) -if [ -n "$CONFIG_MODVERSIONS" ]; then +if [ -n "${KERNEL_CONFIG[CONFIG_MODVERSIONS]}" ]; then echo "#define __KSYM_module_layout 1" >> "$new_ksyms_file" fi diff --git a/scripts/importkconf.sh b/scripts/importkconf.sh new file mode 100755 index 000000000000..755a9a2e9c65 --- /dev/null +++ b/scripts/importkconf.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# +# helper script which reads all kconfig keys from the kernel .config file into +# a bash associative array. +# By testing ${KERNEL_CONFIG[CONFIG_FOO_BAR]} shell scripts can check whether +# CONFIG_FOO_BAR is set in .config or not. +# + +declare -A KERNEL_CONFIG + +for cfg_ent in $(awk -F= '/^CONFIG_[A-Z0-9_]+=/{print $1}' < ${KCONFIG_CONFIG}) +do + KERNEL_CONFIG[${cfg_ent}]="$cfg_ent" +done diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index c0d129d7f430..f48231f16c2f 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -55,7 +55,7 @@ info() # archive_builtin() { - if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then + if [ -n "${KERNEL_CONFIG[CONFIG_THIN_ARCHIVES]}" ]; then info AR built-in.o rm -f built-in.o; ${AR} rcsTP${KBUILD_ARFLAGS} built-in.o \ @@ -70,7 +70,7 @@ modpost_link() { local objects - if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then + if [ -n "${KERNEL_CONFIG[CONFIG_THIN_ARCHIVES]}" ]; then objects="--whole-archive \ built-in.o \ --no-whole-archive \ @@ -96,7 +96,7 @@ vmlinux_link() local objects if [ "${SRCARCH}" != "um" ]; then - if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then + if [ -n "${KERNEL_CONFIG[CONFIG_THIN_ARCHIVES]}" ]; then objects="--whole-archive \ built-in.o \ --no-whole-archive \ @@ -116,7 +116,7 @@ vmlinux_link() ${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \ -T ${lds} ${objects} else - if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then + if [ -n "${KERNEL_CONFIG[CONFIG_THIN_ARCHIVES]}" ]; then objects="-Wl,--whole-archive \ built-in.o \ -Wl,--no-whole-archive \ @@ -226,14 +226,7 @@ if [ "$1" = "clean" ]; then fi # We need access to CONFIG_ symbols -case "${KCONFIG_CONFIG}" in -*/*) - . "${KCONFIG_CONFIG}" - ;; -*) - # Force using a file from the current directory - . "./${KCONFIG_CONFIG}" -esac +. ${KBUILD_SRC}/scripts/importkconf.sh # Update version info GEN .version @@ -259,7 +252,7 @@ ${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o kallsymso="" kallsyms_vmlinux="" -if [ -n "${CONFIG_KALLSYMS}" ]; then +if [ -n "${KERNEL_CONFIG[CONFIG_KALLSYMS]}" ]; then # kallsyms support # Generate section listing all symbols and add it into vmlinux @@ -312,7 +305,7 @@ fi info LD vmlinux vmlinux_link "${kallsymso}" vmlinux -if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then +if [ -n "${KERNEL_CONFIG[CONFIG_BUILDTIME_EXTABLE_SORT]}" ]; then info SORTEX vmlinux sortextable vmlinux fi @@ -321,7 +314,7 @@ info SYSMAP System.map mksysmap vmlinux System.map # step a (see comment above) -if [ -n "${CONFIG_KALLSYMS}" ]; then +if [ -n "${KERNEL_CONFIG[CONFIG_KALLSYMS]}" ]; then mksysmap ${kallsyms_vmlinux} .tmp_System.map if ! cmp -s System.map .tmp_System.map; then -- 2.13.6