• Ian Rogers's avatar
    tools api fs: More thread safety for global filesystem variables · 97d5f2e9
    Ian Rogers authored
    Multiple threads, such as with "perf top", may race to initialize a
    file system path like hugetlbfs. The racy initialization of the path
    leads to at least memory leaks. To avoid this initialize each fs for
    reading the mount point path with pthread_once.
    
    Mounting the file system may also be racy, so introduce a mutex over
    the function. This does mean that the path is being accessed with and
    without a mutex, which is inherently racy but hopefully benign,
    especially as there are fewer callers to fs__mount.
    
    Remove the fs__entries by directly using global variables, this was
    done as no argument like the index can be passed to the init once
    routine.
    
    Issue found and tested with "perf top" and address sanitizer.
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: bpf@vger.kernel.org
    Link: https://lore.kernel.org/r/20230609224004.180988-1-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    97d5f2e9
fs.c 10.1 KB