Fix segfault when iterating directories 83/244983/5
authorMateusz Cegielka <m.cegielka@samsung.com>
Mon, 28 Sep 2020 16:25:51 +0000 (18:25 +0200)
committerMateusz Cegielka <m.cegielka@samsung.com>
Fri, 2 Oct 2020 11:55:01 +0000 (13:55 +0200)
commit652c7df4bdfec136ff6d691de14080324cbdc91a
treeba523e89915ef2d211aae957dfe8da6510636816
parente88786fe6ee7e780255e42e85a5ea450fc4cc637
Fix segfault when iterating directories

Code used for iterating directories recursively with Boost calls .pop()
if the iteration returns an error, so that it exits the current
directory and continues the iteration. However, this can cause
segmentation faults, and if it doesn't, it causes some other directories
to be indeterministically skipped instead.

What is the proper way to do this then...? Boost apparently does not
place too much focus on stability, because the behaviour is different in
every version I checked (1.65.0 from Ubuntu 18.04, 1.71.0 from Tizen and
1.72.0 from Arch). Also, since 1.72.0 it'll be impossible to both
continue the iteration and log that anything was wrong.

I changed the behaviour to stop iteration on errors and return an
internal error instead. The immediate reason is making sure a Boost
update won't break this code, but a system service receiving filesystem
errors in directories it created is a pathological case indicating other
problems with system configuration that should not be accepted.

Change-Id: I69b7fb75f2b58d0ca1418b6bbb3ccd2480296918
src/common/mount-namespace.cpp
src/common/service_impl.cpp