diff options
author | Denis Kenzior <denkenz@gmail.com> | 2016-06-27 11:01:12 -0500 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2016-07-08 12:20:57 +0200 |
commit | b5f34f9420b50c9b5876b9a2b68e96be6d629054 (patch) | |
tree | 8bf538e462539a67a35a6b052935d6419cb530e3 /net/bluetooth/hci_sock.c | |
parent | 1c5bf998b3dca0599a2cce885619ffc06fc594df (diff) |
Bluetooth: Fix bt_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>
Diffstat (limited to 'net/bluetooth/hci_sock.c')
0 files changed, 0 insertions, 0 deletions