git: 9d4a08d162d8 - main - linux: use sa_family_t for address family conversions
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 29 Mar 2024 20:36:12 UTC
The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=9d4a08d162d87ba120f418a1a71facd2c631b549 commit 9d4a08d162d87ba120f418a1a71facd2c631b549 Author: Gleb Smirnoff <glebius@FreeBSD.org> AuthorDate: 2024-03-29 20:35:37 +0000 Commit: Gleb Smirnoff <glebius@FreeBSD.org> CommitDate: 2024-03-29 20:35:37 +0000 linux: use sa_family_t for address family conversions Express "conversion failed" with maximum possible value. This allows to reduce number of size/signedness conversion in the code that utilizes the functions. PR: 274536 Reviewed by: melifaro Differential Revision: https://reviews.freebsd.org/D44375 --- sys/compat/linux/linux.c | 18 +++++++++--------- sys/compat/linux/linux_common.h | 5 +++-- sys/compat/linux/linux_socket.c | 9 +++++---- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/sys/compat/linux/linux.c b/sys/compat/linux/linux.c index 69849b1d98ad..61b207070963 100644 --- a/sys/compat/linux/linux.c +++ b/sys/compat/linux/linux.c @@ -501,8 +501,8 @@ linux_ifhwaddr(struct ifnet *ifp, struct l_sockaddr *lsa) return (ENOENT); } -int -linux_to_bsd_domain(int domain) +sa_family_t +linux_to_bsd_domain(sa_family_t domain) { switch (domain) { @@ -523,11 +523,11 @@ linux_to_bsd_domain(int domain) case LINUX_AF_NETLINK: return (AF_NETLINK); } - return (-1); + return (AF_UNKNOWN); } -int -bsd_to_linux_domain(int domain) +sa_family_t +bsd_to_linux_domain(sa_family_t domain) { switch (domain) { @@ -548,7 +548,7 @@ bsd_to_linux_domain(int domain) case AF_NETLINK: return (LINUX_AF_NETLINK); } - return (-1); + return (AF_UNKNOWN); } /* @@ -562,13 +562,13 @@ bsd_to_linux_sockaddr(const struct sockaddr *sa, struct l_sockaddr **lsa, socklen_t len) { struct l_sockaddr *kosa; - int bdom; + sa_family_t bdom; *lsa = NULL; if (len < 2 || len > UCHAR_MAX) return (EINVAL); bdom = bsd_to_linux_domain(sa->sa_family); - if (bdom == -1) + if (bdom == AF_UNKNOWN) return (EAFNOSUPPORT); kosa = malloc(len, M_LINUX, M_WAITOK); @@ -615,7 +615,7 @@ linux_to_bsd_sockaddr(const struct l_sockaddr *osa, struct sockaddr **sap, goto out; bdom = linux_to_bsd_domain(kosa->sa_family); - if (bdom == -1) { + if (bdom == AF_UNKNOWN) { error = EAFNOSUPPORT; goto out; } diff --git a/sys/compat/linux/linux_common.h b/sys/compat/linux/linux_common.h index 485ebaab58f2..97f5a259f300 100644 --- a/sys/compat/linux/linux_common.h +++ b/sys/compat/linux/linux_common.h @@ -38,8 +38,9 @@ unsigned short linux_ifflags(struct ifnet *); int linux_ifhwaddr(struct ifnet *ifp, struct l_sockaddr *lsa); unsigned short bsd_to_linux_ifflags(int); -int linux_to_bsd_domain(int domain); -int bsd_to_linux_domain(int domain); +sa_family_t linux_to_bsd_domain(sa_family_t domain); +sa_family_t bsd_to_linux_domain(sa_family_t domain); +#define AF_UNKNOWN UINT8_MAX int bsd_to_linux_sockaddr(const struct sockaddr *sa, struct l_sockaddr **lsa, socklen_t len); int linux_to_bsd_sockaddr(const struct l_sockaddr *lsa, diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index ae22af90d443..1e578982fced 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -870,7 +870,8 @@ static const char *linux_netlink_names[] = { int linux_socket(struct thread *td, struct linux_socket_args *args) { - int domain, retval_socket, type; + int retval_socket, type; + sa_family_t domain; type = args->type & LINUX_SOCK_TYPE_MASK; if (type < 0 || type > LINUX_SOCK_MAX) @@ -880,7 +881,7 @@ linux_socket(struct thread *td, struct linux_socket_args *args) if (retval_socket != 0) return (retval_socket); domain = linux_to_bsd_domain(args->domain); - if (domain == -1) { + if (domain == AF_UNKNOWN) { /* Mask off SOCK_NONBLOCK / CLOEXEC for error messages. */ type = args->type & LINUX_SOCK_TYPE_MASK; if (args->domain == LINUX_AF_NETLINK && @@ -2309,8 +2310,8 @@ linux_getsockopt(struct thread *td, struct linux_getsockopt_args *args) name, &newval, UIO_SYSSPACE, &len); if (error != 0) return (error); - newval = bsd_to_linux_domain(newval); - if (newval == -1) + newval = bsd_to_linux_domain((sa_family_t)newval); + if (newval == AF_UNKNOWN) return (ENOPROTOOPT); return (linux_sockopt_copyout(td, &newval, len, args));