mirror of
https://github.com/systemd/systemd.git
synced 2025-03-10 16:58:28 +03:00
fuzz-journal-remote: use memfd_new_and_seal() where appropriate
This means we can drop memfd_new_and_map() and results in generally shorter code.
This commit is contained in:
parent
65d9ef40f2
commit
4dac692094
@ -95,30 +95,6 @@ int memfd_get_seals(int fd, unsigned *ret_seals) {
|
||||
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);
|
||||
}
|
||||
@ -154,28 +130,6 @@ int memfd_set_size(int fd, uint64_t sz) {
|
||||
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;
|
||||
|
@ -13,8 +13,6 @@ static inline int memfd_new(const char *name) {
|
||||
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);
|
||||
@ -22,7 +20,6 @@ static inline int memfd_new_and_seal_string(const char *name, const char *s) {
|
||||
|
||||
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);
|
||||
|
@ -24,7 +24,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
_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))
|
||||
@ -35,13 +34,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user