mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 15:01:28 +12:00
sys_net: add missing range checks
This commit is contained in:
parent
0556837e3b
commit
430fd759fe
2 changed files with 50 additions and 24 deletions
|
@ -598,7 +598,7 @@ struct nt_p2p_port
|
||||||
auto send_ack = [&]()
|
auto send_ack = [&]()
|
||||||
{
|
{
|
||||||
auto final_ack = sock.p2ps.data_beg_seq;
|
auto final_ack = sock.p2ps.data_beg_seq;
|
||||||
while (sock.p2ps.received_data.count(final_ack))
|
while (sock.p2ps.received_data.contains(final_ack))
|
||||||
{
|
{
|
||||||
final_ack += sock.p2ps.received_data.at(final_ack).size();
|
final_ack += sock.p2ps.received_data.at(final_ack).size();
|
||||||
}
|
}
|
||||||
|
@ -840,7 +840,7 @@ struct nt_p2p_port
|
||||||
|
|
||||||
{
|
{
|
||||||
std::lock_guard lock(bound_p2p_vports_mutex);
|
std::lock_guard lock(bound_p2p_vports_mutex);
|
||||||
if (bound_p2p_vports.count(dst_vport))
|
if (bound_p2p_vports.contains(dst_vport))
|
||||||
{
|
{
|
||||||
sys_net_sockaddr_in_p2p p2p_addr{};
|
sys_net_sockaddr_in_p2p p2p_addr{};
|
||||||
|
|
||||||
|
@ -938,7 +938,7 @@ struct nt_p2p_port
|
||||||
|
|
||||||
{
|
{
|
||||||
std::lock_guard lock(bound_p2p_vports_mutex);
|
std::lock_guard lock(bound_p2p_vports_mutex);
|
||||||
if (bound_p2p_streams.count(key_connected))
|
if (bound_p2p_streams.contains(key_connected))
|
||||||
{
|
{
|
||||||
const auto sock_id = bound_p2p_streams.at(key_connected);
|
const auto sock_id = bound_p2p_streams.at(key_connected);
|
||||||
sys_net.trace("Received packet for connected STREAM-P2P socket(s=%d)", sock_id);
|
sys_net.trace("Received packet for connected STREAM-P2P socket(s=%d)", sock_id);
|
||||||
|
@ -946,7 +946,7 @@ struct nt_p2p_port
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bound_p2p_streams.count(key_listening))
|
if (bound_p2p_streams.contains(key_listening))
|
||||||
{
|
{
|
||||||
const auto sock_id = bound_p2p_streams.at(key_listening);
|
const auto sock_id = bound_p2p_streams.at(key_listening);
|
||||||
sys_net.trace("Received packet for listening STREAM-P2P socket(s=%d)", sock_id);
|
sys_net.trace("Received packet for listening STREAM-P2P socket(s=%d)", sock_id);
|
||||||
|
@ -1147,9 +1147,15 @@ s32 send_packet_from_p2p_port(const std::vector<u8>& data, const sockaddr_in& ad
|
||||||
auto& nc = g_fxo->get<network_context>();
|
auto& nc = g_fxo->get<network_context>();
|
||||||
{
|
{
|
||||||
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
||||||
auto& def_port = nc.list_p2p_ports.at(3658);
|
if (nc.list_p2p_ports.contains(3658))
|
||||||
|
{
|
||||||
res = ::sendto(def_port.p2p_socket, reinterpret_cast<const char*>(data.data()), data.size(), 0, reinterpret_cast<const sockaddr*>(&addr), sizeof(sockaddr_in));
|
auto& def_port = nc.list_p2p_ports.at(3658);
|
||||||
|
res = ::sendto(def_port.p2p_socket, reinterpret_cast<const char*>(data.data()), data.size(), 0, reinterpret_cast<const sockaddr*>(&addr), sizeof(sockaddr_in));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sys_net.error("send_packet_from_p2p_port: port %d not present", 3658);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
@ -1161,11 +1167,18 @@ std::vector<std::vector<u8>> get_rpcn_msgs()
|
||||||
auto& nc = g_fxo->get<network_context>();
|
auto& nc = g_fxo->get<network_context>();
|
||||||
{
|
{
|
||||||
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
||||||
auto& def_port = nc.list_p2p_ports.at(3658);
|
if (nc.list_p2p_ports.contains(3658))
|
||||||
{
|
{
|
||||||
std::lock_guard lock(def_port.s_rpcn_mutex);
|
auto& def_port = nc.list_p2p_ports.at(3658);
|
||||||
msgs = std::move(def_port.rpcn_msgs);
|
{
|
||||||
def_port.rpcn_msgs.clear();
|
std::lock_guard lock(def_port.s_rpcn_mutex);
|
||||||
|
msgs = std::move(def_port.rpcn_msgs);
|
||||||
|
def_port.rpcn_msgs.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sys_net.error("get_rpcn_msgs: port %d not present", 3658);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1178,11 +1191,18 @@ std::vector<std::pair<std::pair<u32, u16>, std::vector<u8>>> get_sign_msgs()
|
||||||
auto& nc = g_fxo->get<network_context>();
|
auto& nc = g_fxo->get<network_context>();
|
||||||
{
|
{
|
||||||
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
||||||
auto& def_port = nc.list_p2p_ports.at(3658);
|
if (nc.list_p2p_ports.contains(3658))
|
||||||
{
|
{
|
||||||
std::lock_guard lock(def_port.s_sign_mutex);
|
auto& def_port = nc.list_p2p_ports.at(3658);
|
||||||
msgs = std::move(def_port.sign_msgs);
|
{
|
||||||
def_port.sign_msgs.clear();
|
std::lock_guard lock(def_port.s_sign_mutex);
|
||||||
|
msgs = std::move(def_port.sign_msgs);
|
||||||
|
def_port.sign_msgs.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sys_net.error("get_sign_msgs: port %d not present", 3658);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1489,7 +1509,7 @@ error_code sys_net_bnet_bind(ppu_thread& ppu, s32 s, vm::cptr<sys_net_sockaddr>
|
||||||
auto& nc = g_fxo->get<network_context>();
|
auto& nc = g_fxo->get<network_context>();
|
||||||
{
|
{
|
||||||
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
||||||
if (nc.list_p2p_ports.count(p2p_port) == 0)
|
if (!nc.list_p2p_ports.contains(p2p_port))
|
||||||
{
|
{
|
||||||
nc.list_p2p_ports.emplace(std::piecewise_construct, std::forward_as_tuple(p2p_port), std::forward_as_tuple(p2p_port));
|
nc.list_p2p_ports.emplace(std::piecewise_construct, std::forward_as_tuple(p2p_port), std::forward_as_tuple(p2p_port));
|
||||||
}
|
}
|
||||||
|
@ -1606,7 +1626,7 @@ error_code sys_net_bnet_connect(ppu_thread& ppu, s32 s, vm::ptr<sys_net_sockaddr
|
||||||
auto& nc = g_fxo->get<network_context>();
|
auto& nc = g_fxo->get<network_context>();
|
||||||
{
|
{
|
||||||
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
||||||
if (!nc.list_p2p_ports.count(sock.p2p.port))
|
if (!nc.list_p2p_ports.contains(sock.p2p.port))
|
||||||
nc.list_p2p_ports.emplace(std::piecewise_construct, std::forward_as_tuple(sock.p2p.port), std::forward_as_tuple(sock.p2p.port));
|
nc.list_p2p_ports.emplace(std::piecewise_construct, std::forward_as_tuple(sock.p2p.port), std::forward_as_tuple(sock.p2p.port));
|
||||||
|
|
||||||
auto& pport = nc.list_p2p_ports.at(sock.p2p.port);
|
auto& pport = nc.list_p2p_ports.at(sock.p2p.port);
|
||||||
|
@ -3145,6 +3165,7 @@ error_code sys_net_bnet_close(ppu_thread& ppu, s32 s)
|
||||||
auto& nc = g_fxo->get<network_context>();
|
auto& nc = g_fxo->get<network_context>();
|
||||||
{
|
{
|
||||||
std::lock_guard lock(nc.list_p2p_ports_mutex);
|
std::lock_guard lock(nc.list_p2p_ports_mutex);
|
||||||
|
ensure(nc.list_p2p_ports.contains(sock->p2p.port));
|
||||||
auto& p2p_port = nc.list_p2p_ports.at(sock->p2p.port);
|
auto& p2p_port = nc.list_p2p_ports.at(sock->p2p.port);
|
||||||
{
|
{
|
||||||
std::lock_guard lock(p2p_port.bound_p2p_vports_mutex);
|
std::lock_guard lock(p2p_port.bound_p2p_vports_mutex);
|
||||||
|
|
|
@ -495,8 +495,8 @@ std::shared_ptr<signaling_info> signaling_handler::get_signaling_ptr(const signa
|
||||||
if (!npid_to_conn_id.count(npid))
|
if (!npid_to_conn_id.count(npid))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
auto conn_id = npid_to_conn_id.at(npid);
|
const u32 conn_id = npid_to_conn_id.at(npid);
|
||||||
if (!sig1_peers.count(conn_id))
|
if (!sig1_peers.contains(conn_id))
|
||||||
{
|
{
|
||||||
sign_log.error("Discrepancy in signaling 1 data");
|
sign_log.error("Discrepancy in signaling 1 data");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -508,7 +508,7 @@ std::shared_ptr<signaling_info> signaling_handler::get_signaling_ptr(const signa
|
||||||
// V2
|
// V2
|
||||||
auto room_id = sp->V2.room_id;
|
auto room_id = sp->V2.room_id;
|
||||||
auto member_id = sp->V2.member_id;
|
auto member_id = sp->V2.member_id;
|
||||||
if (!sig2_peers.count(room_id) || !sig2_peers.at(room_id).count(member_id))
|
if (!sig2_peers.contains(room_id) || !sig2_peers.at(room_id).contains(member_id))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
return sig2_peers.at(room_id).at(member_id);
|
return sig2_peers.at(room_id).at(member_id);
|
||||||
|
@ -525,7 +525,8 @@ void signaling_handler::start_sig_nl(u32 conn_id, u32 addr, u16 port)
|
||||||
auto& sent_packet = sig1_packet;
|
auto& sent_packet = sig1_packet;
|
||||||
sent_packet.command = signal_connect;
|
sent_packet.command = signal_connect;
|
||||||
|
|
||||||
auto si = sig1_peers.at(conn_id);
|
ensure(sig1_peers.contains(conn_id));
|
||||||
|
std::shared_ptr<signaling_info> si = sig1_peers.at(conn_id);
|
||||||
|
|
||||||
si->addr = addr;
|
si->addr = addr;
|
||||||
si->port = port;
|
si->port = port;
|
||||||
|
@ -541,7 +542,11 @@ void signaling_handler::start_sig2(u64 room_id, u16 member_id)
|
||||||
auto& sent_packet = sig2_packet;
|
auto& sent_packet = sig2_packet;
|
||||||
sent_packet.command = signal_connect;
|
sent_packet.command = signal_connect;
|
||||||
|
|
||||||
auto si = sig2_peers.at(room_id).at(member_id);
|
ensure(sig2_peers.contains(room_id));
|
||||||
|
const auto& sp = sig2_peers.at(room_id);
|
||||||
|
|
||||||
|
ensure(sp.contains(member_id));
|
||||||
|
std::shared_ptr<signaling_info> si = sp.at(member_id);
|
||||||
|
|
||||||
send_signaling_packet(sent_packet, si->addr, si->port);
|
send_signaling_packet(sent_packet, si->addr, si->port);
|
||||||
queue_signaling_packet(sent_packet, si, steady_clock::now() + REPEAT_CONNECT_DELAY);
|
queue_signaling_packet(sent_packet, si, steady_clock::now() + REPEAT_CONNECT_DELAY);
|
||||||
|
@ -551,7 +556,7 @@ void signaling_handler::disconnect_sig2_users(u64 room_id)
|
||||||
{
|
{
|
||||||
std::lock_guard lock(data_mutex);
|
std::lock_guard lock(data_mutex);
|
||||||
|
|
||||||
if (!sig2_peers.count(room_id))
|
if (!sig2_peers.contains(room_id))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto& sent_packet = sig2_packet;
|
auto& sent_packet = sig2_packet;
|
||||||
|
@ -574,7 +579,7 @@ u32 signaling_handler::create_sig_infos(const SceNpId* npid)
|
||||||
ensure(npid->handle.data[16] == 0);
|
ensure(npid->handle.data[16] == 0);
|
||||||
std::string npid_str(reinterpret_cast<const char*>(npid->handle.data));
|
std::string npid_str(reinterpret_cast<const char*>(npid->handle.data));
|
||||||
|
|
||||||
if (npid_to_conn_id.count(npid_str))
|
if (npid_to_conn_id.contains(npid_str))
|
||||||
{
|
{
|
||||||
return npid_to_conn_id.at(npid_str);
|
return npid_to_conn_id.at(npid_str);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue