Skip to content

Commit

Permalink
bpfloader: use non-overwriting rename
Browse files Browse the repository at this point in the history
This is for better error reporting.

The target should never exist, unless somehow someone
managed to cause naming collision...

See: https://manpages.debian.org/testing/manpages-dev/renameat2.2.en.html
which mentions support was added for bpffs in Linux 4.9

Bug: 236707886
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <[email protected]>
Change-Id: Ic69ff777bbd2e77a4605477c3196a234f04d3bde
  • Loading branch information
zenczykowski committed Apr 17, 2023
1 parent 35795bb commit e15229f
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions libbpf_android/Loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define LOG_TAG "LibBpfLoader"

#include <errno.h>
#include <fcntl.h>
#include <linux/bpf.h>
#include <linux/elf.h>
#include <log/log.h>
Expand Down Expand Up @@ -901,7 +902,8 @@ static int createMaps(const char* elfPath, ifstream& elfFile, vector<unique_fd>&
ALOGE("create %s -> %d [%d:%s]", createLoc.c_str(), ret, err, strerror(err));
return -err;
}
ret = rename(createLoc.c_str(), mapPinLoc.c_str());
ret = renameat2(AT_FDCWD, createLoc.c_str(),
AT_FDCWD, mapPinLoc.c_str(), RENAME_NOREPLACE);
if (ret) {
int err = errno;
ALOGE("rename %s %s -> %d [%d:%s]", createLoc.c_str(), mapPinLoc.c_str(), ret,
Expand Down Expand Up @@ -1153,7 +1155,8 @@ static int loadCodeSections(const char* elfPath, vector<codeSection>& cs, const
ALOGE("create %s -> %d [%d:%s]", createLoc.c_str(), ret, err, strerror(err));
return -err;
}
ret = rename(createLoc.c_str(), progPinLoc.c_str());
ret = renameat2(AT_FDCWD, createLoc.c_str(),
AT_FDCWD, progPinLoc.c_str(), RENAME_NOREPLACE);
if (ret) {
int err = errno;
ALOGE("rename %s %s -> %d [%d:%s]", createLoc.c_str(), progPinLoc.c_str(), ret,
Expand Down

0 comments on commit e15229f

Please sign in to comment.