diff options
Diffstat (limited to 'drivers/isdn/mISDN/socket.c')
-rw-r--r-- | drivers/isdn/mISDN/socket.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c index e47dcb9d1e91..5cefb479c707 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, | |||
117 | { | 117 | { |
118 | struct sk_buff *skb; | 118 | struct sk_buff *skb; |
119 | struct sock *sk = sock->sk; | 119 | struct sock *sk = sock->sk; |
120 | struct sockaddr_mISDN *maddr; | ||
121 | 120 | ||
122 | int copied, err; | 121 | int copied, err; |
123 | 122 | ||
@@ -135,9 +134,9 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
135 | if (!skb) | 134 | if (!skb) |
136 | return err; | 135 | return err; |
137 | 136 | ||
138 | if (msg->msg_namelen >= sizeof(struct sockaddr_mISDN)) { | 137 | if (msg->msg_name) { |
139 | msg->msg_namelen = sizeof(struct sockaddr_mISDN); | 138 | struct sockaddr_mISDN *maddr = msg->msg_name; |
140 | maddr = (struct sockaddr_mISDN *)msg->msg_name; | 139 | |
141 | maddr->family = AF_ISDN; | 140 | maddr->family = AF_ISDN; |
142 | maddr->dev = _pms(sk)->dev->id; | 141 | maddr->dev = _pms(sk)->dev->id; |
143 | if ((sk->sk_protocol == ISDN_P_LAPD_TE) || | 142 | if ((sk->sk_protocol == ISDN_P_LAPD_TE) || |
@@ -150,11 +149,7 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
150 | maddr->sapi = _pms(sk)->ch.addr & 0xFF; | 149 | maddr->sapi = _pms(sk)->ch.addr & 0xFF; |
151 | maddr->tei = (_pms(sk)->ch.addr >> 8) & 0xFF; | 150 | maddr->tei = (_pms(sk)->ch.addr >> 8) & 0xFF; |
152 | } | 151 | } |
153 | } else { | 152 | msg->msg_namelen = sizeof(*maddr); |
154 | if (msg->msg_namelen) | ||
155 | printk(KERN_WARNING "%s: too small namelen %d\n", | ||
156 | __func__, msg->msg_namelen); | ||
157 | msg->msg_namelen = 0; | ||
158 | } | 153 | } |
159 | 154 | ||
160 | copied = skb->len + MISDN_HEADER_LEN; | 155 | copied = skb->len + MISDN_HEADER_LEN; |