linux_get_sa: fix botched fd handling.
This commit is contained in:
parent
e82b090f18
commit
f12243c34d
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: linux_socket.c,v 1.87 2008/03/21 21:54:58 ad Exp $ */
|
/* $NetBSD: linux_socket.c,v 1.88 2008/03/23 19:35:54 ad Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc.
|
* Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc.
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.87 2008/03/21 21:54:58 ad Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.88 2008/03/23 19:35:54 ad Exp $");
|
||||||
|
|
||||||
#if defined(_KERNEL_OPT)
|
#if defined(_KERNEL_OPT)
|
||||||
#include "opt_inet.h"
|
#include "opt_inet.h"
|
||||||
|
@ -1347,15 +1347,14 @@ linux_get_sa(struct lwp *l, int s, struct mbuf **mp, const struct osockaddr *osa
|
||||||
* This avoid triggering strict family checks in netinet/in_pcb.c et.al.
|
* This avoid triggering strict family checks in netinet/in_pcb.c et.al.
|
||||||
*/
|
*/
|
||||||
if (bdom == AF_UNSPEC) {
|
if (bdom == AF_UNSPEC) {
|
||||||
file_t *fp;
|
|
||||||
struct socket *so;
|
struct socket *so;
|
||||||
|
|
||||||
/* getsock() will use the descriptor for us */
|
/* getsock() will use the descriptor for us */
|
||||||
if ((error = getsock(s, &fp)) != 0)
|
if ((error = fd_getsock(s, &so)) != 0)
|
||||||
goto bad;
|
goto bad;
|
||||||
|
|
||||||
so = (struct socket *)fp->f_data;
|
|
||||||
bdom = so->so_proto->pr_domain->dom_family;
|
bdom = so->so_proto->pr_domain->dom_family;
|
||||||
|
fd_putfile(s);
|
||||||
|
|
||||||
DPRINTF(("AF_UNSPEC family adjusted to %d\n", bdom));
|
DPRINTF(("AF_UNSPEC family adjusted to %d\n", bdom));
|
||||||
}
|
}
|
||||||
|
@ -1384,7 +1383,6 @@ linux_get_sa(struct lwp *l, int s, struct mbuf **mp, const struct osockaddr *osa
|
||||||
"sockaddr_in6 rejected",
|
"sockaddr_in6 rejected",
|
||||||
p->p_pid, p->p_comm, uid);
|
p->p_pid, p->p_comm, uid);
|
||||||
error = EINVAL;
|
error = EINVAL;
|
||||||
fd_putfile(s);
|
|
||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
salen = sizeof (struct sockaddr_in6);
|
salen = sizeof (struct sockaddr_in6);
|
||||||
|
@ -1409,7 +1407,6 @@ linux_get_sa(struct lwp *l, int s, struct mbuf **mp, const struct osockaddr *osa
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*mp = m;
|
*mp = m;
|
||||||
fd_putfile(s);
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
bad:
|
bad:
|
||||||
|
|
Loading…
Reference in New Issue