summaryrefslogtreecommitdiff
path: root/sys/compat/linux/linux_socket.c
diff options
context:
space:
mode:
authorAlexander Leidinger <netchild@FreeBSD.org>2006-09-23 19:06:54 +0000
committerAlexander Leidinger <netchild@FreeBSD.org>2006-09-23 19:06:54 +0000
commitd4b7423fa153dda8f2a8ddadf584d2fdf97ff047 (patch)
tree7a35442ca35fbab402321b222ccf332ac2aa2150 /sys/compat/linux/linux_socket.c
parent0d7c37283e1d6ac392f4aa531b3d95a0a7a66adb (diff)
Notes
Diffstat (limited to 'sys/compat/linux/linux_socket.c')
-rw-r--r--sys/compat/linux/linux_socket.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index 3f089c0eb184..174fba6cc47f 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -611,6 +611,8 @@ linux_bind(struct thread *td, struct linux_bind_args *args)
error = kern_bind(td, linux_args.s, sa);
free(sa, M_SONAME);
+ if (error == EADDRNOTAVAIL && linux_args.namelen != sizeof(struct sockaddr_in))
+ return (EINVAL);
return (error);
}
@@ -719,8 +721,11 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
bsd_args.anamelen = PTRIN(linux_args.namelen);/* XXX */
error = accept(td, &bsd_args);
bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.name);
- if (error)
+ if (error) {
+ if (error == EFAULT && linux_args.namelen != sizeof(struct sockaddr_in))
+ return (EINVAL);
return (error);
+ }
if (linux_args.addr) {
error = linux_sa_put(PTRIN(linux_args.addr));
if (error) {
@@ -1135,7 +1140,7 @@ linux_setsockopt(struct thread *td, struct linux_setsockopt_args *args)
break;
}
if (name == -1)
- return (EINVAL);
+ return (ENOPROTOOPT);
bsd_args.name = name;
bsd_args.val = PTRIN(linux_args.optval);