diff options
Diffstat (limited to 'drivers/isdn/mISDN/socket.c')
| -rw-r--r-- | drivers/isdn/mISDN/socket.c | 16 | 
1 files changed, 5 insertions, 11 deletions
diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c index e47dcb9d1e9..1be82284cf9 100644 --- a/drivers/isdn/mISDN/socket.c +++ b/drivers/isdn/mISDN/socket.c @@ -117,7 +117,6 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,  {  	struct sk_buff		*skb;  	struct sock		*sk = sock->sk; -	struct sockaddr_mISDN	*maddr;  	int		copied, err; @@ -135,9 +134,9 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,  	if (!skb)  		return err; -	if (msg->msg_namelen >= sizeof(struct sockaddr_mISDN)) { -		msg->msg_namelen = sizeof(struct sockaddr_mISDN); -		maddr = (struct sockaddr_mISDN *)msg->msg_name; +	if (msg->msg_name) { +		DECLARE_SOCKADDR(struct sockaddr_mISDN *, maddr, msg->msg_name); +  		maddr->family = AF_ISDN;  		maddr->dev = _pms(sk)->dev->id;  		if ((sk->sk_protocol == ISDN_P_LAPD_TE) || @@ -150,11 +149,7 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,  			maddr->sapi = _pms(sk)->ch.addr & 0xFF;  			maddr->tei =  (_pms(sk)->ch.addr >> 8) & 0xFF;  		} -	} else { -		if (msg->msg_namelen) -			printk(KERN_WARNING "%s: too small namelen %d\n", -			       __func__, msg->msg_namelen); -		msg->msg_namelen = 0; +		msg->msg_namelen = sizeof(*maddr);  	}  	copied = skb->len + MISDN_HEADER_LEN; @@ -184,7 +179,6 @@ mISDN_sock_sendmsg(struct kiocb *iocb, struct socket *sock,  	struct sock		*sk = sock->sk;  	struct sk_buff		*skb;  	int			err = -ENOMEM; -	struct sockaddr_mISDN	*maddr;  	if (*debug & DEBUG_SOCKET)  		printk(KERN_DEBUG "%s: len %d flags %x ch %d proto %x\n", @@ -219,7 +213,7 @@ mISDN_sock_sendmsg(struct kiocb *iocb, struct socket *sock,  	if (msg->msg_namelen >= sizeof(struct sockaddr_mISDN)) {  		/* if we have a address, we use it */ -		maddr = (struct sockaddr_mISDN *)msg->msg_name; +		DECLARE_SOCKADDR(struct sockaddr_mISDN *, maddr, msg->msg_name);  		mISDN_HEAD_ID(skb) = maddr->channel;  	} else { /* use default for L2 messages */  		if ((sk->sk_protocol == ISDN_P_LAPD_TE) ||  | 
