fix(ipcd/uds/steam): perform checks before get_uid_gid_from_pid

Fix
https://gitlab.redox-os.org/redox-os/base/-/merge_requests/69#note_47265

Signed-off-by: Anhad Singh <andypython@protonmail.com>
This commit is contained in:
Anhad Singh
2025-12-16 22:14:40 +11:00
parent 383bd436d8
commit 9496f6f486
+4 -5
View File
@@ -692,6 +692,9 @@ impl<'sock> UdsStreamScheme<'sock> {
let (bytes_written, remote_id) = {
let name = self.get_socket(id)?.borrow().path.clone();
let (remote_id, remote_rc) = self.get_connected_peer(id, msg_flags)?;
let mut socket = remote_rc.borrow_mut();
let connection = socket.require_connected_connection(msg_flags)?;
let (pid, uid, gid) = get_uid_gid_from_pid(self.proc_creds_capability, ctx.pid)?;
let packet = DataPacket::from_stream(
@@ -701,6 +704,7 @@ impl<'sock> UdsStreamScheme<'sock> {
)?;
let payload_len = packet.len();
// sendmsg(2) on `SOCK_STREAM` with zero-byte payload is a no-op
// even if ancillary data is present. Note that this does not apply
// to `SOCK_DGRAM`.
@@ -708,11 +712,6 @@ impl<'sock> UdsStreamScheme<'sock> {
return Ok(0);
}
let (remote_id, remote_rc) = self.get_connected_peer(id, msg_flags)?;
let mut socket = remote_rc.borrow_mut();
let connection = socket.require_connected_connection(msg_flags)?;
connection.packets.push_back(packet);
(payload_len, remote_id)
};