Skip to content

Commit def4ab8

Browse files
committed
[Libos] Fix syscall mmap signature
Signed-off-by: Erica Fu <[email protected]>
1 parent 1ff37d6 commit def4ab8

File tree

2 files changed

+34
-34
lines changed

2 files changed

+34
-34
lines changed

libos/include/libos_table.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ long libos_syscall_statfs(const char* path, struct statfs* buf);
3232
long libos_syscall_fstatfs(int fd, struct statfs* buf);
3333
long libos_syscall_poll(struct pollfd* fds, unsigned int nfds, int timeout);
3434
long libos_syscall_lseek(int fd, off_t offset, int origin);
35-
void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
36-
unsigned long offset);
35+
long libos_syscall_mmap(unsigned long addr, unsigned long length, unsigned long prot,
36+
unsigned long flags, unsigned long fd, unsigned long offset);
3737
long libos_syscall_mprotect(void* addr, size_t len, int prot);
3838
long libos_syscall_munmap(void* addr, size_t len);
3939
void* libos_syscall_brk(void* brk);

libos/src/sys/libos_mmap.c

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,14 @@ static int check_prot(int prot) {
6262
return 0;
6363
}
6464

65-
void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
66-
unsigned long offset) {
65+
long libos_syscall_mmap(unsigned long addr, unsigned long length, unsigned long prot,
66+
unsigned long flags, unsigned long fd, unsigned long offset) {
6767
struct libos_handle* hdl = NULL;
6868
long ret = 0;
6969

7070
ret = check_prot(prot);
7171
if (ret < 0)
72-
return (void*)ret;
72+
return ret;
7373

7474
if (!(flags & MAP_FIXED) && addr)
7575
addr = ALLOC_ALIGN_DOWN_PTR(addr);
@@ -79,20 +79,20 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
7979
* but not the length. mmap() will automatically round up the length.
8080
*/
8181
if (addr && !IS_ALLOC_ALIGNED_PTR(addr))
82-
return (void*)-EINVAL;
82+
return -EINVAL;
8383

84-
if (fd >= 0 && !IS_ALLOC_ALIGNED(offset))
85-
return (void*)-EINVAL;
84+
if (!IS_ALLOC_ALIGNED(offset))
85+
return -EINVAL;
8686

8787
if (!IS_ALLOC_ALIGNED(length))
8888
length = ALLOC_ALIGN_UP(length);
8989

90-
if (!length || !access_ok(addr, length))
91-
return (void*)-EINVAL;
90+
if (!length || !access_ok((void*)addr, length))
91+
return -EINVAL;
9292

9393
/* This check is Gramine specific. */
9494
if (flags & (VMA_UNMAPPED | VMA_TAINTED | VMA_INTERNAL)) {
95-
return (void*)-EINVAL;
95+
return -EINVAL;
9696
}
9797

9898
if (flags & MAP_ANONYMOUS) {
@@ -101,7 +101,7 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
101101
case MAP_PRIVATE:
102102
break;
103103
default:
104-
return (void*)-EINVAL;
104+
return -EINVAL;
105105
}
106106
} else {
107107
/* MAP_FILE is the opposite of MAP_ANONYMOUS and is implicit */
@@ -112,13 +112,13 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
112112
case MAP_SHARED_VALIDATE:
113113
/* Currently we do not support additional flags like MAP_SYNC */
114114
if (flags & ~LEGACY_MAP_MASK) {
115-
return (void*)-EOPNOTSUPP;
115+
return -EOPNOTSUPP;
116116
}
117117
/* fall through */
118118
case MAP_PRIVATE:
119119
hdl = get_fd_handle(fd, NULL, NULL);
120120
if (!hdl) {
121-
return (void*)-EBADF;
121+
return -EBADF;
122122
}
123123

124124
if (!hdl->fs || !hdl->fs->fs_ops || !hdl->fs->fs_ops->mmap) {
@@ -138,7 +138,7 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
138138

139139
break;
140140
default:
141-
return (void*)-EINVAL;
141+
return -EINVAL;
142142
}
143143

144144
/* ignore MAP_NORESERVE for file-backed mappings as we consider this rare and not worth
@@ -166,27 +166,27 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
166166
}
167167
if (flags & (MAP_FIXED | MAP_FIXED_NOREPLACE)) {
168168
/* We know that `addr + length` does not overflow (`access_ok` above). */
169-
if (addr < memory_range_start || (uintptr_t)memory_range_end < (uintptr_t)addr + length) {
169+
if (addr < (uintptr_t)memory_range_start || (uintptr_t)memory_range_end < addr + length) {
170170
ret = -EINVAL;
171171
goto out_handle;
172172
}
173173
if (!(flags & MAP_FIXED_NOREPLACE)) {
174174
/* Flush any file mappings we're about to replace */
175-
ret = msync_range((uintptr_t)addr, (uintptr_t)addr + length);
175+
ret = msync_range(addr, addr + length);
176176
if (ret < 0) {
177177
goto out_handle;
178178
}
179179

180180
struct libos_vma_info* vmas;
181181
size_t vmas_length;
182-
ret = dump_vmas_in_range((uintptr_t)addr, (uintptr_t)addr + length,
182+
ret = dump_vmas_in_range(addr, addr + length,
183183
/*include_unmapped=*/false, &vmas, &vmas_length);
184184
if (ret < 0) {
185185
goto out_handle;
186186
}
187187

188188
void* tmp_vma = NULL;
189-
ret = bkeep_munmap(addr, length, /*is_internal=*/false, &tmp_vma);
189+
ret = bkeep_munmap((void*)addr, length, /*is_internal=*/false, &tmp_vma);
190190
if (ret < 0) {
191191
free_vma_info_array(vmas, vmas_length);
192192
goto out_handle;
@@ -207,12 +207,12 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
207207

208208
bkeep_convert_tmp_vma_to_user(tmp_vma);
209209

210-
ret = bkeep_mmap_fixed(addr, length, prot, flags, hdl, offset, NULL);
210+
ret = bkeep_mmap_fixed((void*)addr, length, prot, flags, hdl, offset, NULL);
211211
if (ret < 0) {
212212
BUG();
213213
}
214214
} else {
215-
ret = bkeep_mmap_fixed(addr, length, prot, flags, hdl, offset, NULL);
215+
ret = bkeep_mmap_fixed((void*)addr, length, prot, flags, hdl, offset, NULL);
216216
if (ret < 0) {
217217
goto out_handle;
218218
}
@@ -221,20 +221,20 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
221221
/* We know that `addr + length` does not overflow (`access_ok` above). */
222222
if (addr && (uintptr_t)memory_range_start <= (uintptr_t)addr
223223
&& (uintptr_t)addr + length <= (uintptr_t)memory_range_end) {
224-
ret = bkeep_mmap_any_in_range(memory_range_start, (char*)addr + length, length, prot,
225-
flags, hdl, offset, NULL, &addr);
224+
ret = bkeep_mmap_any_in_range(memory_range_start, (void*)addr + length, length, prot,
225+
flags, hdl, offset, NULL, (void**)&addr);
226226
} else {
227227
/* Hacky way to mark we had no hit and need to search below. */
228228
ret = -1;
229229
}
230230
if (ret < 0) {
231231
/* We either had no hinted address or could not allocate memory at it. */
232232
if (memory_range_start == g_pal_public_state->memory_address_start) {
233-
ret = bkeep_mmap_any_aslr(length, prot, flags, hdl, offset, NULL, &addr);
233+
ret = bkeep_mmap_any_aslr(length, prot, flags, hdl, offset, NULL, (void**)&addr);
234234
} else {
235235
/* Shared memory range does not have ASLR. */
236236
ret = bkeep_mmap_any_in_range(memory_range_start, memory_range_end, length, prot,
237-
flags, hdl, offset, NULL, &addr);
237+
flags, hdl, offset, NULL, (void**)&addr);
238238
}
239239
}
240240
if (ret < 0) {
@@ -246,7 +246,7 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
246246
/* From now on `addr` contains the actual address we want to map (and already bookkeeped). */
247247

248248
if (!hdl) {
249-
ret = PalVirtualMemoryAlloc(addr, length, LINUX_PROT_TO_PAL(prot, flags));
249+
ret = PalVirtualMemoryAlloc((void*)addr, length, LINUX_PROT_TO_PAL(prot, flags));
250250
if (ret < 0) {
251251
if (ret == PAL_ERROR_DENIED) {
252252
ret = -EPERM;
@@ -256,22 +256,22 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
256256
}
257257
} else {
258258
size_t valid_length;
259-
ret = hdl->fs->fs_ops->mmap(hdl, addr, length, prot, flags, offset, &valid_length);
259+
ret = hdl->fs->fs_ops->mmap(hdl, (void*)addr, length, prot, flags, offset, &valid_length);
260260
if (ret == 0) {
261-
int update_valid_length_ret = bkeep_vma_update_valid_length(addr, valid_length);
261+
int update_valid_length_ret = bkeep_vma_update_valid_length((void*)addr, valid_length);
262262
if (update_valid_length_ret < 0) {
263-
log_error("[mmap] Failed to update valid length to %lu of bookkeeped memory %p-%p!",
264-
valid_length, addr, (char*)addr + length);
263+
log_error("[mmap] Failed to update valid length to %lu of bookkeeped memory %lu-%lu!",
264+
valid_length, addr, addr + length);
265265
BUG();
266266
}
267267
}
268268
}
269269

270270
if (ret < 0) {
271271
void* tmp_vma = NULL;
272-
if (bkeep_munmap(addr, length, /*is_internal=*/false, &tmp_vma) < 0) {
273-
log_error("[mmap] Failed to remove bookkeeped memory that was not allocated at %p-%p!",
274-
addr, (char*)addr + length);
272+
if (bkeep_munmap((void*)addr, length, /*is_internal=*/false, &tmp_vma) < 0) {
273+
log_error("[mmap] Failed to remove bookkeeped memory that was not allocated at %lu-%lu!",
274+
addr, addr + length);
275275
BUG();
276276
}
277277
bkeep_remove_tmp_vma(tmp_vma);
@@ -283,7 +283,7 @@ void* libos_syscall_mmap(void* addr, size_t length, int prot, int flags, int fd,
283283
}
284284

285285
if (ret < 0) {
286-
return (void*)ret;
286+
return ret;
287287
}
288288
return addr;
289289
}

0 commit comments

Comments
 (0)