aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2006-01-17 11:52:12 -0800
committerSridhar Samudrala <sri@us.ibm.com>2006-01-17 11:52:12 -0800
commit9834a2bb4970547540222fcba04e0a37d04cb0a0 (patch)
treed86a2a4de740c815cead2748952035b1216269ef /include/net
parent[SCTP]: Fix potential race condition between sctp_close() and sctp_rcv(). (diff)
downloadlinux-dev-9834a2bb4970547540222fcba04e0a37d04cb0a0.tar.xz
linux-dev-9834a2bb4970547540222fcba04e0a37d04cb0a0.zip
[SCTP]: Fix sctp_cookie alignment in the packet.
On 64 bit architectures, sctp_cookie sent as part of INIT-ACK is not aligned on a 64 bit boundry and thus causes unaligned access exceptions. The layout of the cookie prameter is this: |<----- Parameter Header --------------------|<--- Cookie DATA -------- ----------------------------------------------------------------------- | param type (16 bits) | param len (16 bits) | sig [32 bytes] | cookie.. ----------------------------------------------------------------------- The cookie data portion contains 64 bit values on 64 bit architechtures (timeval) that fall on a 32 bit alignment boundry when used as part of the on-wire format, but align correctly when used in internal structures. This patch explicitely pads the on-wire format so that it is properly aligned. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/sctp/structs.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index f5c22d77feab..72aeae4a0067 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -405,8 +405,9 @@ struct sctp_cookie {
/* The format of our cookie that we send to our peer. */
struct sctp_signed_cookie {
__u8 signature[SCTP_SECRET_SIZE];
+ __u32 __pad; /* force sctp_cookie alignment to 64 bits */
struct sctp_cookie c;
-};
+} __attribute__((packed));
/* This is another convenience type to allocate memory for address
* params for the maximum size and pass such structures around