[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