]> rtime.felk.cvut.cz Git - socketcan-devel.git/commitdiff
Added socket locking in broadcast manager sendmsg().
authorhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Fri, 4 May 2007 11:25:44 +0000 (11:25 +0000)
committerhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Fri, 4 May 2007 11:25:44 +0000 (11:25 +0000)
git-svn-id: svn://svn.berlios.de//socketcan/trunk@277 030b6a49-0b11-0410-94ab-b0dab22257f2

kernel/2.6/net/can/bcm.c

index 424b2b9e2da45ca5fe02c1c8192502e109388b38..ae508b108b2187aab5ee99d947a70c1909e4de43 100644 (file)
@@ -1390,6 +1390,8 @@ static int bcm_sendmsg(struct kiocb *iocb, struct socket *sock,
 
        DBG("opcode %d for can_id %03X\n", msg_head.opcode, msg_head.can_id);
 
+       lock_sock(sk);
+
        switch (msg_head.opcode) {
 
        case TX_SETUP:
@@ -1429,9 +1431,9 @@ static int bcm_sendmsg(struct kiocb *iocb, struct socket *sock,
        case TX_SEND:
                /* we need at least one can_frame */
                if (msg_head.nframes < 1)
-                       return -EINVAL;
-
-               ret = bcm_tx_send(msg, ifindex, sk);
+                       ret = -EINVAL;
+               else
+                       ret = bcm_tx_send(msg, ifindex, sk);
                break;
 
        default:
@@ -1440,6 +1442,8 @@ static int bcm_sendmsg(struct kiocb *iocb, struct socket *sock,
                break;
        }
 
+       release_sock(sk);
+
        return ret;
 }