NFC: llcp: Socket miux is a big endian field
authorSamuel Ortiz <sameo@linux.intel.com>
Wed, 20 Mar 2013 15:06:12 +0000 (16:06 +0100)
committerSamuel Ortiz <sameo@linux.intel.com>
Thu, 11 Apr 2013 14:28:56 +0000 (16:28 +0200)
The MIUX must be transmitted in big endian and as such we have to convert
it properly.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
net/nfc/llcp/commands.c
net/nfc/llcp/llcp.h
net/nfc/llcp/sock.c

index b75a9b3..c5535cc 100644 (file)
@@ -420,7 +420,8 @@ int nfc_llcp_send_connect(struct nfc_llcp_sock *sock)
        }
 
        /* If the socket parameters are not set, use the local ones */
-       miux = sock->miux > LLCP_MAX_MIUX ? local->miux : sock->miux;
+       miux = be16_to_cpu(sock->miux) > LLCP_MAX_MIUX ?
+               local->miux : sock->miux;
        rw = sock->rw > LLCP_MAX_RW ? local->rw : sock->rw;
 
        miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&miux, 0,
@@ -475,7 +476,8 @@ int nfc_llcp_send_cc(struct nfc_llcp_sock *sock)
                return -ENODEV;
 
        /* If the socket parameters are not set, use the local ones */
-       miux = sock->miux > LLCP_MAX_MIUX ? local->miux : sock->miux;
+       miux = be16_to_cpu(sock->miux) > LLCP_MAX_MIUX ?
+               local->miux : sock->miux;
        rw = sock->rw > LLCP_MAX_RW ? local->rw : sock->rw;
 
        miux_tlv = nfc_llcp_build_tlv(LLCP_TLV_MIUX, (u8 *)&miux, 0,
index 7e87a66..53054d3 100644 (file)
@@ -124,7 +124,7 @@ struct nfc_llcp_sock {
        char *service_name;
        size_t service_name_len;
        u8 rw;
-       u16 miux;
+       __be16 miux;
 
 
        /* Remote link parameters */
index 6fa7670..873c837 100644 (file)
@@ -279,7 +279,7 @@ static int nfc_llcp_setsockopt(struct socket *sock, int level, int optname,
                        break;
                }
 
-               llcp_sock->miux = (u16) opt;
+               llcp_sock->miux = cpu_to_be16((u16) opt);
 
                break;
 
@@ -323,7 +323,8 @@ static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname,
                break;
 
        case NFC_LLCP_MIUX:
-               if (put_user(llcp_sock->miux, (u32 __user *) optval))
+               if (put_user(be16_to_cpu(llcp_sock->miux),
+                            (u32 __user *) optval))
                        err = -EFAULT;
 
                break;
@@ -921,7 +922,7 @@ struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp)
        llcp_sock->ssap = 0;
        llcp_sock->dsap = LLCP_SAP_SDP;
        llcp_sock->rw = LLCP_MAX_RW + 1;
-       llcp_sock->miux = LLCP_MAX_MIUX + 1;
+       llcp_sock->miux = cpu_to_be16(LLCP_MAX_MIUX + 1);
        llcp_sock->remote_rw = LLCP_DEFAULT_RW;
        llcp_sock->remote_miu = LLCP_DEFAULT_MIU;
        llcp_sock->send_n = llcp_sock->send_ack_n = 0;