Home
last modified time | relevance | path

Searched hist:"83871 f8ccdfa8f3edab15d432aa4f3eb82953343" (Results 1 – 1 of 1) sorted by relevance

/openbmc/linux/net/bluetooth/
H A Dhci_sock.cdiff 83871f8ccdfa8f3edab15d432aa4f3eb82953343 Mon Jun 27 11:01:13 CDT 2016 Denis Kenzior <denkenz@gmail.com> Bluetooth: Fix hci_sock_recvmsg return value

If recvmsg is called with a destination buffer that is too small to
receive the contents of skb in its entirety, the return value from
recvmsg was inconsistent with common SOCK_SEQPACKET or SOCK_DGRAM
semantics.

If destination buffer provided by userspace is too small (e.g. len <
copied), then MSG_TRUNC flag is set and copied is returned. Instead, it
should return the length of the message, which is consistent with how
other datagram based sockets act. Quoting 'man recv':

"All three calls return the length of the message on successful comple‐
tion. If a message is too long to fit in the supplied buffer, excess
bytes may be discarded depending on the type of socket the message is
received from."

and

"MSG_TRUNC (since Linux 2.2)

For raw (AF_PACKET), Internet datagram (since Linux
2.4.27/2.6.8), netlink (since Linux 2.6.22), and UNIX datagram
(since Linux 3.4) sockets: return the real length of the packet
or datagram, even when it was longer than the passed buffer."

Signed-off-by: Denis Kenzior <denkenz@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>