]> git.baikalelectronics.ru Git - kernel.git/commit
Bluetooth: Fix bt_sock_recvmsg return value
authorDenis Kenzior <denkenz@gmail.com>
Mon, 27 Jun 2016 16:01:12 +0000 (11:01 -0500)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 8 Jul 2016 10:20:57 +0000 (12:20 +0200)
commitb0be021e135a1d5a5daf140283aeada7dfb4e281
tree8bf538e462539a67a35a6b052935d6419cb530e3
parent0267e8510cd03d8c3a723f92e9ba7b4dd5e7d35d
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>
net/bluetooth/af_bluetooth.c