return 0;
}
-int memfd_map(int fd, uint64_t offset, size_t size, void **ret) {
- unsigned int seals;
- void *q;
- int r;
-
- assert(fd >= 0);
- assert(size > 0);
- assert(ret);
-
- r = memfd_get_seals(fd, &seals);
- if (r < 0)
- return r;
-
- if (seals & F_SEAL_WRITE)
- q = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, offset);
- else
- q = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset);
- if (q == MAP_FAILED)
- return -errno;
-
- *ret = q;
- return 0;
-}
-
int memfd_set_sealed(int fd) {
return memfd_add_seals(fd, F_SEAL_SEAL | F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_WRITE);
}
return RET_NERRNO(ftruncate(fd, sz));
}
-int memfd_new_and_map(const char *name, size_t sz, void **ret) {
- _cleanup_close_ int fd = -EBADF;
- int r;
-
- assert(sz > 0);
- assert(ret);
-
- fd = memfd_new(name);
- if (fd < 0)
- return fd;
-
- r = memfd_set_size(fd, sz);
- if (r < 0)
- return r;
-
- r = memfd_map(fd, 0, sz, ret);
- if (r < 0)
- return r;
-
- return TAKE_FD(fd);
-}
-
int memfd_new_and_seal(const char *name, const void *data, size_t sz) {
_cleanup_close_ int fd = -EBADF;
int r;
return memfd_new_full(name, 0);
}
-int memfd_new_and_map(const char *name, size_t sz, void **ret);
-
int memfd_new_and_seal(const char *name, const void *data, size_t sz);
static inline int memfd_new_and_seal_string(const char *name, const char *s) {
return memfd_new_and_seal(name, s, SIZE_MAX);
int memfd_add_seals(int fd, unsigned seals);
int memfd_get_seals(int fd, unsigned *ret_seals);
-int memfd_map(int fd, uint64_t offset, size_t size, void **ret);
int memfd_set_sealed(int fd);
int memfd_get_sealed(int fd);
_cleanup_(unlink_and_freep) char *name = NULL;
_cleanup_(sd_journal_closep) sd_journal *j = NULL;
_cleanup_(journal_remote_server_destroy) RemoteServer s = {};
- void *mem;
int fdin, r;
if (outside_size_range(size, 3, 65536))
assert_se(mkdtemp_malloc("/tmp/fuzz-journal-remote-XXXXXX", &tmp) >= 0);
assert_se(name = path_join(tmp, "fuzz-journal-remote.XXXXXX.journal"));
- fdin = fdin_close = memfd_new_and_map("fuzz-journal-remote", size, &mem);
+ fdin = fdin_close = memfd_new_and_seal("fuzz-journal-remote", data, size);
if (fdin < 0)
return log_error_errno(fdin, "memfd_new_and_map() failed: %m");
- memcpy(mem, data, size);
- assert_se(munmap(mem, size) == 0);
-
fdout = mkostemps(name, STRLEN(".journal"), O_CLOEXEC);
if (fdout < 0)
return log_error_errno(errno, "mkostemps() failed: %m");