diff options
author | David Howells <dhowells@redhat.com> | 2016-03-04 16:59:49 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2016-03-04 16:59:49 +0100 |
commit | ab802ee0ab5f4e1e7ee17632627726fbd7881e6c (patch) | |
tree | 68011397296c2aa386fd2b07a2bdebef08e2e8bc /net/rxrpc | |
parent | rxrpc: rxkad: Casts are needed when comparing be32 values (diff) | |
download | linux-ab802ee0ab5f4e1e7ee17632627726fbd7881e6c.tar.xz linux-ab802ee0ab5f4e1e7ee17632627726fbd7881e6c.zip |
rxrpc: Clear the unused part of a sockaddr_rxrpc for memcmp() use
Clear the unused part of a sockaddr_rxrpc structs so that memcmp() can be
used to compare them.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc')
-rw-r--r-- | net/rxrpc/af_rxrpc.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c index b46f7742d336..a76501757b59 100644 --- a/net/rxrpc/af_rxrpc.c +++ b/net/rxrpc/af_rxrpc.c @@ -81,6 +81,8 @@ static int rxrpc_validate_address(struct rxrpc_sock *rx, struct sockaddr_rxrpc *srx, int len) { + unsigned tail; + if (len < sizeof(struct sockaddr_rxrpc)) return -EINVAL; @@ -103,9 +105,7 @@ static int rxrpc_validate_address(struct rxrpc_sock *rx, _debug("INET: %x @ %pI4", ntohs(srx->transport.sin.sin_port), &srx->transport.sin.sin_addr); - if (srx->transport_len > 8) - memset((void *)&srx->transport + 8, 0, - srx->transport_len - 8); + tail = offsetof(struct sockaddr_rxrpc, transport.sin.__pad); break; case AF_INET6: @@ -113,6 +113,8 @@ static int rxrpc_validate_address(struct rxrpc_sock *rx, return -EAFNOSUPPORT; } + if (tail < len) + memset((void *)srx + tail, 0, len - tail); return 0; } |