From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4620CA00C5 for ; Thu, 1 Dec 2022 11:09:18 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2824E42D11; Thu, 1 Dec 2022 11:09:18 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id B2CF442D0D for ; Thu, 1 Dec 2022 11:09:16 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1669889356; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=z69sQZScjkogp1ggszv9pSQlpfcTEG1b+XOtHmWP/+M=; b=M8YXqL5NRe3HUV0oYfCLSDI8ODhp6LLOPFVo1RZzWL3FJfcnoomAv9shZqmjskvRjyHKAr SXvibnQ8LeE8hO8i0yJs6AYsSPJZiWZfPEogrqQDvhEFzX1b3QJfh47+jKR2bCuKqd3I9x CNNSStmOIyCP+TwTigf0GGDvCUeLjhU= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-672-bxa6-29yPJiIMLQQgriIGA-1; Thu, 01 Dec 2022 05:09:12 -0500 X-MC-Unique: bxa6-29yPJiIMLQQgriIGA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7D1413C01D90; Thu, 1 Dec 2022 10:09:12 +0000 (UTC) Received: from localhost.localdomain (ovpn-192-86.brq.redhat.com [10.40.192.86]) by smtp.corp.redhat.com (Postfix) with ESMTP id 866752028CE4; Thu, 1 Dec 2022 10:09:10 +0000 (UTC) From: David Marchand To: dev@dpdk.org Cc: ferruh.yigit@amd.com, stable@dpdk.org, Luca Boccassi , Thomas Monjalon , Bruce Richardson , =?UTF-8?q?Abdullah=20=C3=96mer=20Yama=C3=A7?= Subject: [PATCH v3 1/2] drivers: fix symbol exports when map is omitted Date: Thu, 1 Dec 2022 11:08:46 +0100 Message-Id: <20221201100847.322141-1-david.marchand@redhat.com> In-Reply-To: <20221129140032.35940-1-david.marchand@redhat.com> References: <20221129140032.35940-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org ld exports any global symbol by default if no version script is passed. As a consequence, the incriminated change let any public symbol leak out of the driver shared libraries. Hide again those symbols by providing a default map file which unexports any global symbol using a local: * catch-all statement. The checks are skipped for this default map file as it is intentionnally an empty map (see commit b67bdda86cd4 ("devtools: catch empty symbol maps")) and there is nothing else to check in this map. Fixes: 7dde9c844a37 ("drivers: omit symbol map when unneeded") Cc: stable@dpdk.org Reported-by: Luca Boccassi Signed-off-by: David Marchand Tested-by: Ferruh Yigit --- Changes since v2: - separated the Windows cleanup in next patch, Changes since v1: - excluded drivers/version.map from maps checked by default in check-symbol-maps.sh, --- devtools/check-symbol-maps.sh | 2 +- drivers/meson.build | 68 +++++++++++++++++++---------------- drivers/version.map | 3 ++ 3 files changed, 41 insertions(+), 32 deletions(-) create mode 100644 drivers/version.map diff --git a/devtools/check-symbol-maps.sh b/devtools/check-symbol-maps.sh index 0a6062de26..8c116bfa9c 100755 --- a/devtools/check-symbol-maps.sh +++ b/devtools/check-symbol-maps.sh @@ -8,7 +8,7 @@ cd $(dirname $0)/.. export LC_ALL=C if [ $# = 0 ] ; then - set -- $(find lib drivers -name '*.map') + set -- $(find lib drivers -name '*.map' -a ! -path drivers/version.map) fi ret=0 diff --git a/drivers/meson.build b/drivers/meson.build index c4ff3ff1ba..5188302057 100644 --- a/drivers/meson.build +++ b/drivers/meson.build @@ -210,40 +210,46 @@ foreach subpath:subdirs lk_deps = [] lk_args = [] - if fs.is_file(version_map) - def_file = custom_target(lib_name + '_def', - command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'], - input: version_map, - output: '@0@_exports.def'.format(lib_name)) - - mingw_map = custom_target(lib_name + '_mingw', - command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'], - input: version_map, - output: '@0@_mingw.map'.format(lib_name)) - - lk_deps = [version_map, def_file, mingw_map] - if is_windows - if is_ms_linker - lk_args = ['-Wl,/def:' + def_file.full_path()] - if meson.version().version_compare('<0.54.0') - lk_args += ['-Wl,/implib:drivers\\' + implib] - endif - else - lk_args = ['-Wl,--version-script=' + mingw_map.full_path()] + if not fs.is_file(version_map) + version_map = '@0@/version.map'.format(meson.current_source_dir()) + lk_deps += [version_map] + else + lk_deps += [version_map] + if not is_windows and developer_mode + # on unix systems check the output of the + # check-symbols.sh script, using it as a + # dependency of the .so build + lk_deps += custom_target(lib_name + '.sym_chk', + command: [check_symbols, version_map, '@INPUT@'], + capture: true, + input: static_lib, + output: lib_name + '.sym_chk') + endif + endif + + def_file = custom_target(lib_name + '_def', + command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'], + input: version_map, + output: '@0@_exports.def'.format(lib_name)) + + mingw_map = custom_target(lib_name + '_mingw', + command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'], + input: version_map, + output: '@0@_mingw.map'.format(lib_name)) + + lk_deps += [def_file, mingw_map] + + if is_windows + if is_ms_linker + lk_args = ['-Wl,/def:' + def_file.full_path()] + if meson.version().version_compare('<0.54.0') + lk_args += ['-Wl,/implib:drivers\\' + implib] endif else - lk_args = ['-Wl,--version-script=' + version_map] - if developer_mode - # on unix systems check the output of the - # check-symbols.sh script, using it as a - # dependency of the .so build - lk_deps += custom_target(lib_name + '.sym_chk', - command: [check_symbols, version_map, '@INPUT@'], - capture: true, - input: static_lib, - output: lib_name + '.sym_chk') - endif + lk_args = ['-Wl,--version-script=' + mingw_map.full_path()] endif + else + lk_args = ['-Wl,--version-script=' + version_map] endif shared_lib = shared_library(lib_name, sources, diff --git a/drivers/version.map b/drivers/version.map new file mode 100644 index 0000000000..78c3585d7c --- /dev/null +++ b/drivers/version.map @@ -0,0 +1,3 @@ +DPDK_23 { + local: *; +}; -- 2.38.1