|
@@ -745,18 +745,19 @@ static int raw_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
|
|
|
} else
|
|
|
ifindex = ro->ifindex;
|
|
|
|
|
|
- if (ro->fd_frames) {
|
|
|
+ dev = dev_get_by_index(sock_net(sk), ifindex);
|
|
|
+ if (!dev)
|
|
|
+ return -ENXIO;
|
|
|
+
|
|
|
+ err = -EINVAL;
|
|
|
+ if (ro->fd_frames && dev->mtu == CANFD_MTU) {
|
|
|
if (unlikely(size != CANFD_MTU && size != CAN_MTU))
|
|
|
- return -EINVAL;
|
|
|
+ goto put_dev;
|
|
|
} else {
|
|
|
if (unlikely(size != CAN_MTU))
|
|
|
- return -EINVAL;
|
|
|
+ goto put_dev;
|
|
|
}
|
|
|
|
|
|
- dev = dev_get_by_index(sock_net(sk), ifindex);
|
|
|
- if (!dev)
|
|
|
- return -ENXIO;
|
|
|
-
|
|
|
skb = sock_alloc_send_skb(sk, size + sizeof(struct can_skb_priv),
|
|
|
msg->msg_flags & MSG_DONTWAIT, &err);
|
|
|
if (!skb)
|