diff --git a/repos/dde_linux/src/lib/vfs/lxip/vfs.cc b/repos/dde_linux/src/lib/vfs/lxip/vfs.cc index 6ec4ab0d6..8c3081ec9 100644 --- a/repos/dde_linux/src/lib/vfs/lxip/vfs.cc +++ b/repos/dde_linux/src/lib/vfs/lxip/vfs.cc @@ -314,6 +314,8 @@ class Vfs::Lxip_file : public Vfs::File char _content_buffer[Lxip::MAX_DATA_LEN]; + bool _sock_valid() { return _sock.sk != nullptr; } + public: Lxip_file(Lxip::Socket_dir &p, Linux::socket &s, char const *name) @@ -363,6 +365,8 @@ class Vfs::Lxip_data_file : public Vfs::Lxip_file { using namespace Linux; + if (!_sock_valid()) return -1; + iovec iov { const_cast(src), len }; msghdr msg = create_msghdr(&_parent.remote_addr(), @@ -376,6 +380,8 @@ class Vfs::Lxip_data_file : public Vfs::Lxip_file { using namespace Linux; + if (!_sock_valid()) return -1; + iovec iov { dst, len }; msghdr msg = create_msghdr(nullptr, 0, len, &iov); @@ -412,6 +418,8 @@ class Vfs::Lxip_bind_file : public Vfs::Lxip_file { using namespace Linux; + if (!_sock_valid()) return -1; + if (len > (sizeof(_content_buffer) - 2)) return -1; @@ -475,6 +483,8 @@ class Vfs::Lxip_listen_file : public Vfs::Lxip_file Lxip::ssize_t write(char const *src, Genode::size_t len, file_size /* ignored */) override { + if (!_sock_valid()) return -1; + if (len > (sizeof(_content_buffer) - 2)) return -1; @@ -532,6 +542,8 @@ class Vfs::Lxip_connect_file : public Vfs::Lxip_file { using namespace Linux; + if (!_sock_valid()) return -1; + if (len > (sizeof(_content_buffer) - 2)) return -1; @@ -604,6 +616,8 @@ class Vfs::Lxip_local_file : public Vfs::Lxip_file { using namespace Linux; + if (!_sock_valid()) return -1; + if (len < sizeof(_content_buffer)) return -1; @@ -666,6 +680,8 @@ class Vfs::Lxip_remote_file : public Vfs::Lxip_file { using namespace Linux; + if (!_sock_valid()) return -1; + sockaddr_storage addr_storage; sockaddr_in *addr = (sockaddr_in *)&addr_storage; @@ -759,6 +775,8 @@ class Vfs::Lxip_accept_file : public Vfs::Lxip_file { using namespace Linux; + if (!_sock_valid()) return -1; + if (!poll(false, nullptr)) { throw Would_block(); }