diff options
author | Nickolai Zeldovich <nickolai@csail.mit.edu> | 2013-01-16 21:36:17 -0500 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2013-01-21 01:37:26 -0600 |
commit | e3e2775cedc9d6294b7bc7cbe9f59c62f9472871 (patch) | |
tree | 44ae751b06310accbe7db464133dcd4f7b9f89fb | |
parent | 9a9284153d965a57edc7162a8e57c14c97f3a935 (diff) | |
download | linux-e3e2775cedc9d6294b7bc7cbe9f59c62f9472871.tar.gz linux-e3e2775cedc9d6294b7bc7cbe9f59c62f9472871.tar.bz2 linux-e3e2775cedc9d6294b7bc7cbe9f59c62f9472871.zip |
cifs: fix srcip_matches() for ipv6
srcip_matches() previously had code like this:
srcip_matches(..., struct sockaddr *rhs) {
/* ... */
struct sockaddr_in6 *vaddr6 = (struct sockaddr_in6 *) &rhs;
return ipv6_addr_equal(..., &vaddr6->sin6_addr);
}
which interpreted the values on the stack after the 'rhs' pointer as an
ipv6 address. The correct thing to do is to use 'rhs', not '&rhs'.
Signed-off-by: Nickolai Zeldovich <nickolai@csail.mit.edu>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
-rw-r--r-- | fs/cifs/connect.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 17c3643e5950..12b3da39733b 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -1917,7 +1917,7 @@ srcip_matches(struct sockaddr *srcaddr, struct sockaddr *rhs) } case AF_INET6: { struct sockaddr_in6 *saddr6 = (struct sockaddr_in6 *)srcaddr; - struct sockaddr_in6 *vaddr6 = (struct sockaddr_in6 *)&rhs; + struct sockaddr_in6 *vaddr6 = (struct sockaddr_in6 *)rhs; return ipv6_addr_equal(&saddr6->sin6_addr, &vaddr6->sin6_addr); } default: |