[U-Boot] [PATCH] binman: ensure temp filenames don't collide

Stephen Warren swarren at wwwdotorg.org
Thu Jul 19 21:14:49 UTC 2018


On 07/18/2018 07:32 PM, Simon Glass wrote:
> Hi Stephen,
> 
> On 16 July 2018 at 16:51, Stephen Warren <swarren at wwwdotorg.org> wrote:
>> From: Stephen Warren <swarren at nvidia.com>
>>
>> The U-Boot Makefile can invoke binman multiple times in parallel. This
>> is problematic because binman uses a static hard-coded temporary file
>> name. If two instances of binman use that filename at the same time, one
>> writing one reading, they may silently read the wrong content or actively
>> detect missing signatures and error out the build process. Fix this by
>> using a PID-specific filename instead.
>>
>> Signed-off-by: Stephen Warren <swarren at nvidia.com>
>> ---
>>  tools/binman/control.py | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/tools/binman/control.py b/tools/binman/control.py
>> index a40b300fdacb..515999278949 100644
>> --- a/tools/binman/control.py
>> +++ b/tools/binman/control.py
>> @@ -121,7 +121,7 @@ def Binman(options, args):
>>              # output into a file in our output directly. Then scan it for use
>>              # in binman.
>>              dtb_fname = fdt_util.EnsureCompiled(dtb_fname)
>> -            fname = tools.GetOutputFilename('u-boot-out.dtb')
>> +            fname = tools.GetOutputFilename('u-boot-out.dtb') + str(os.getpid())
>>              with open(dtb_fname) as infd:
>>                  with open(fname, 'wb') as outfd:
>>                      outfd.write(infd.read())
>> --
>> 2.18.0
>>
> 
> But the output directory is itself (normally) a temporary dir. That
> determines the directly which GetOutputFilename() uses. So I am not
> sure how this can happen in practice?

IIRC, the output directory for all 3 files was the same; the root of the
build output directory. Perhaps the fact I run "make O=build-xxx" rather
than just "make" makes a difference?


More information about the U-Boot mailing list