Skip to content

Commit 41a0e54

Browse files
sys_bind: fix family parsing
Signed-off-by: Andy-Python-Programmer <[email protected]>
1 parent e33296a commit 41a0e54

File tree

5 files changed

+32
-38
lines changed

5 files changed

+32
-38
lines changed

patches/mlibc/mlibc.patch

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
From ded2749ee28c99c1ec8a6fe4dbb6423a5287bf91 Mon Sep 17 00:00:00 2001
1+
From fb279173f0a97399a112bd8a5c2d3ec96f450374 Mon Sep 17 00:00:00 2001
22
From: Andy-Python-Programmer <[email protected]>
33
Date: Thu, 10 Feb 2022 19:12:25 +1100
44
Subject: [PATCH] yes
@@ -10,9 +10,9 @@ Signed-off-by: Andy-Python-Programmer <[email protected]>
1010
sysdeps/aero/generic/aero.cpp | 12 ++++-
1111
sysdeps/aero/generic/filesystem.cpp | 79 ++++++++++++++++++++++++++---
1212
sysdeps/aero/generic/signals.cpp | 8 ++-
13-
sysdeps/aero/generic/sockets.cpp | 18 +++++++
13+
sysdeps/aero/generic/sockets.cpp | 28 ++++++++++
1414
sysdeps/aero/include/aero/syscall.h | 12 +++++
15-
7 files changed, 121 insertions(+), 13 deletions(-)
15+
7 files changed, 131 insertions(+), 13 deletions(-)
1616

1717
diff --git a/.gitignore b/.gitignore
1818
index dbb35e8b..20c8d4c3 100644
@@ -210,10 +210,10 @@ index 3527370c..a6f69fff 100644
210210
} // namespace mlibc
211211
\ No newline at end of file
212212
diff --git a/sysdeps/aero/generic/sockets.cpp b/sysdeps/aero/generic/sockets.cpp
213-
index e69de29b..347556cd 100644
213+
index e69de29b..e4040629 100644
214214
--- a/sysdeps/aero/generic/sockets.cpp
215215
+++ b/sysdeps/aero/generic/sockets.cpp
216-
@@ -0,0 +1,18 @@
216+
@@ -0,0 +1,28 @@
217217
+#include <mlibc/all-sysdeps.hpp>
218218
+#include <mlibc/thread-entry.hpp>
219219
+
@@ -231,6 +231,16 @@ index e69de29b..347556cd 100644
231231
+ *fd = result;
232232
+ return 0;
233233
+}
234+
+
235+
+int sys_bind(int fd, const struct sockaddr *addr_ptr, socklen_t addr_length) {
236+
+ auto result = syscall(SYS_BIND, fd, addr_ptr, (sc_word_t)addr_length);
237+
+
238+
+ if (result < 0) {
239+
+ return -result;
240+
+ }
241+
+
242+
+ return 0;
243+
+}
234244
+} // namespace mlibc
235245
diff --git a/sysdeps/aero/include/aero/syscall.h b/sysdeps/aero/include/aero/syscall.h
236246
index 07b1b51b..ef797e40 100644

src/aero_kernel/src/fs/inode.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ pub trait INodeInterface: Send + Sync + Downcastable {
8282
fn stat(&self) -> Result<aero_syscall::Stat> {
8383
Err(FileSystemError::NotSupported)
8484
}
85+
8586
/// Creates a new dev inode with the provided `name` and the device `marker` in
8687
/// the filesystem.
8788
///
@@ -145,7 +146,7 @@ pub trait INodeInterface: Send + Sync + Downcastable {
145146
}
146147

147148
// Socket operations
148-
fn bind(&self, _address: &SocketAddr, _length: usize) -> Result<()> {
149+
fn bind(&self, _address: SocketAddr, _length: usize) -> Result<()> {
149150
Err(FileSystemError::NotSupported)
150151
}
151152
}

src/aero_kernel/src/socket/unix.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl INodeInterface for UnixSocket {
4949
})
5050
}
5151

52-
fn bind(&self, address: &SocketAddr, _length: usize) -> Result<()> {
52+
fn bind(&self, address: SocketAddr, _length: usize) -> Result<()> {
5353
if let SocketAddr::Unix(address) = address {
5454
let path_len = address
5555
.path

src/aero_kernel/src/syscall/net.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,17 @@ pub fn socket(
3131
// TODO: Figure out how to handle this.
3232
#[aero_proc::syscall]
3333
pub fn bind(fd: usize, address: usize, length: usize) -> Result<usize, AeroSyscallError> {
34-
let address = unsafe { &*(address as *const SocketAddr) };
34+
let family = unsafe { *(address as *const i32) };
35+
let address = match family as usize {
36+
AF_UNIX => SocketAddr::Unix(unsafe { &*(address as *const SocketAddrUnix) }),
37+
38+
_ => {
39+
log::warn!("unsupported address family: {}", family);
40+
return Err(AeroSyscallError::EINVAL);
41+
}
42+
};
43+
44+
// let address = unsafe { &*(address as *const SocketAddr) };
3545
let current_task = scheduler::get_scheduler().current_task();
3646
let file = current_task.file_table.get_handle(fd);
3747

src/aero_syscall/src/lib.rs

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -674,10 +674,9 @@ pub struct SocketAddrInet {
674674
pub padding: [u8; 8],
675675
}
676676

677-
#[derive(Debug, Clone)]
678-
pub enum SocketAddr {
679-
Unix(SocketAddrUnix),
680-
Inet(SocketAddrInet),
677+
pub enum SocketAddr<'a> {
678+
Unix(&'a SocketAddrUnix),
679+
Inet(&'a SocketAddrInet),
681680
}
682681

683682
// constants for the socket types:
@@ -715,32 +714,6 @@ pub fn sys_socket(
715714
isize_as_syscall_result(value as _)
716715
}
717716

718-
pub fn sys_connect(
719-
fd: usize,
720-
address: &SocketAddr,
721-
length: u32,
722-
) -> Result<usize, AeroSyscallError> {
723-
let value = syscall3(
724-
prelude::SYS_CONNECT,
725-
fd,
726-
address as *const SocketAddr as usize,
727-
length as usize,
728-
);
729-
730-
isize_as_syscall_result(value as _)
731-
}
732-
733-
pub fn sys_bind(fd: usize, address: &SocketAddr, length: u32) -> Result<usize, AeroSyscallError> {
734-
let value = syscall3(
735-
prelude::SYS_BIND,
736-
fd,
737-
address as *const SocketAddr as usize,
738-
length as usize,
739-
);
740-
741-
isize_as_syscall_result(value as _)
742-
}
743-
744717
pub fn sys_listen(fd: usize, backlog: usize) -> Result<usize, AeroSyscallError> {
745718
let value = syscall2(prelude::SYS_LISTEN, fd, backlog);
746719
isize_as_syscall_result(value as _)

0 commit comments

Comments
 (0)