[Buildroot] [PATCH v7 03/18] core: re-enter make if $(CURDIR) or $(O) are not absolute canonical path
Samuel Martin
s.martin49 at gmail.com
Mon Mar 21 05:21:34 UTC 2016
On Mon, Mar 21, 2016 at 2:45 AM, Matthew Weber <matt at thewebers.ws> wrote:
> Samuel, All,
>
> On Sun, Mar 20, 2016 at 8:44 PM, Matthew Weber <matt at thewebers.ws> wrote:
>> Samuel,
>>
>> On Wed, Mar 9, 2016 at 4:58 PM, Samuel Martin <s.martin49 at gmail.com> wrote:
>>> When $(CURDIR) or $(O) contain symlinks (or mount-bind) in their path,
>>> they can be resolved differently, depending on each package build-system
>>> (whether it uses the given paths or get the absolute canonical ones).
>>>
>>> Thus, to make easier tracking down host machine paths leaking into the
>>> host, target or staging trees, the CURDIR and O variables are set to
>>> their absolute canonical paths.
>>>
>>> Note that this change takes care of the makefile wrapper installed in
>>> $(O) to avoid unneeded make recursion.
>>>
>>> Signed-off-by: Samuel Martin <s.martin49 at gmail.com>
>>>
>>> ---
>>> changes v6->v7:
>>> - none
>>>
>>> changes v5->v6:
>>> - new patch
>>> ---
>>> Makefile | 22 ++++++++++++++++++----
>>> 1 file changed, 18 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/Makefile b/Makefile
>>> index 98c8dc7..52a92f6 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -26,16 +26,30 @@
>>>
>>> # Trick for always running with a fixed umask
>>> UMASK = 0022
>>> -ifneq ($(shell umask),$(UMASK))
>>> +
>>> +# Check if we need to re-enter make for one or several of the following reasons:
>>> +# 1- Wrong (too restrictive) umask:
>>> +# This prevents Buildroot and packages from creating files and directories.
>>> +# 2- CWD (i.e. $(CURDIR)) not being the absolute canonical path:
>>> +# This makes harder tracking and fixing host machine path leaks.
>>> +# 3- Output location (i.e. $(O)) not being the absolute canonical path:
>>> +# This makes harder tracking and fixing host machine path leaks.
>>> +#
>>> +# Note:
>>> +# - remove the trailing '/.' from $(O) as it can be added by the makefile
>>> +# wrapper installed in the $(O).
>>> +ifneq ($(shell umask):$(CURDIR):$(patsubst %/.,%,$(O)),$(UMASK):$(realpath $(CURDIR)):$(realpath $(O)))
>>> .PHONY: _all $(MAKECMDGOALS)
>>>
>>> $(MAKECMDGOALS): _all
>>> @:
>>>
>>> _all:
>>> - @umask $(UMASK) && $(MAKE) --no-print-directory $(MAKECMDGOALS)
>>> + umask $(UMASK) && \
>>> + $(MAKE) -C $(realpath $(CURDIR)) --no-print-directory \
>>> + $(MAKECMDGOALS) O=$(realpath $(O))
>>
>> I've applied your v7 patches with these changes to the tip of
>> buildroot and currently run into the following error. I'm still
>> poking around trying to understand why.
>>
>> $ make V=1 qemu_x86_defconfig
>> umask 0022 && \
>> make -C /opt/buildroot --no-print-directory \
>> qemu_x86_defconfig O=
>> mkdir: missing operand
>> Try 'mkdir --help' for more information.
>> Makefile:156: *** output directory "" does not exist. Stop.
>> Makefile:48: recipe for target '_all' failed
>> make: *** [_all] Error 2
>>
>> <snip>
hmm... :-/
I cannot reproduce your issue (running make from inside or outside the
Buildroot directory).
Did you apply the whole series, or have you narrowed down this issue
to this patch?
>>
>> --
>> Thanks,
>> Matt
>
> Sorry, didn't CC. 2nd attempt, see above.
>
> --
> Thanks,
> Matt
Thanks for the feedback
Regards,
--
Samuel
More information about the buildroot
mailing list