All of lore.kernel.org
 help / color / mirror / Atom feed
* alignment issue using sctp_assoc_stats via getsockopt
@ 2015-10-06 11:04 Jakub Tomalak
  2015-10-07 21:11 ` Marcelo Ricardo Leitner
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Jakub Tomalak @ 2015-10-06 11:04 UTC (permalink / raw)
  To: linux-sctp

Greetings,

I have discovered an alignment issue when using SCTP in a 32-bit
binary on a 64-bit host.

Essentially, the problem is that struct sctp_assoc_stats contains a
sockaddr_storage field and is at a different offset for 32-bit and
64-bit architectures (well, Intel/AMD anyway).

Essentially when a 32-bit binary makes a getsockopt call with
sctp_assoc_stats againts a 64-bit kernel, the kernel copies the data
in with a different alignment, causing the 32-bit binary to receive
incorrect data for all of the chunk counters (fields after the
sockaddr field)..

The fix is relatively simple for i386 and x86_64 architectures. I am
not sure about MIPS64 and ARM, since a colleague mentioned they do not
support unaligned memory access and also mentioned that MIPS64 doesn't
allow alignment with word sizes smaller than 8 bytes.

Here is the diff I tested against both 32-bit and 64-bit RHEL and
Ubuntu systems (with kernels ranging from 3.12.x to 3.16.y).

diff --git a/include/uapi/linux/sctp.h b/include/uapi/linux/sctp.h
index ce70fe6..41aa566 100644
--- a/include/uapi/linux/sctp.h
+++ b/include/uapi/linux/sctp.h
@@ -873,7 +873,7 @@ struct sctp_assoc_stats {
        __u64           sas_iodchunks;   /* Ordered data chunks received */
        __u64           sas_octrlchunks; /* Control chunks sent */
        __u64           sas_ictrlchunks; /* Control chunks received */
-};
+} __attribute__((packed, aligned(4)));

/*
  * 8.1 sctp_bindx()
@@ -900,6 +900,6 @@ struct sctp_paddrthlds {
        struct sockaddr_storage spt_address;
        __u16 spt_pathmaxrxt;
        __u16 spt_pathpfthld;
-};
+} __attribute__((packed, aligned(4)));

#endif /* _UAPI_SCTP_H */

I have no idea what the official process is for submitting patches to
the SCTP module, and since this is probably a very edge case scenario,
I thought I would at least mention it in case anyone else comes across
similar problems.

Best Regards,
Jaub Tomalak

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-10-08 14:35 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-06 11:04 alignment issue using sctp_assoc_stats via getsockopt Jakub Tomalak
2015-10-07 21:11 ` Marcelo Ricardo Leitner
2015-10-08 11:11 ` Neil Horman
2015-10-08 11:26 ` Marcelo
2015-10-08 13:45 ` Neil Horman
2015-10-08 14:06 ` Daniel Borkmann
2015-10-08 14:07 ` Neil Horman
2015-10-08 14:35 ` Marcelo Ricardo Leitner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.