summaryrefslogtreecommitdiff
path: root/sys/compat/linux/common/linux_socket.c
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2007-05-29 21:32:27 +0000
committerchristos <christos@NetBSD.org>2007-05-29 21:32:27 +0000
commit20bfd9898e3c656ef658c627f6543cbd7e5a092a (patch)
treec068702aa0823c4b54044acf2f1232dc2d7bc4af /sys/compat/linux/common/linux_socket.c
parent6c43b583d4129f09acb7050b444420fd8515fe01 (diff)
Add a sockaddr_storage member to "struct ifreq" maintaining backwards
compatibility with the older ioctls. This avoids stack smashing and abuse of "struct sockaddr" when ioctls placed "struct sockaddr_foo's" that were longer than "struct sockaddr". XXX: Some of the emulations might be broken; I tried to add code for them but I did not test them.
Diffstat (limited to 'sys/compat/linux/common/linux_socket.c')
-rw-r--r--sys/compat/linux/common/linux_socket.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/sys/compat/linux/common/linux_socket.c b/sys/compat/linux/common/linux_socket.c
index 804a425369f..bd0f7601dc2 100644
--- a/sys/compat/linux/common/linux_socket.c
+++ b/sys/compat/linux/common/linux_socket.c
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_socket.c,v 1.71 2007/03/04 06:01:24 christos Exp $ */
+/* $NetBSD: linux_socket.c,v 1.72 2007/05/29 21:32:28 christos Exp $ */
/*-
* Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.71 2007/03/04 06:01:24 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.72 2007/05/29 21:32:28 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_inet.h"
@@ -86,6 +86,7 @@ __KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.71 2007/03/04 06:01:24 christos E
#endif
#include <compat/sys/socket.h>
+#include <compat/sys/sockio.h>
#include <compat/linux/common/linux_types.h>
#include <compat/linux/common/linux_util.h>
@@ -1292,31 +1293,31 @@ linux_ioctl_socket(l, uap, retval)
switch (com) {
case LINUX_SIOCGIFCONF:
- SCARG(&ia, com) = OSIOCGIFCONF;
+ SCARG(&ia, com) = OOSIOCGIFCONF;
break;
case LINUX_SIOCGIFFLAGS:
- SCARG(&ia, com) = SIOCGIFFLAGS;
+ SCARG(&ia, com) = OSIOCGIFFLAGS;
break;
case LINUX_SIOCSIFFLAGS:
- SCARG(&ia, com) = SIOCSIFFLAGS;
+ SCARG(&ia, com) = OSIOCSIFFLAGS;
break;
case LINUX_SIOCGIFADDR:
- SCARG(&ia, com) = OSIOCGIFADDR;
+ SCARG(&ia, com) = OOSIOCGIFADDR;
break;
case LINUX_SIOCGIFDSTADDR:
- SCARG(&ia, com) = OSIOCGIFDSTADDR;
+ SCARG(&ia, com) = OOSIOCGIFDSTADDR;
break;
case LINUX_SIOCGIFBRDADDR:
- SCARG(&ia, com) = OSIOCGIFBRDADDR;
+ SCARG(&ia, com) = OOSIOCGIFBRDADDR;
break;
case LINUX_SIOCGIFNETMASK:
- SCARG(&ia, com) = OSIOCGIFNETMASK;
+ SCARG(&ia, com) = OOSIOCGIFNETMASK;
break;
case LINUX_SIOCADDMULTI:
- SCARG(&ia, com) = SIOCADDMULTI;
+ SCARG(&ia, com) = OSIOCADDMULTI;
break;
case LINUX_SIOCDELMULTI:
- SCARG(&ia, com) = SIOCDELMULTI;
+ SCARG(&ia, com) = OSIOCDELMULTI;
break;
case LINUX_SIOCGIFHWADDR:
error = linux_getifhwaddr(l, retval, SCARG(uap, fd),