[Buildroot] [PATCH v7 03/18] core: re-enter make if $(CURDIR) or $(O) are not absolute canonical path

Matthew Weber matt at thewebers.ws
Mon Mar 21 01:45:30 UTC 2016


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>
>
> --
> Thanks,
> Matt

Sorry, didn't CC.  2nd attempt, see above.

-- 
Thanks,
Matt



More information about the buildroot mailing list