Commit:     6dc0c2082b8acf30c9239fbbcc051eebdaf7ecff
Parent:     09c7d8293a2d1317d16ef4ddb9f6dd2553d0694e
Author:     Al Viro <[EMAIL PROTECTED]>
AuthorDate: Sun Jul 29 00:15:18 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Tue Jul 31 02:28:06 2007 -0700

    [BLUETOOTH]: Fix endianness bug in l2cap_sock_listen()
    We loop through psm values, calling __l2cap_get_sock_by_addr(psm, ...)
    until we get NULL; then we set ->psm of our socket to htobs(psm).
    IOW, we find unused psm value and put it into our socket.  So far, so
    good, but...  __l2cap_get_sock_by_addr() compares its argument with
    ->psm of sockets.  IOW, the entire thing works correctly only on
    little-endian.  On big-endian we'll get "no socket with such psm"
    on the first iteration, since we won't find a socket with ->psm == 0x1001.
    We will happily conclude that 0x1001 is unused and slap htobs(0x1001)
    (i.e. 0x110) into ->psm of our socket.  Of course, the next time around
    the same thing will repeat and we'll just get a fsckload of sockets
    with the same ->psm assigned.
    Fix: pass htobs(psm) to __l2cap_get_sock_by_addr() there.  All other
    callers are already passing little-endian values and all places that
    store something in ->psm are storing little-endian.
    Signed-off-by: Al Viro <[EMAIL PROTECTED]>
    Signed-off-by: Marcel Holtmann <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
 net/bluetooth/l2cap.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index 670ff95..b82cbdd 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -748,7 +748,7 @@ static int l2cap_sock_listen(struct socket *sock, int 
                for (psm = 0x1001; psm < 0x1100; psm += 2)
-                       if (!__l2cap_get_sock_by_addr(psm, src)) {
+                       if (!__l2cap_get_sock_by_addr(htobs(psm), src)) {
                                l2cap_pi(sk)->psm   = htobs(psm);
                                l2cap_pi(sk)->sport = htobs(psm);
                                err = 0;
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to