• Jeff Mahoney's avatar
    delayacct: align to 8 byte boundary on 64-bit systems · 85893120
    Jeff Mahoney authored
    prepare_reply() sets up an skb for the response.  The payload contains:
    
     +--------------------------------+
     | genlmsghdr - 4 bytes           |
     +--------------------------------+
     | NLA header - 4 bytes           | /* Aggregate header */
     +-+------------------------------+
     | | NLA header - 4 bytes         | /* PID header */
     | +------------------------------+
     | | pid/tgid   - 4 bytes         |
     | +------------------------------+
     | | NLA header - 4 bytes         | /* stats header */
     | + -----------------------------+ <- oops. aligned on 4 byte boundary
     | | struct taskstats - 328 bytes |
     +-+------------------------------+
    
    The start of the taskstats struct must be 8 byte aligned on IA64 (and
    other systems with 8 byte alignment rules for 64-bit types) or runtime
    alignment warnings will be issued.
    
    This patch pads the pid/tgid field out to sizeof(long), which forces the
    alignment of taskstats.  The getdelays userspace code is ok with this
    since it assumes 32-bit pid/tgid and then honors that header's length
    field.
    
    An array is used to avoid exposing kernel memory contents to userspace in
    the response.
    Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    85893120
taskstats.c 14 KB