aboutsummaryrefslogtreecommitdiff
path: root/include/android-ashmem.h
diff options
context:
space:
mode:
authorJoey Jiao <joeyjiaojg@163.com>2021-01-13 12:32:36 +0800
committerJoey Jiao <joeyjiaojg@163.com>2021-01-20 15:46:39 +0800
commit0306261fec4c9ebc2b1361da1d0fbbe9bade8847 (patch)
treec2fb4513fe0c90261d9edec9c695b541fc886084 /include/android-ashmem.h
parent473b3e5fb0fec84ebca31917bef74d41c5c1655c (diff)
downloadAFLplusplus-0306261fec4c9ebc2b1361da1d0fbbe9bade8847.tar.gz
Fix build error for Android
- LTO not work yet
Diffstat (limited to 'include/android-ashmem.h')
-rw-r--r--include/android-ashmem.h113
1 files changed, 41 insertions, 72 deletions
diff --git a/include/android-ashmem.h b/include/android-ashmem.h
index 41d4d2da..6939e06d 100644
--- a/include/android-ashmem.h
+++ b/include/android-ashmem.h
@@ -1,112 +1,81 @@
-/*
- american fuzzy lop++ - android shared memory compatibility layer
- ----------------------------------------------------------------
-
- Originally written by Michal Zalewski
-
- Now maintained by Marc Heuse <mh@mh-sec.de>,
- Heiko Eißfeldt <heiko.eissfeldt@hexco.de>,
- Andrea Fioraldi <andreafioraldi@gmail.com>,
- Dominik Maier <mail@dmnk.co>
-
- Copyright 2016, 2017 Google Inc. All rights reserved.
- Copyright 2019-2020 AFLplusplus Project. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- This header re-defines the shared memory routines used by AFL++
- using the Andoid API.
-
- */
-
+#ifdef __ANDROID__
#ifndef _ANDROID_ASHMEM_H
#define _ANDROID_ASHMEM_H
-#ifdef __ANDROID__
-
- #include <fcntl.h>
- #include <linux/shm.h>
- #include <linux/ashmem.h>
- #include <sys/ioctl.h>
- #include <sys/mman.h>
-
- #if __ANDROID_API__ >= 26
- #define shmat bionic_shmat
- #define shmctl bionic_shmctl
- #define shmdt bionic_shmdt
- #define shmget bionic_shmget
- #endif
-
- #include <sys/shm.h>
- #undef shmat
- #undef shmctl
- #undef shmdt
- #undef shmget
- #include <stdio.h>
+#include <fcntl.h>
+#include <linux/ashmem.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
- #define ASHMEM_DEVICE "/dev/ashmem"
+#if __ANDROID_API__ >= 26
+#define shmat bionic_shmat
+#define shmctl bionic_shmctl
+#define shmdt bionic_shmdt
+#define shmget bionic_shmget
+#endif
+#include <sys/shm.h>
+#undef shmat
+#undef shmctl
+#undef shmdt
+#undef shmget
+#include <stdio.h>
-static inline int shmctl(int __shmid, int __cmd, struct shmid_ds *__buf) {
+#define ASHMEM_DEVICE "/dev/ashmem"
+int shmctl(int __shmid, int __cmd, struct shmid_ds *__buf) {
int ret = 0;
if (__cmd == IPC_RMID) {
-
- int length = ioctl(__shmid, ASHMEM_GET_SIZE, NULL);
- struct ashmem_pin pin = {0, (unsigned int)length};
+ int length = ioctl(__shmid, ASHMEM_GET_SIZE, NULL);
+ struct ashmem_pin pin = {0, length};
ret = ioctl(__shmid, ASHMEM_UNPIN, &pin);
close(__shmid);
-
}
return ret;
-
}
-static inline int shmget(key_t __key, size_t __size, int __shmflg) {
-
- (void)__shmflg;
- int fd, ret;
+int shmget(key_t __key, size_t __size, int __shmflg) {
+ (void) __shmflg;
+ int fd, ret;
char ourkey[11];
fd = open(ASHMEM_DEVICE, O_RDWR);
- if (fd < 0) return fd;
+ if (fd < 0)
+ return fd;
sprintf(ourkey, "%d", __key);
ret = ioctl(fd, ASHMEM_SET_NAME, ourkey);
- if (ret < 0) goto error;
+ if (ret < 0)
+ goto error;
ret = ioctl(fd, ASHMEM_SET_SIZE, __size);
- if (ret < 0) goto error;
+ if (ret < 0)
+ goto error;
return fd;
error:
close(fd);
return ret;
-
}
-static inline void *shmat(int __shmid, const void *__shmaddr, int __shmflg) {
-
- (void)__shmflg;
- int size;
+void *shmat(int __shmid, const void *__shmaddr, int __shmflg) {
+ (void) __shmflg;
+ int size;
void *ptr;
size = ioctl(__shmid, ASHMEM_GET_SIZE, NULL);
- if (size < 0) { return NULL; }
+ if (size < 0) {
+ return NULL;
+ }
ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, __shmid, 0);
- if (ptr == MAP_FAILED) { return NULL; }
+ if (ptr == MAP_FAILED) {
+ return NULL;
+ }
return ptr;
-
}
-#endif /* __ANDROID__ */
-
-#endif
-
+#endif /* !_ANDROID_ASHMEM_H */
+#endif /* !__ANDROID__ */