mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 11:36:13 +00: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 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();
|
||||
}
|
||||
|
@ -840,7 +840,7 @@ struct nt_p2p_port
|
|||
|
||||
{
|
||||
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{};
|
||||
|
||||
|
@ -938,7 +938,7 @@ struct nt_p2p_port
|
|||
|
||||
{
|
||||
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);
|
||||
sys_net.trace("Received packet for connected STREAM-P2P socket(s=%d)", sock_id);
|
||||
|
@ -946,7 +946,7 @@ struct nt_p2p_port
|
|||
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);
|
||||
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>();
|
||||
{
|
||||
std::lock_guard list_lock(nc.list_p2p_ports_mutex);
|
||||
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));
|
||||
if (nc.list_p2p_ports.contains(3658))
|
||||
{
|
||||
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;
|
||||
|
@ -1161,11 +1167,18 @@ std::vector<std::vector<u8>> get_rpcn_msgs()
|
|||
auto& nc = g_fxo->get<network_context>();
|
||||
{
|
||||
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);
|
||||
msgs = std::move(def_port.rpcn_msgs);
|
||||
def_port.rpcn_msgs.clear();
|
||||
auto& def_port = nc.list_p2p_ports.at(3658);
|
||||
{
|
||||
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>();
|
||||
{
|
||||
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);
|
||||
msgs = std::move(def_port.sign_msgs);
|
||||
def_port.sign_msgs.clear();
|
||||
auto& def_port = nc.list_p2p_ports.at(3658);
|
||||
{
|
||||
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>();
|
||||
{
|
||||
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));
|
||||
}
|
||||
|
@ -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>();
|
||||
{
|
||||
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));
|
||||
|
||||
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>();
|
||||
{
|
||||
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);
|
||||
{
|
||||
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))
|
||||
return nullptr;
|
||||
|
||||
auto conn_id = npid_to_conn_id.at(npid);
|
||||
if (!sig1_peers.count(conn_id))
|
||||
const u32 conn_id = npid_to_conn_id.at(npid);
|
||||
if (!sig1_peers.contains(conn_id))
|
||||
{
|
||||
sign_log.error("Discrepancy in signaling 1 data");
|
||||
return nullptr;
|
||||
|
@ -508,7 +508,7 @@ std::shared_ptr<signaling_info> signaling_handler::get_signaling_ptr(const signa
|
|||
// V2
|
||||
auto room_id = sp->V2.room_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 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;
|
||||
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->port = port;
|
||||
|
@ -541,7 +542,11 @@ void signaling_handler::start_sig2(u64 room_id, u16 member_id)
|
|||
auto& sent_packet = sig2_packet;
|
||||
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);
|
||||
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);
|
||||
|
||||
if (!sig2_peers.count(room_id))
|
||||
if (!sig2_peers.contains(room_id))
|
||||
return;
|
||||
|
||||
auto& sent_packet = sig2_packet;
|
||||
|
@ -574,7 +579,7 @@ u32 signaling_handler::create_sig_infos(const SceNpId* npid)
|
|||
ensure(npid->handle.data[16] == 0);
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue