bpfloader: use non-overwriting rename
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 <maze@google.com> Change-Id: Ic69ff777bbd2e77a4605477c3196a234f04d3bde
This commit is contained in:
parent
35795bb50b
commit
e15229f055
1 changed files with 5 additions and 2 deletions
|
@ -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>
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue