diff --git a/libbpf_android/include/bpf/BpfMap.h b/libbpf_android/include/bpf/BpfMap.h
index a894b57..80ae62b 100644
--- a/libbpf_android/include/bpf/BpfMap.h
+++ b/libbpf_android/include/bpf/BpfMap.h
@@ -79,7 +79,7 @@
 
     netdutils::StatusOr<Key> getNextKey(const Key& key) const {
         Key nextKey;
-        if (getNextMapKey(mMapFd, const_cast<Key*>(&key), &nextKey)) {
+        if (getNextMapKey(mMapFd, &key, &nextKey)) {
             return netdutils::statusFromErrno(
                 errno, base::StringPrintf("Get next key of map %d failed", mMapFd.get()));
         }
@@ -87,7 +87,7 @@
     }
 
     netdutils::Status writeValue(const Key& key, const Value& value, uint64_t flags) {
-        if (writeToMapEntry(mMapFd, const_cast<Key*>(&key), const_cast<Value*>(&value), flags)) {
+        if (writeToMapEntry(mMapFd, &key, &value, flags)) {
             return netdutils::statusFromErrno(
                 errno, base::StringPrintf("write to map %d failed", mMapFd.get()));
         }
@@ -96,7 +96,7 @@
 
     netdutils::StatusOr<Value> readValue(const Key key) const {
         Value value;
-        if (findMapEntry(mMapFd, const_cast<Key*>(&key), &value)) {
+        if (findMapEntry(mMapFd, &key, &value)) {
             return netdutils::statusFromErrno(
                 errno, base::StringPrintf("read value of map %d failed", mMapFd.get()));
         }
@@ -104,7 +104,7 @@
     }
 
     netdutils::Status deleteValue(const Key& key) {
-        if (deleteMapEntry(mMapFd, const_cast<Key*>(&key))) {
+        if (deleteMapEntry(mMapFd, &key)) {
             return netdutils::statusFromErrno(
                 errno, base::StringPrintf("delete entry from map %d failed", mMapFd.get()));
         }
diff --git a/libbpf_android/include/bpf/BpfUtils.h b/libbpf_android/include/bpf/BpfUtils.h
index 4d3e155..cf6e1ac 100644
--- a/libbpf_android/include/bpf/BpfUtils.h
+++ b/libbpf_android/include/bpf/BpfUtils.h
@@ -85,7 +85,7 @@
                                });
 }
 
-static inline int writeToMapEntry(const base::unique_fd& map_fd, void* key, void* value,
+static inline int writeToMapEntry(const base::unique_fd& map_fd, const void* key, const void* value,
                                   uint64_t flags) {
     return bpf(BPF_MAP_UPDATE_ELEM, {
                                             .map_fd = static_cast<__u32>(map_fd.get()),
@@ -95,7 +95,7 @@
                                     });
 }
 
-static inline int findMapEntry(const base::unique_fd& map_fd, void* key, void* value) {
+static inline int findMapEntry(const base::unique_fd& map_fd, const void* key, void* value) {
     return bpf(BPF_MAP_LOOKUP_ELEM, {
                                             .map_fd = static_cast<__u32>(map_fd.get()),
                                             .key = ptr_to_u64(key),
@@ -103,14 +103,14 @@
                                     });
 }
 
-static inline int deleteMapEntry(const base::unique_fd& map_fd, void* key) {
+static inline int deleteMapEntry(const base::unique_fd& map_fd, const void* key) {
     return bpf(BPF_MAP_DELETE_ELEM, {
                                             .map_fd = static_cast<__u32>(map_fd.get()),
                                             .key = ptr_to_u64(key),
                                     });
 }
 
-static inline int getNextMapKey(const base::unique_fd& map_fd, void* key, void* next_key) {
+static inline int getNextMapKey(const base::unique_fd& map_fd, const void* key, void* next_key) {
     return bpf(BPF_MAP_GET_NEXT_KEY, {
                                              .map_fd = static_cast<__u32>(map_fd.get()),
                                              .key = ptr_to_u64(key),
