aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/netrom/af_netrom.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
index cba7849de98e..6d9c58ec56ac 100644
--- a/net/netrom/af_netrom.c
+++ b/net/netrom/af_netrom.c
@@ -1037,6 +1037,10 @@ static int nr_sendmsg(struct kiocb *iocb, struct socket *sock,
1037 unsigned char *asmptr; 1037 unsigned char *asmptr;
1038 int size; 1038 int size;
1039 1039
1040 /* Netrom empty data frame has no meaning : don't send */
1041 if (len == 0)
1042 return 0;
1043
1040 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT)) 1044 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1041 return -EINVAL; 1045 return -EINVAL;
1042 1046
@@ -1167,6 +1171,11 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
1167 skb_reset_transport_header(skb); 1171 skb_reset_transport_header(skb);
1168 copied = skb->len; 1172 copied = skb->len;
1169 1173
1174 /* NetRom empty data frame has no meaning : ignore it */
1175 if (copied == 0) {
1176 goto out;
1177 }
1178
1170 if (copied > size) { 1179 if (copied > size) {
1171 copied = size; 1180 copied = size;
1172 msg->msg_flags |= MSG_TRUNC; 1181 msg->msg_flags |= MSG_TRUNC;
@@ -1182,7 +1191,7 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
1182 1191
1183 msg->msg_namelen = sizeof(*sax); 1192 msg->msg_namelen = sizeof(*sax);
1184 1193
1185 skb_free_datagram(sk, skb); 1194out: skb_free_datagram(sk, skb);
1186 1195
1187 release_sock(sk); 1196 release_sock(sk);
1188 return copied; 1197 return copied;