Module: xenomai-forge Branch: next Commit: 39db28358f336d43d0ee8ff4adf7b35fe66ca726 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=39db28358f336d43d0ee8ff4adf7b35fe66ca726
Author: Philippe Gerum <r...@xenomai.org> Date: Tue Aug 12 21:47:17 2014 +0200 drivers/ipc: fix address reset in connect() --- kernel/drivers/ipc/bufp.c | 8 +++++--- kernel/drivers/ipc/iddp.c | 9 +++++---- kernel/drivers/ipc/xddp.c | 8 +++++--- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/kernel/drivers/ipc/bufp.c b/kernel/drivers/ipc/bufp.c index 46abbe0..7b67e11 100644 --- a/kernel/drivers/ipc/bufp.c +++ b/kernel/drivers/ipc/bufp.c @@ -748,13 +748,15 @@ fail: static int __bufp_connect_socket(struct bufp_socket *sk, struct sockaddr_ipc *sa) { + struct sockaddr_ipc _sa; struct bufp_socket *rsk; int ret, resched = 0; rtdm_lockctx_t s; xnhandle_t h; if (sa == NULL) { - sa = &nullsa; + _sa = nullsa; + sa = &_sa; goto set_assoc; } @@ -799,8 +801,8 @@ static int __bufp_connect_socket(struct bufp_socket *sk, cobalt_atomic_leave(s); if (ret) return ret; - } - + } else if (sa->sipc_port < 0) + sa = &nullsa; set_assoc: cobalt_atomic_enter(s); if (!test_bit(_BUFP_BOUND, &sk->status)) diff --git a/kernel/drivers/ipc/iddp.c b/kernel/drivers/ipc/iddp.c index 82ddebb..7521fc5 100644 --- a/kernel/drivers/ipc/iddp.c +++ b/kernel/drivers/ipc/iddp.c @@ -328,7 +328,6 @@ static ssize_t __iddp_recvmsg(struct rtdm_fd *fd, static ssize_t iddp_recvmsg(struct rtdm_fd *fd, struct msghdr *msg, int flags) { - struct rtipc_private *priv = rtdm_fd_to_private(fd); struct iovec iov[RTIPC_IOV_MAX]; struct sockaddr_ipc saddr; ssize_t ret; @@ -628,13 +627,15 @@ fail: static int __iddp_connect_socket(struct iddp_socket *sk, struct sockaddr_ipc *sa) { + struct sockaddr_ipc _sa; struct iddp_socket *rsk; int ret, resched = 0; rtdm_lockctx_t s; xnhandle_t h; if (sa == NULL) { - sa = &nullsa; + _sa = nullsa; + sa = &_sa; goto set_assoc; } @@ -679,8 +680,8 @@ static int __iddp_connect_socket(struct iddp_socket *sk, cobalt_atomic_leave(s); if (ret) return ret; - } - + } else if (sa->sipc_port < 0) + sa = &nullsa; set_assoc: cobalt_atomic_enter(s); if (!test_bit(_IDDP_BOUND, &sk->status)) diff --git a/kernel/drivers/ipc/xddp.c b/kernel/drivers/ipc/xddp.c index 649931c..13b18ce 100644 --- a/kernel/drivers/ipc/xddp.c +++ b/kernel/drivers/ipc/xddp.c @@ -777,13 +777,15 @@ static int __xddp_bind_socket(struct rtipc_private *priv, static int __xddp_connect_socket(struct xddp_socket *sk, struct sockaddr_ipc *sa) { + struct sockaddr_ipc _sa; struct xddp_socket *rsk; int ret, resched = 0; rtdm_lockctx_t s; xnhandle_t h; if (sa == NULL) { - sa = &nullsa; + _sa = nullsa; + sa = &_sa; goto set_assoc; } @@ -828,8 +830,8 @@ static int __xddp_connect_socket(struct xddp_socket *sk, cobalt_atomic_leave(s); if (ret) return ret; - } - + } else if (sa->sipc_port < 0) + sa = &nullsa; set_assoc: cobalt_atomic_enter(s); if (!test_bit(_XDDP_BOUND, &sk->status)) _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git