.. | .. |
---|
990 | 990 | /* wait for complete transmission of current pdu */ |
---|
991 | 991 | wait_event_interruptible(so->wait, so->tx.state == ISOTP_IDLE); |
---|
992 | 992 | |
---|
993 | | - if (sk->sk_err) |
---|
994 | | - return -sk->sk_err; |
---|
| 993 | + err = sock_error(sk); |
---|
| 994 | + if (err) |
---|
| 995 | + return err; |
---|
995 | 996 | } |
---|
996 | 997 | |
---|
997 | 998 | return size; |
---|
.. | .. |
---|
1016 | 1017 | int noblock = flags & MSG_DONTWAIT; |
---|
1017 | 1018 | int ret = 0; |
---|
1018 | 1019 | |
---|
1019 | | - if (flags & ~(MSG_DONTWAIT | MSG_TRUNC | MSG_PEEK)) |
---|
| 1020 | + if (flags & ~(MSG_DONTWAIT | MSG_TRUNC | MSG_PEEK | MSG_CMSG_COMPAT)) |
---|
1020 | 1021 | return -EINVAL; |
---|
1021 | 1022 | |
---|
1022 | 1023 | if (!so->bound) |
---|
.. | .. |
---|
1480 | 1481 | return 0; |
---|
1481 | 1482 | } |
---|
1482 | 1483 | |
---|
| 1484 | +static __poll_t isotp_poll(struct file *file, struct socket *sock, poll_table *wait) |
---|
| 1485 | +{ |
---|
| 1486 | + struct sock *sk = sock->sk; |
---|
| 1487 | + struct isotp_sock *so = isotp_sk(sk); |
---|
| 1488 | + |
---|
| 1489 | + __poll_t mask = datagram_poll(file, sock, wait); |
---|
| 1490 | + poll_wait(file, &so->wait, wait); |
---|
| 1491 | + |
---|
| 1492 | + /* Check for false positives due to TX state */ |
---|
| 1493 | + if ((mask & EPOLLWRNORM) && (so->tx.state != ISOTP_IDLE)) |
---|
| 1494 | + mask &= ~(EPOLLOUT | EPOLLWRNORM); |
---|
| 1495 | + |
---|
| 1496 | + return mask; |
---|
| 1497 | +} |
---|
| 1498 | + |
---|
1483 | 1499 | static int isotp_sock_no_ioctlcmd(struct socket *sock, unsigned int cmd, |
---|
1484 | 1500 | unsigned long arg) |
---|
1485 | 1501 | { |
---|
.. | .. |
---|
1495 | 1511 | .socketpair = sock_no_socketpair, |
---|
1496 | 1512 | .accept = sock_no_accept, |
---|
1497 | 1513 | .getname = isotp_getname, |
---|
1498 | | - .poll = datagram_poll, |
---|
| 1514 | + .poll = isotp_poll, |
---|
1499 | 1515 | .ioctl = isotp_sock_no_ioctlcmd, |
---|
1500 | 1516 | .gettstamp = sock_gettstamp, |
---|
1501 | 1517 | .listen = sock_no_listen, |
---|