introduce mapRetrieveLocklessRW()
the clat verifyPerms() checker only wants to check the existence and accessibility of the maps. Test: TreeHugger Signed-off-by: Maciej Żenczykowski <maze@google.com> Change-Id: I3079ab316bcd88370d774fec5e88c1b5ff438266
This commit is contained in:
parent
04fb3862a9
commit
0fff839ae6
2 changed files with 9 additions and 3 deletions
|
|
@ -80,7 +80,8 @@ static void verifyPerms(const char * const path,
|
|||
case VERIFY_BIN: return;
|
||||
case VERIFY_PROG: fd = bpf::retrieveProgram(path); break;
|
||||
case VERIFY_MAP_RO: fd = bpf::mapRetrieveRO(path); break;
|
||||
case VERIFY_MAP_RW: fd = bpf::mapRetrieveRW(path); break;
|
||||
// lockless: we're just checking access rights and will immediately close the fd
|
||||
case VERIFY_MAP_RW: fd = bpf::mapRetrieveLocklessRW(path); break;
|
||||
}
|
||||
|
||||
if (fd < 0) ALOGF("bpf_obj_get '%s' failed, errno=%d", path, errno);
|
||||
|
|
|
|||
|
|
@ -166,11 +166,16 @@ inline int bpfLock(int fd, short type) {
|
|||
return ret; // most likely -1 with errno == EAGAIN, due to already held lock
|
||||
}
|
||||
|
||||
inline int mapRetrieveExclusiveRW(const char* pathname) {
|
||||
return bpfLock(bpfFdGet(pathname, 0), F_WRLCK);
|
||||
inline int mapRetrieveLocklessRW(const char* pathname) {
|
||||
return bpfFdGet(pathname, 0);
|
||||
}
|
||||
|
||||
inline int mapRetrieveExclusiveRW(const char* pathname) {
|
||||
return bpfLock(mapRetrieveLocklessRW(pathname), F_WRLCK);
|
||||
}
|
||||
|
||||
inline int mapRetrieveRW(const char* pathname) {
|
||||
return bpfLock(bpfFdGet(pathname, 0), F_RDLCK);
|
||||
return bpfLock(mapRetrieveLocklessRW(pathname), F_RDLCK);
|
||||
}
|
||||
|
||||
inline int mapRetrieveRO(const char* pathname) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue