lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250127144849.744ec7e0@booty>
Date: Mon, 27 Jan 2025 14:48:49 +0100
From: Luca Ceresoli <luca.ceresoli@...tlin.com>
To: Namhyung Kim <namhyung@...nel.org>
Cc: Peter Zijlstra <peterz@...radead.org>, Ingo Molnar <mingo@...hat.com>,
 Arnaldo Carvalho de Melo <acme@...nel.org>, Mark Rutland
 <mark.rutland@....com>, Alexander Shishkin
 <alexander.shishkin@...ux.intel.com>, Jiri Olsa <jolsa@...nel.org>, Ian
 Rogers <irogers@...gle.com>, Adrian Hunter <adrian.hunter@...el.com>, Andi
 Kleen <ak@...ux.intel.com>, Thomas Petazzoni
 <thomas.petazzoni@...tlin.com>, Alexis Lothoré
 <alexis.lothore@...tlin.com>, Arnaldo Carvalho de Melo <acme@...hat.com>,
 linux-perf-users@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] perf build: fix in-tree build

Hello Namhyung Kim, 

thanks for having a look!

On Sun, 26 Jan 2025 13:00:10 -0800
Namhyung Kim <namhyung@...nel.org> wrote:

> Hello,
> 
> On Fri, Jan 24, 2025 at 02:06:08PM +0100, Luca Ceresoli wrote:
> > Building perf in-tree is broken after commit 890a1961c812 ("perf tools:
> > Create source symlink in perf object dir") which added a 'source' symlink
> > in the output dir pointing to the source dir.  
> 
> I cannot reproduce it - both `make -C tools/perf` and `cd tools/perf; make`
> work well for me.  What do you mean by in-tree build exactly?  Can you
> please share your command line and the error messages?

I have narrowed down my reproducer script from the initial report to a
fairly minimal one, and here it is:

------------------------8<------------------------
#!/bin/sh

set -eu

OUT_DIR=${1:-$(pwd)/tools/perf}
DESTDIR=/tmp/aaa

RET=0

echo "Kernel version: $(git describe)"
echo "OUT_DIR = ${OUT_DIR}"
echo "DESTDIR = ${DESTDIR}"
echo

git clean -xdfq
rm -fr ${DESTDIR}/

# Only for out of tree builds: clear the build dir
if ! echo ${OUT_DIR} | grep -q "tools/perf"; then
    rm -fr ${OUT_DIR}
    mkdir -p ${OUT_DIR}
fi

LINUX_MAKE_FLAGS="\
    -C tools/perf \
    O=${OUT_DIR} \
    DESTDIR=${DESTDIR} \
"

make ${LINUX_MAKE_FLAGS}
make ${LINUX_MAKE_FLAGS} install

echo
    
if [ -h ${OUT_DIR}/perf ]; then
    echo "*** ERROR: ${OUT_DIR}/perf is a symlink, should be an exectuable file: ***" >&2
    ls -l ${OUT_DIR}/perf
    RET=255
fi

if ! find ${DESTDIR}/ -name perf -not -type d | xargs file | grep 'ELF.*executable'; then
    echo "*** ERROR: perf executable not preseint in install dir ${DESTDIR} ***" >&2
    RET=255
fi

exit $RET
------------------------8<------------------------

Just put it outside of your kernel dir (or it will be removed by the
'git clean' command) and run it in your kernel source dir. E.g. right
now I'm doing:

cd <kernel dir>
git checkout v6.13
../build-perf

You should see it failing as:

*** ERROR: /.../linux/tools/perf/perf is a symlink, should be an exectuable file: ***
lrwxrwxrwx 1 user user 39 Jan 27 14:10 /.../linux/tools/perf/perf -> /.../linux/tools/perf
*** ERROR: perf executable not preseint in install dir /tmp/aaa ***

Note that in the broken case the kernel build continues and returns 0,
but there is no perf exectuable.

PS:

And after having come up with the above script, I also found that the
build succeeds with the following change:

------------------------8<------------------------
@@ -24,11 +24,10 @@
 LINUX_MAKE_FLAGS="\
     -C tools/perf \
     O=${OUT_DIR} \
-    DESTDIR=${DESTDIR} \
 "
 
 make ${LINUX_MAKE_FLAGS}
-make ${LINUX_MAKE_FLAGS} install
+make ${LINUX_MAKE_FLAGS} DESTDIR=${DESTDIR} install
------------------------8<------------------------

In other words:

 * This fails:
     make ${LINUX_MAKE_FLAGS} DESTDIR=${DESTDIR}
     make ${LINUX_MAKE_FLAGS} DESTDIR=${DESTDIR} install
 * This succeeds:
     make ${LINUX_MAKE_FLAGS}
     make ${LINUX_MAKE_FLAGS} DESTDIR=${DESTDIR} install

The only difference is the presence of 'DESTDIR' in the compile command.

My understanding and expectation is that DESTDIR has no effect on the
make process except in the 'install' target. This is clearly not
happening here.

I have not yet found an obvious reason why 'DESTDIR' is special in the
compilation stage, after a quick look.

Best regards,
Luca

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ