lkml.org 
[lkml]   [2017]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 14/74] af_iucv: Move sockaddr length checks to before accessing sa_family in bind and connect handlers
    3.2.94-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Mateusz Jurczyk <mjurczyk@google.com>

    commit e3c42b61ff813921ba58cfc0019e3fd63f651190 upstream.

    Verify that the caller-provided sockaddr structure is large enough to
    contain the sa_family field, before accessing it in bind() and connect()
    handlers of the AF_IUCV socket. Since neither syscall enforces a minimum
    size of the corresponding memory region, very short sockaddrs (zero or
    one byte long) result in operating on uninitialized memory while
    referencing .sa_family.

    Fixes: 52a82e23b9f2 ("af_iucv: Validate socket address length in iucv_sock_bind()")
    Signed-off-by: Mateusz Jurczyk <mjurczyk@google.com>
    [jwi: removed unneeded null-check for addr]
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    net/iucv/af_iucv.c | 8 +++-----
    1 file changed, 3 insertions(+), 5 deletions(-)

    --- a/net/iucv/af_iucv.c
    +++ b/net/iucv/af_iucv.c
    @@ -705,10 +705,8 @@ static int iucv_sock_bind(struct socket
    char uid[9];

    /* Verify the input sockaddr */
    - if (!addr || addr->sa_family != AF_IUCV)
    - return -EINVAL;
    -
    - if (addr_len < sizeof(struct sockaddr_iucv))
    + if (addr_len < sizeof(struct sockaddr_iucv) ||
    + addr->sa_family != AF_IUCV)
    return -EINVAL;

    lock_sock(sk);
    @@ -879,7 +877,7 @@ static int iucv_sock_connect(struct sock
    struct iucv_sock *iucv = iucv_sk(sk);
    int err;

    - if (addr->sa_family != AF_IUCV || alen < sizeof(struct sockaddr_iucv))
    + if (alen < sizeof(struct sockaddr_iucv) || addr->sa_family != AF_IUCV)
    return -EINVAL;

    if (sk->sk_state != IUCV_OPEN && sk->sk_state != IUCV_BOUND)
    \
     
     \ /
      Last update: 2017-10-09 15:46    [W:4.913 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site