diff options
author | David Miller <davem@davemloft.net> | 2007-10-10 03:27:19 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-11-02 08:44:11 -0700 |
commit | 55d0058fe82cade2896d316952341c64d7dfa7c9 (patch) | |
tree | 77f39ae85f76efdc729e25be67ae7b91b6c1b738 /include | |
parent | 692767dfebce10bc997073eb707a934348cdfe08 (diff) | |
download | linux-stable-55d0058fe82cade2896d316952341c64d7dfa7c9.tar.gz linux-stable-55d0058fe82cade2896d316952341c64d7dfa7c9.tar.bz2 linux-stable-55d0058fe82cade2896d316952341c64d7dfa7c9.zip |
Fix TCP MD5 on big-endian.
changeset f8ab18d2d987a59ccbf0495032b2aef05b730037 in mainline.
Based upon a report and initial patch by Peter Lieven.
tcp4_md5sig_key and tcp6_md5sig_key need to start with
the exact same members as tcp_md5sig_key. Because they
are both cast to that type by tcp_v{4,6}_md5_do_lookup().
Unfortunately tcp{4,6}_md5sig_key use a u16 for the key
length instead of a u8, which is what tcp_md5sig_key
uses. This just so happens to work by accident on
little-endian, but on big-endian it doesn't.
Instead of casting, just place tcp_md5sig_key as the first member of
the address-family specific structures, adjust the access sites, and
kill off the ugly casts.
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/tcp.h | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/include/net/tcp.h b/include/net/tcp.h index 06827e38a089..a99b4f6fb2cb 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1061,14 +1061,12 @@ struct tcp_md5sig_key { }; struct tcp4_md5sig_key { - u8 *key; - u16 keylen; + struct tcp_md5sig_key base; __be32 addr; }; struct tcp6_md5sig_key { - u8 *key; - u16 keylen; + struct tcp_md5sig_key base; #if 0 u32 scope_id; /* XXX */ #endif |