svn security bugs

本文详细介绍了Subversion版本1.6.22及之前、1.7.x及1.8.x分支中存在的一项安全漏洞,该漏洞可能导致任意代码执行。文章提供了已知受影响的版本范围、已知修复版本、漏洞细节以及建议的解决方案和缓解措施。

http://subversion.apache.org/security/CVE-2013-2088-advisory.txt

   Subversion releases up to 1.6.22 (inclusive), and 1.7.x tags up to 1.7.10
   (inclusive, but excepting 1.7.x releases made from those tags), 
   include a contrib/ script prone to shell injection by authenticated users,
   which could result in arbitrary code execution.

Summary:
========

Subversion's contrib/ directory contains two example hook scripts, which
use 'svnlook changed' to examine a revision or transaction and then pass
those paths as arguments to further 'svnlook' commands, without properly
escaping the command-line.

The contrib/ directory ships in 1.6.x releases, and although it does not
ship in 1.7.x or 1.8.x releases, is included in the 1.7.x and 1.8.x
release branches and tags in Subversion's repository.

Known vulnerable:
=================

  Subversion releases through 1.6.22 (inculsive)
  Repository revisions branches/1.7.x until r1485487
  Repository revisions branches/1.8.x until r1485487
  Subversion tags through 1.7.10 (inclusive)

Known fixed:
============

  Releases:
  Subversion 1.6.23
  Subversion 1.7.0
  Subversion 1.8.0

  Tags:
  Subversion 1.6.23
  Subversion 1.7.11
  Subversion 1.8.0-rc3
  Subversion 1.8.0

Details:
========

  The script contrib/hook-scripts/check-mime-type.pl does not escape
  argv arguments to 'svnlook' that start with a hyphen.  This could be
  used to cause 'svnlook', and hence check-mime-type.pl, to error out.

  The script contrib/hook-scripts/svn-keyword-check.pl parses filenames
  from the output of 'svnlook changed' and passes them to a further
  shell command (equivalent to the 'system()' call of the C standard
  library) without escaping them.  This could be used to run arbitrary
  shell commands in the context of the user whom the pre-commit script
  runs as (the user who owns the repository).

Severity:
=========

  CVSSv2 Base Score: 7.1
  CVSSv2 Base Vector: AV:N/AC:H/Au:S/C:C/I:C/A:C  

  Most installations of Subversion do not use these contrib scripts, so
  while the score above is high, we suspect that very few sites are impacted.
  However, if you do use these scripts, this is a serious issue.

  The check-mime-type.pl issue could only be a problem if 'svnlook' was
  patched or if a child of the repository root had a name starting with
  a '-', so it is ranked as low severity.

  The svn-keyword-check.pl issue could be used by any authenticated
  committer to run shell commands as the server.  Anonymous users
  typically do not have commit access so cannot exploit this.  On the
  other hand, those who can exploit this could, for example, delete
  the repository from the server disk.

Recommendations:
================

  We recommend all users to apply the attached patch.  The hook scripts
  have not changed since 1.6.x, so using their latest versions from the
  repository is (as of this writing) equivalent to applying the patch.

  The fix will be included in the 1.6.23, 1.7.11, and 1.8.0 releases,
  when those are made.

  A workaround is to ensure that all in-repository filenames are shell-safe,
  e.g., match the regular expression
      ^[A-Za-z0-9_:][A-Za-z0-9_:/-]+$
  .  This can be implemented using the provided [validate-files.py] hook
  script, by providing a command= that checks the environment variable "FILE"
  against that pattern; for example, command= might point to the following
  script:

      #!/usr/bin/env python
      import os, re, sys
      re = r'^[A-Za-z0-9_:][A-Za-z0-9_:/-]+$'
      sys.exit(re.compile(re).match(os.getenv("FILE", " ")))

References:
===========

  CVE-2013-2088  (Subversion)

Reported by:
============

Daniel Shahaf, elego Software Solutions GmbH

Patches:
========

  Patch against 1.6.21, 1.7.x branch/tags, and 1.8.x branch:
[[[
Index: contrib/hook-scripts/check-mime-type.pl
===================================================================
--- contrib/hook-scripts/check-mime-type.pl	(revision 1484585)
+++ contrib/hook-scripts/check-mime-type.pl	(working copy)
@@ -120,7 +120,7 @@ foreach my $path ( @files_added )
 		# Parse the complete list of property values of the file $path to extract
 		# the mime-type and eol-style
 		foreach my $prop (&read_from_process($svnlook, 'proplist', $repos, '-t',
-		                  $txn, '--verbose', $path))
+		                  $txn, '--verbose', '--', $path))
 			{
 				if ($prop =~ /^\s*svn:mime-type : (\S+)/)
 					{
@@ -187,7 +187,7 @@ sub safe_read_from_pipe
       croak "$0: safe_read_from_pipe passed no arguments.\n";
     }
   print "Running @_\n";
-  my $pid = open(SAFE_READ, '-|');
+  my $pid = open(SAFE_READ, '-|', @_);
   unless (defined $pid)
     {
       die "$0: cannot fork: $!\n";
Index: contrib/hook-scripts/svn-keyword-check.pl
===================================================================
--- contrib/hook-scripts/svn-keyword-check.pl	(revision 1484585)
+++ contrib/hook-scripts/svn-keyword-check.pl	(working copy)
@@ -141,7 +141,7 @@ sub check {
                 return 1;
             } else {
                 my @keywords = get_svnkeywords($file);
-                my $fh = _pipe("$svnlook cat $flag $value $repos $file");
+                my $fh = _pipe($svnlook, qw/cat/, $flag, $value, $repos, '--', $file);
                 while (my $line = <$fh>) {
                     foreach my $keyword (@keywords) {
                         if ($line =~ m/$keyword/) {
@@ -168,7 +168,7 @@ sub file_is_binary {
         return 0;
     }
     if (has_svn_property($file, "svn:mime-type")) {
-        my ($mimetype) = read_from_process("$svnlook propget $flag $value $repos svn:mime-type $file");
+        my ($mimetype) = read_from_process($svnlook, qw/propget/, $flag, $value, $repos, 'svn:mime-type', '--', $file);
         chomp($mimetype);
         $mimetype =~ s/^\s*(.*)/$1/;
         if ($mimetype =~ m/^text\//) {
@@ -186,7 +186,7 @@ sub file_is_binary {
 # Return a list of svn:keywords on a file
 sub get_svnkeywords {
     my $file = shift;
-    my @lines = read_from_process("$svnlook propget $flag $value $repos svn:keywords $file");
+    my @lines = read_from_process($svnlook, qw/propget/, $flag, $value, $repos, 'svn:keywords', '--', $file);
     my @returnlines;
     foreach my $line (@lines) {
         $line =~ s/\s+/ /;
@@ -199,7 +199,7 @@ sub get_svnkeywords {
 sub has_svn_property {
     my $file = shift;
     my $keyword = shift;
-    my @proplist = read_from_process("$svnlook proplist $flag $value $repos $file");
+    my @proplist = read_from_process($svnlook, qw/proplist/, $flag, $value, $repos, '--', $file);
     foreach my $prop (@proplist) {
         chomp($prop);
         if ($prop =~ m/\b$keyword\b/) {
@@ -241,7 +241,7 @@ sub safe_read_from_pipe {
 # Return the filehandle as a glob so we can loop over it elsewhere.
 sub _pipe {
     local *SAFE_READ;
-    my $pid = open(SAFE_READ, '-|');
+    my $pid = open(SAFE_READ, '-|', @_);
     unless (defined $pid) {
         die "$0: cannot fork: $!\n";
     }
]]]

-vfpv4/base-files/CONTROL/conffiles || echo "${conffile##/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files}" >> /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/CONTROL/conffiles; fi done mkdir -p /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/etc/opkg; ( echo 'src/gz %d_core %U/targets/%S/packages'; echo 'src/gz %d_base %U/packages/%A/base'; echo 'src/gz %d_afc %U/packages/%A/afc'; echo 'src/gz %d_apple_homekit %U/packages/%A/apple_homekit'; echo 'src/gz %d_art2 %U/packages/%A/art2'; echo 'src/gz %d_ath10k_firmware %U/packages/%A/ath10k_firmware'; echo 'src/gz %d_athdiag %U/packages/%A/athdiag'; echo 'src/gz %d_athtestcmd %U/packages/%A/athtestcmd'; echo 'src/gz %d_bluetooth %U/packages/%A/bluetooth'; echo 'src/gz %d_bluetopia %U/packages/%A/bluetopia'; echo 'src/gz %d_bootloader %U/packages/%A/bootloader'; echo 'src/gz %d_btdaemon %U/packages/%A/btdaemon'; echo 'src/gz %d_csrmesh %U/packages/%A/csrmesh'; echo 'src/gz %d_data_modem_monitor %U/packages/%A/data_modem_monitor'; echo 'src/gz %d_healthmonitor %U/packages/%A/healthmonitor'; echo 'src/gz %d_hyfi %U/packages/%A/hyfi'; echo 'src/gz %d_ieee1905_security %U/packages/%A/ieee1905_security'; echo 'src/gz %d_ioe_bridges %U/packages/%A/ioe_bridges'; echo 'src/gz %d_kickstart %U/packages/%A/kickstart'; echo 'src/gz %d_lte_data_oss %U/packages/%A/lte_data_oss'; echo 'src/gz %d_lte_data_prop %U/packages/%A/lte_data_prop'; echo 'src/gz %d_luci %U/packages/%A/luci'; echo 'src/gz %d_minidump %U/packages/%A/minidump'; echo 'src/gz %d_networking %U/packages/%A/networking'; echo 'src/gz %d_nss %U/packages/%A/nss'; echo 'src/gz %d_nss_cust %U/packages/%A/nss_cust'; echo 'src/gz %d_nss_host %U/packages/%A/nss_host'; echo 'src/gz %d_nss_prop %U/packages/%A/nss_prop'; echo 'src/gz %d_nss_sap %U/packages/%A/nss_sap'; echo 'src/gz %d_nss_userspace %U/packages/%A/nss_userspace'; echo 'src/gz %d_odd %U/packages/%A/odd'; echo 'src/gz %d_packages %U/packages/%A/packages'; echo 'src/gz %d_platform_utils %U/packages/%A/platform_utils'; echo 'src/gz %d_qca %U/packages/%A/qca'; echo 'src/gz %d_qca_IOT %U/packages/%A/qca_IOT'; echo 'src/gz %d_qca_cp %U/packages/%A/qca_cp'; echo 'src/gz %d_qca_ezmesh %U/packages/%A/qca_ezmesh'; echo 'src/gz %d_qca_hk %U/packages/%A/qca_hk'; echo 'src/gz %d_qca_lib %U/packages/%A/qca_lib'; echo 'src/gz %d_qca_lit %U/packages/%A/qca_lit'; echo 'src/gz %d_qca_mad %U/packages/%A/qca_mad'; echo 'src/gz %d_qca_mcs %U/packages/%A/qca_mcs'; echo 'src/gz %d_qca_np %U/packages/%A/qca_np'; echo 'src/gz %d_qca_platform_utils %U/packages/%A/qca_platform_utils'; echo 'src/gz %d_qca_plc %U/packages/%A/qca_plc'; echo 'src/gz %d_qca_rsrcmgr %U/packages/%A/qca_rsrcmgr'; echo 'src/gz %d_qca_son_mem_debug %U/packages/%A/qca_son_mem_debug'; echo 'src/gz %d_qca_wapi %U/packages/%A/qca_wapi'; echo 'src/gz %d_qcom_utils_internal %U/packages/%A/qcom_utils_internal'; echo 'src/gz %d_qtip_server %U/packages/%A/qtip_server'; echo 'src/gz %d_routing %U/packages/%A/routing'; echo 'src/gz %d_shortcut_fe %U/packages/%A/shortcut_fe'; echo 'src/gz %d_sigma_dut %U/packages/%A/sigma_dut'; echo 'src/gz %d_sigma_dut_open %U/packages/%A/sigma_dut_open'; echo 'src/gz %d_snpe %U/packages/%A/snpe'; echo 'src/gz %d_ssdk %U/packages/%A/ssdk'; echo 'src/gz %d_thread %U/packages/%A/thread'; echo 'src/gz %d_wapid %U/packages/%A/wapid'; echo 'src/gz %d_whc %U/packages/%A/whc'; echo 'src/gz %d_wifi_debug_tools %U/packages/%A/wifi_debug_tools'; echo 'src/gz %d_wifi_fw_headers %U/packages/%A/wifi_fw_headers'; echo 'src/gz %d_wigig_firmware %U/packages/%A/wigig_firmware'; echo 'src/gz %d_wigig_utils %U/packages/%A/wigig_utils'; echo 'src/gz %d_wigig_utils_oss %U/packages/%A/wigig_utils_oss'; echo 'src/gz %d_wlan %U/packages/%A/wlan'; echo 'src/gz %d_wlan_hostapd %U/packages/%A/wlan_hostapd'; echo 'src/gz %d_wlan_iw %U/packages/%A/wlan_iw'; echo 'src/gz %d_wlan_open %U/packages/%A/wlan_open'; echo 'src/gz %d_wlan_utils %U/packages/%A/wlan_utils'; ) >> /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/etc/opkg/distfeeds.conf; /ge550v1/qca_95xx_12_2/staging_dir/host/bin/sed -i -e 's,%U,http://downloads.openwrt.org/releases/19.07-SNAPSHOT,g' -e 's,%V,19.07-SNAPSHOT,g' -e 's,%v,\L19.07-SNAPSHOT,g' -e 's,%C,12.02.2392,g' -e 's,%c,\L12.02.2392,g' -e 's,%D,OpenWrt,g' -e 's,%d,\LOpenWrt,g' -e 's,%R,12.02.2392,g' -e 's,%T,ipq95xx,g' -e 's,%S,ipq95xx/generic,g' -e 's,%A,aarch64_cortex-a73_neon-vfpv4,g' -e 's,%t,no-all busybox override,g' -e 's,%M,OpenWrt,g' -e 's,%m,https://openwrt.org/,g' -e 's,%b,https://bugs.openwrt.org/,g' -e 's,%u,https://openwrt.org/,g' -e 's,%s,https://forum.openwrt.org/,g' -e 's,%P,Generic,g' -e 's,%h,v0,g' /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/etc/opkg/distfeeds.conf cp -fpR /ge550v1/qca_95xx_12_2/qsdk-package/package/base-files//files/* /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/ find /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf export CROSS="aarch64-openwrt-linux-musl-" NO_RENAME=1 ; NM="aarch64-openwrt-linux-musl-nm" STRIP="/ge550v1/qca_95xx_12_2/staging_dir/host/bin/sstrip" STRIP_KMOD="/ge550v1/qca_95xx_12_2/scripts/strip-kmod.sh" PATCHELF="/ge550v1/qca_95xx_12_2/staging_dir/host/bin/patchelf" /ge550v1/qca_95xx_12_2/scripts/rstrip.sh /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files (cd /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/CONTROL; ( echo "$CONTROL"; printf "Description: "; echo "$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; ) > control; chmod 644 control; ( echo "#!/bin/sh"; echo "[ \"\${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; echo "[ -x "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_postinst \$0 \$@"; ) > postinst; ( echo "#!/bin/sh"; echo "[ -x "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_prerm \$0 \$@"; ) > prerm; chmod 0755 postinst prerm; echo "$V_Package_base_files_conffiles" > conffiles; ) install -d -m0755 /ge550v1/qca_95xx_12_2/bin/targets/ipq95xx/generic/packages /ge550v1/qca_95xx_12_2/scripts/ipkg-build -c -o 0 -g 0 /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files /ge550v1/qca_95xx_12_2/bin/targets/ipq95xx/generic/packages /ge550v1/qca_95xx_12_2/staging_dir/host/bin/find: '/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/etc/config/network': No such file or directory /ge550v1/qca_95xx_12_2/staging_dir/host/bin/find: '/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/etc/config/system': No such file or directory /ge550v1/qca_95xx_12_2/staging_dir/host/bin/find: '/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/etc/dropbear/': No such file or directory /ge550v1/qca_95xx_12_2/staging_dir/host/bin/find: '/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files/etc/profile.d': No such file or directory Packaged contents of /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/linux-ipq95xx_generic/base-files/ipkg-aarch64_cortex-a73_neon-vfpv4/base-files into /ge550v1/qca_95xx_12_2/bin/targets/ipq95xx/generic/packages/base-files_204.4-12.02.2392_aarch64_cortex-a73_neon-vfpv4.ipk echo "base-files" >> /ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/pkginfo/base-files.default.install make[4]: Leaving directory `/ge550v1/qca_95xx_12_2/package/base-files' time: package/base-files/compile#0.49#0.08#0.60 make[4]: Entering directory `/ge550v1/qca_95xx_12_2/package/boot/uboot-envtools' mkdir -p /ge550v1/qca_95xx_12_2/dl SHELL= flock /ge550v1/qca_95xx_12_2/tmp/.u-boot-2022.01.tar.bz2.flock -c ' /ge550v1/qca_95xx_12_2/scripts/download.pl "/ge550v1/qca_95xx_12_2/dl" "u-boot-2022.01.tar.bz2" "81b4543227db228c03f8a1bf5ddbc813b0bb8f6555ce46064ef721a6fc680413" "" "https://ftp.denx.de/pub/u-boot" ' rm -f /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01/.built touch /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01/.built_check CFLAGS="-Os -pipe -march=armv8-a -mcpu=cortex-a73+crypto -fno-caller-saves -fno-plt -Wa,--noexecstack -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -iremap/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01:u-boot-2022.01 -Wformat -Werror=format-security -fPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,now -Wl,-z,relro -I/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/usr/include -I/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/include -I/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/usr/include -I/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/include/fortify -I/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/include " CXXFLAGS="-Os -pipe -march=armv8-a -mcpu=cortex-a73+crypto -fno-caller-saves -fno-plt -Wa,--noexecstack -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -iremap/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01:u-boot-2022.01 -Wformat -Werror=format-security -fPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,now -Wl,-z,relro -I/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/usr/include -I/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/include -I/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/usr/include -I/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/include/fortify -I/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/include " LDFLAGS="-L/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/usr/lib -L/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/lib -L/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/usr/lib -L/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/lib -fPIC -specs=/ge550v1/qca_95xx_12_2/include/hardened-ld-pie.specs -znow -zrelro " make -C /ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01/. AR="aarch64-openwrt-linux-musl-gcc-ar" AS="aarch64-openwrt-linux-musl-gcc -c -Os -pipe -march=armv8-a -mcpu=cortex-a73+crypto -fno-caller-saves -fno-plt -Wa,--noexecstack -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -iremap/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01:u-boot-2022.01 -Wformat -Werror=format-security -fPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,now -Wl,-z,relro" LD=aarch64-openwrt-linux-musl-ld NM="aarch64-openwrt-linux-musl-gcc-nm" CC="aarch64-openwrt-linux-musl-gcc" GCC="aarch64-openwrt-linux-musl-gcc" CXX="aarch64-openwrt-linux-musl-g++" RANLIB="aarch64-openwrt-linux-musl-gcc-ranlib" STRIP=aarch64-openwrt-linux-musl-strip OBJCOPY=aarch64-openwrt-linux-musl-objcopy OBJDUMP=aarch64-openwrt-linux-musl-objdump SIZE=aarch64-openwrt-linux-musl-size CROSS="aarch64-openwrt-linux-musl-" ARCH="aarch64" TARGET_CFLAGS="-Os -pipe -march=armv8-a -mcpu=cortex-a73+crypto -fno-caller-saves -fno-plt -Wa,--noexecstack -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -iremap/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01:u-boot-2022.01 -Wformat -Werror=format-security -fPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,now -Wl,-z,relro" TARGET_LDFLAGS="-L/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/usr/lib -L/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/lib -L/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/usr/lib -L/ge550v1/qca_95xx_12_2/staging_dir/toolchain-aarch64/lib -fPIC -specs=/ge550v1/qca_95xx_12_2/include/hardened-ld-pie.specs -znow -zrelro" no-dot-config-targets=envtools envtools ; make[5]: Entering directory `/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01' Makefile:40: *** commands commence before first target. Stop. make[5]: Leaving directory `/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01' make[4]: *** [/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01/.built] Error 2 make[4]: Leaving directory `/ge550v1/qca_95xx_12_2/package/boot/uboot-envtools' time: package/boot/uboot-envtools/compile#0.14#0.05#0.19 make[3]: *** [package/boot/uboot-envtools/compile] Error 2 make[3]: Leaving directory `/ge550v1/qca_95xx_12_2' make[2]: *** [/ge550v1/qca_95xx_12_2/staging_dir/target-aarch64/stamp/.package_compile] Error 2 make[2]: Leaving directory `/ge550v1/qca_95xx_12_2' make[1]: *** [world] Error 2 make[1]: Leaving directory `/ge550v1/qca_95xx_12_2' make: *** [sdk] Error 2 huaxi@fd4bb9d5f3ca:/ge550v1/Iplatform/build$ 以上是make PRODUCT_NAME=ge550v1 sdk的输出,请分析其中的问题,首先/ge550v1/qca_95xx_12_2/build_dir/target-aarch64/u-boot-2022.01这个目录里的makefile肯定没有问题
09-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值