diff --git a/libports/src/lib/libc_fs/plugin.cc b/libports/src/lib/libc_fs/plugin.cc index 4f1f9742d..b69dcafa7 100644 --- a/libports/src/lib/libc_fs/plugin.cc +++ b/libports/src/lib/libc_fs/plugin.cc @@ -722,13 +722,16 @@ class Plugin : public Libc::Plugin Libc::File_descriptor *fd = Libc::file_descriptor_allocator()->alloc(this, context); - if (write(fd, oldpath, strlen(oldpath) + 1) == -1) { + ssize_t res = write(fd, oldpath, strlen(oldpath) + 1); + + Libc::file_descriptor_allocator()->free(fd); + destroy(Genode::env()->heap(), context); + + if (res == -1) { errno = EIO; return -1; } - close(fd); - return 0; } catch (File_system::Lookup_failed) {