]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fuzz-journal-remote: use memfd_new_and_seal() where appropriate
authorLennart Poettering <lennart@poettering.net>
Mon, 16 Dec 2024 11:18:17 +0000 (12:18 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 17 Dec 2024 17:26:15 +0000 (18:26 +0100)
This means we can drop memfd_new_and_map() and results in generally
shorter code.

src/basic/memfd-util.c
src/basic/memfd-util.h
src/journal-remote/fuzz-journal-remote.c

index 2d710267d0ac620536412605a9e40c67fd319abf..9d3983b181628f0de9a583f45fffeee595681ff9 100644 (file)
@@ -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;
index 92d8b579149ac08466108bba03c2ba99abdf250e..077ca6f67b4a32d9d53ab3b92a61bb6a310a2936 100644 (file)
@@ -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);
index 774389dee35601df15e37ee27dcf8615fcf57112..3e874f19b71be29f7b32026a31d6ab8a6b54b092 100644 (file)
@@ -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");