{
        return NLMSG_ALIGN(sizeof(struct inet_diag_msg)
               + nla_total_size(sizeof(u8)) /* INET_DIAG_PROTOCOL */
-              + nla_total_size(sizeof(struct tcp_info))); /* INET_DIAG_INFO */
+              + nla_total_size_64bit(sizeof(struct tcp_info))); /* INET_DIAG_INFO */
 }
 
 static void sock_diag_broadcast_destroy_work(struct work_struct *work)
 
        }
 
        if ((ext & (1 << (INET_DIAG_INFO - 1))) && handler->idiag_info_size) {
-               attr = nla_reserve(skb, INET_DIAG_INFO,
-                                  handler->idiag_info_size);
+               attr = nla_reserve_64bit(skb, INET_DIAG_INFO,
+                                        handler->idiag_info_size,
+                                        INET_DIAG_PAD);
                if (!attr)
                        goto errout;
 
        }
 
        attr = handler->idiag_info_size
-               ? nla_reserve(skb, INET_DIAG_INFO, handler->idiag_info_size)
+               ? nla_reserve_64bit(skb, INET_DIAG_INFO,
+                                   handler->idiag_info_size,
+                                   INET_DIAG_PAD)
                : NULL;
        if (attr)
                info = nla_data(attr);
 
        if (ext & (1 << (INET_DIAG_INFO - 1))) {
                struct nlattr *attr;
 
-               attr = nla_reserve(skb, INET_DIAG_INFO,
-                                  sizeof(struct sctp_info));
+               attr = nla_reserve_64bit(skb, INET_DIAG_INFO,
+                                        sizeof(struct sctp_info),
+                                        INET_DIAG_PAD);
                if (!attr)
                        goto errout;