[elbe-devel] [PATCH 1/1] Fix Filesystem mkdir method
dion at linutronix.de
dion at linutronix.de
Tue Jul 23 17:03:29 CEST 2019
From: Olivier Dion <dion at linutronix.de>
If one of the component of the path is a symlink, the 'os.makedirs'
call fails. Also, it leaks informations from the host to the target.
Using 'self.realpath' before calling 'os.makedirs' will ensure that:
- Path has no symbolic link in its part
- Path does not leak to another filesystem
This can easily be tested by using the 'armel-rescue-busybox-cpio'
example and adding the 'libjson-c3' package to the list of packages in
the target section. Here's the expected traceback:
----------------------------------------------------------------------
Build failed
Traceback (most recent call last):
File "/var/cache/elbe/devel/elbepack/asyncworker.py", line 158, in execute
skip_pbuild=self.skip_pbuilder)
File "/var/cache/elbe/devel/elbepack/elbeproject.py", line 546, in build
self.log, self.get_rpcaptcache())
File "/var/cache/elbe/devel/elbepack/efilesystem.py", line 79, in extract_target
copy_filelist(src, file_list, dst)
File "/var/cache/elbe/devel/elbepack/efilesystem.py", line 32, in copy_filelist
dst.mkdir(f)
File "/var/cache/elbe/devel/elbepack/filesystem.py", line 89, in mkdir
os.makedirs(self.fname(path))
File "/usr/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 2] No such file or directory: '/var/cache/elbe/e80a928e-443b-4801-b105-ddd29c48a1f3/target/lib/arm-linux-gnueabihf'
Exception:
[Errno 2] No such file or directory: '/var/cache/elbe/e80a928e-443b-4801-b105-ddd29c48a1f3/target/lib/arm-linux-gnueabihf'
----------------------------------------------------------------------
Signed-off-by: Olivier Dion <dion at linutronix.de>
---
elbepack/filesystem.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/elbepack/filesystem.py b/elbepack/filesystem.py
index e3076250..d7ed4b21 100644
--- a/elbepack/filesystem.py
+++ b/elbepack/filesystem.py
@@ -86,7 +86,7 @@ class Filesystem(object):
return os.path.lexists(self.fname(path))
def mkdir(self, path):
- os.makedirs(self.fname(path))
+ os.makedirs(self.realpath(path))
def readlink(self, path):
return os.readlink(self.fname(path))
--
2.11.0
More information about the elbe-devel
mailing list