Commit 8d9ea160 authored by David S. Miller's avatar David S. Miller

Merge branch 'nla_align-more'

Nicolas Dichtel says:

====================
netlink: align attributes when needed (patchset #1)

This is the continuation of the work done to align netlink attributes
when these attributes contain some 64-bit fields.

David, if the third patch is too big (or maybe the series), I can split it.
Just tell me what you prefer.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 1602f49b 80df5542
...@@ -351,7 +351,8 @@ ip_set_put_skbinfo(struct sk_buff *skb, struct ip_set_skbinfo *skbinfo) ...@@ -351,7 +351,8 @@ ip_set_put_skbinfo(struct sk_buff *skb, struct ip_set_skbinfo *skbinfo)
return ((skbinfo->skbmark || skbinfo->skbmarkmask) && return ((skbinfo->skbmark || skbinfo->skbmarkmask) &&
nla_put_net64(skb, IPSET_ATTR_SKBMARK, nla_put_net64(skb, IPSET_ATTR_SKBMARK,
cpu_to_be64((u64)skbinfo->skbmark << 32 | cpu_to_be64((u64)skbinfo->skbmark << 32 |
skbinfo->skbmarkmask))) || skbinfo->skbmarkmask),
IPSET_ATTR_PAD)) ||
(skbinfo->skbprio && (skbinfo->skbprio &&
nla_put_net32(skb, IPSET_ATTR_SKBPRIO, nla_put_net32(skb, IPSET_ATTR_SKBPRIO,
cpu_to_be32(skbinfo->skbprio))) || cpu_to_be32(skbinfo->skbprio))) ||
...@@ -374,9 +375,11 @@ static inline bool ...@@ -374,9 +375,11 @@ static inline bool
ip_set_put_counter(struct sk_buff *skb, struct ip_set_counter *counter) ip_set_put_counter(struct sk_buff *skb, struct ip_set_counter *counter)
{ {
return nla_put_net64(skb, IPSET_ATTR_BYTES, return nla_put_net64(skb, IPSET_ATTR_BYTES,
cpu_to_be64(ip_set_get_bytes(counter))) || cpu_to_be64(ip_set_get_bytes(counter)),
IPSET_ATTR_PAD) ||
nla_put_net64(skb, IPSET_ATTR_PACKETS, nla_put_net64(skb, IPSET_ATTR_PACKETS,
cpu_to_be64(ip_set_get_packets(counter))); cpu_to_be64(ip_set_get_packets(counter)),
IPSET_ATTR_PAD);
} }
static inline void static inline void
......
...@@ -102,10 +102,12 @@ ...@@ -102,10 +102,12 @@
* nla_put_s8(skb, type, value) add s8 attribute to skb * nla_put_s8(skb, type, value) add s8 attribute to skb
* nla_put_s16(skb, type, value) add s16 attribute to skb * nla_put_s16(skb, type, value) add s16 attribute to skb
* nla_put_s32(skb, type, value) add s32 attribute to skb * nla_put_s32(skb, type, value) add s32 attribute to skb
* nla_put_s64(skb, type, value) add s64 attribute to skb * nla_put_s64(skb, type, value,
* padattr) add s64 attribute to skb
* nla_put_string(skb, type, str) add string attribute to skb * nla_put_string(skb, type, str) add string attribute to skb
* nla_put_flag(skb, type) add flag attribute to skb * nla_put_flag(skb, type) add flag attribute to skb
* nla_put_msecs(skb, type, jiffies) add msecs attribute to skb * nla_put_msecs(skb, type, jiffies,
* padattr) add msecs attribute to skb
* nla_put_in_addr(skb, type, addr) add IPv4 address attribute to skb * nla_put_in_addr(skb, type, addr) add IPv4 address attribute to skb
* nla_put_in6_addr(skb, type, addr) add IPv6 address attribute to skb * nla_put_in6_addr(skb, type, addr) add IPv6 address attribute to skb
* *
...@@ -856,36 +858,56 @@ static inline int nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) ...@@ -856,36 +858,56 @@ static inline int nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
} }
/** /**
* nla_put_be64 - Add a __be64 netlink attribute to a socket buffer * nla_put_u64_64bit - Add a u64 netlink attribute to a skb and align it
* @skb: socket buffer to add attribute to * @skb: socket buffer to add attribute to
* @attrtype: attribute type * @attrtype: attribute type
* @value: numeric value * @value: numeric value
* @padattr: attribute type for the padding
*/ */
static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value) static inline int nla_put_u64_64bit(struct sk_buff *skb, int attrtype,
u64 value, int padattr)
{ {
return nla_put(skb, attrtype, sizeof(__be64), &value); return nla_put_64bit(skb, attrtype, sizeof(u64), &value, padattr);
} }
/** /**
* nla_put_net64 - Add 64-bit network byte order netlink attribute to a socket buffer * nla_put_be64 - Add a __be64 netlink attribute to a socket buffer and align it
* @skb: socket buffer to add attribute to * @skb: socket buffer to add attribute to
* @attrtype: attribute type * @attrtype: attribute type
* @value: numeric value * @value: numeric value
* @padattr: attribute type for the padding
*/ */
static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value) static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value,
int padattr)
{ {
return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, value); return nla_put_64bit(skb, attrtype, sizeof(__be64), &value, padattr);
} }
/** /**
* nla_put_le64 - Add a __le64 netlink attribute to a socket buffer * nla_put_net64 - Add 64-bit network byte order nlattr to a skb and align it
* @skb: socket buffer to add attribute to * @skb: socket buffer to add attribute to
* @attrtype: attribute type * @attrtype: attribute type
* @value: numeric value * @value: numeric value
* @padattr: attribute type for the padding
*/ */
static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value) static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value,
int padattr)
{ {
return nla_put(skb, attrtype, sizeof(__le64), &value); return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, value,
padattr);
}
/**
* nla_put_le64 - Add a __le64 netlink attribute to a socket buffer and align it
* @skb: socket buffer to add attribute to
* @attrtype: attribute type
* @value: numeric value
* @padattr: attribute type for the padding
*/
static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value,
int padattr)
{
return nla_put_64bit(skb, attrtype, sizeof(__le64), &value, padattr);
} }
/** /**
...@@ -922,14 +944,16 @@ static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value) ...@@ -922,14 +944,16 @@ static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value)
} }
/** /**
* nla_put_s64 - Add a s64 netlink attribute to a socket buffer * nla_put_s64 - Add a s64 netlink attribute to a socket buffer and align it
* @skb: socket buffer to add attribute to * @skb: socket buffer to add attribute to
* @attrtype: attribute type * @attrtype: attribute type
* @value: numeric value * @value: numeric value
* @padattr: attribute type for the padding
*/ */
static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value) static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value,
int padattr)
{ {
return nla_put(skb, attrtype, sizeof(s64), &value); return nla_put_64bit(skb, attrtype, sizeof(s64), &value, padattr);
} }
/** /**
...@@ -955,16 +979,18 @@ static inline int nla_put_flag(struct sk_buff *skb, int attrtype) ...@@ -955,16 +979,18 @@ static inline int nla_put_flag(struct sk_buff *skb, int attrtype)
} }
/** /**
* nla_put_msecs - Add a msecs netlink attribute to a socket buffer * nla_put_msecs - Add a msecs netlink attribute to a skb and align it
* @skb: socket buffer to add attribute to * @skb: socket buffer to add attribute to
* @attrtype: attribute type * @attrtype: attribute type
* @njiffies: number of jiffies to convert to msecs * @njiffies: number of jiffies to convert to msecs
* @padattr: attribute type for the padding
*/ */
static inline int nla_put_msecs(struct sk_buff *skb, int attrtype, static inline int nla_put_msecs(struct sk_buff *skb, int attrtype,
unsigned long njiffies) unsigned long njiffies, int padattr)
{ {
u64 tmp = jiffies_to_msecs(njiffies); u64 tmp = jiffies_to_msecs(njiffies);
return nla_put(skb, attrtype, sizeof(u64), &tmp);
return nla_put_64bit(skb, attrtype, sizeof(u64), &tmp, padattr);
} }
/** /**
......
...@@ -138,6 +138,8 @@ enum nl802154_attrs { ...@@ -138,6 +138,8 @@ enum nl802154_attrs {
NL802154_ATTR_SEC_KEY, NL802154_ATTR_SEC_KEY,
#endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */ #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */
NL802154_ATTR_PAD,
__NL802154_ATTR_AFTER_LAST, __NL802154_ATTR_AFTER_LAST,
NL802154_ATTR_MAX = __NL802154_ATTR_AFTER_LAST - 1 NL802154_ATTR_MAX = __NL802154_ATTR_AFTER_LAST - 1
}; };
...@@ -295,6 +297,7 @@ enum nl802154_dev_addr_attrs { ...@@ -295,6 +297,7 @@ enum nl802154_dev_addr_attrs {
NL802154_DEV_ADDR_ATTR_MODE, NL802154_DEV_ADDR_ATTR_MODE,
NL802154_DEV_ADDR_ATTR_SHORT, NL802154_DEV_ADDR_ATTR_SHORT,
NL802154_DEV_ADDR_ATTR_EXTENDED, NL802154_DEV_ADDR_ATTR_EXTENDED,
NL802154_DEV_ADDR_ATTR_PAD,
/* keep last */ /* keep last */
__NL802154_DEV_ADDR_ATTR_AFTER_LAST, __NL802154_DEV_ADDR_ATTR_AFTER_LAST,
...@@ -320,6 +323,7 @@ enum nl802154_key_id_attrs { ...@@ -320,6 +323,7 @@ enum nl802154_key_id_attrs {
NL802154_KEY_ID_ATTR_IMPLICIT, NL802154_KEY_ID_ATTR_IMPLICIT,
NL802154_KEY_ID_ATTR_SOURCE_SHORT, NL802154_KEY_ID_ATTR_SOURCE_SHORT,
NL802154_KEY_ID_ATTR_SOURCE_EXTENDED, NL802154_KEY_ID_ATTR_SOURCE_EXTENDED,
NL802154_KEY_ID_ATTR_PAD,
/* keep last */ /* keep last */
__NL802154_KEY_ID_ATTR_AFTER_LAST, __NL802154_KEY_ID_ATTR_AFTER_LAST,
...@@ -402,6 +406,7 @@ enum nl802154_dev { ...@@ -402,6 +406,7 @@ enum nl802154_dev {
NL802154_DEV_ATTR_EXTENDED_ADDR, NL802154_DEV_ATTR_EXTENDED_ADDR,
NL802154_DEV_ATTR_SECLEVEL_EXEMPT, NL802154_DEV_ATTR_SECLEVEL_EXEMPT,
NL802154_DEV_ATTR_KEY_MODE, NL802154_DEV_ATTR_KEY_MODE,
NL802154_DEV_ATTR_PAD,
/* keep last */ /* keep last */
__NL802154_DEV_ATTR_AFTER_LAST, __NL802154_DEV_ATTR_AFTER_LAST,
...@@ -414,6 +419,7 @@ enum nl802154_devkey { ...@@ -414,6 +419,7 @@ enum nl802154_devkey {
NL802154_DEVKEY_ATTR_FRAME_COUNTER, NL802154_DEVKEY_ATTR_FRAME_COUNTER,
NL802154_DEVKEY_ATTR_EXTENDED_ADDR, NL802154_DEVKEY_ATTR_EXTENDED_ADDR,
NL802154_DEVKEY_ATTR_ID, NL802154_DEVKEY_ATTR_ID,
NL802154_DEVKEY_ATTR_PAD,
/* keep last */ /* keep last */
__NL802154_DEVKEY_ATTR_AFTER_LAST, __NL802154_DEVKEY_ATTR_AFTER_LAST,
......
...@@ -49,6 +49,7 @@ enum { ...@@ -49,6 +49,7 @@ enum {
FRA_TABLE, /* Extended table id */ FRA_TABLE, /* Extended table id */
FRA_FWMASK, /* mask for netfilter mark */ FRA_FWMASK, /* mask for netfilter mark */
FRA_OIFNAME, FRA_OIFNAME,
FRA_PAD,
__FRA_MAX __FRA_MAX
}; };
......
...@@ -126,6 +126,7 @@ enum { ...@@ -126,6 +126,7 @@ enum {
L2TP_ATTR_IP6_DADDR, /* struct in6_addr */ L2TP_ATTR_IP6_DADDR, /* struct in6_addr */
L2TP_ATTR_UDP_ZERO_CSUM6_TX, /* u8 */ L2TP_ATTR_UDP_ZERO_CSUM6_TX, /* u8 */
L2TP_ATTR_UDP_ZERO_CSUM6_RX, /* u8 */ L2TP_ATTR_UDP_ZERO_CSUM6_RX, /* u8 */
L2TP_ATTR_PAD,
__L2TP_ATTR_MAX, __L2TP_ATTR_MAX,
}; };
......
...@@ -22,6 +22,7 @@ enum lwtunnel_ip_t { ...@@ -22,6 +22,7 @@ enum lwtunnel_ip_t {
LWTUNNEL_IP_TTL, LWTUNNEL_IP_TTL,
LWTUNNEL_IP_TOS, LWTUNNEL_IP_TOS,
LWTUNNEL_IP_FLAGS, LWTUNNEL_IP_FLAGS,
LWTUNNEL_IP_PAD,
__LWTUNNEL_IP_MAX, __LWTUNNEL_IP_MAX,
}; };
...@@ -35,6 +36,7 @@ enum lwtunnel_ip6_t { ...@@ -35,6 +36,7 @@ enum lwtunnel_ip6_t {
LWTUNNEL_IP6_HOPLIMIT, LWTUNNEL_IP6_HOPLIMIT,
LWTUNNEL_IP6_TC, LWTUNNEL_IP6_TC,
LWTUNNEL_IP6_FLAGS, LWTUNNEL_IP6_FLAGS,
LWTUNNEL_IP6_PAD,
__LWTUNNEL_IP6_MAX, __LWTUNNEL_IP6_MAX,
}; };
......
...@@ -128,6 +128,7 @@ enum { ...@@ -128,6 +128,7 @@ enum {
NDTPA_LOCKTIME, /* u64, msecs */ NDTPA_LOCKTIME, /* u64, msecs */
NDTPA_QUEUE_LENBYTES, /* u32 */ NDTPA_QUEUE_LENBYTES, /* u32 */
NDTPA_MCAST_REPROBES, /* u32 */ NDTPA_MCAST_REPROBES, /* u32 */
NDTPA_PAD,
__NDTPA_MAX __NDTPA_MAX
}; };
#define NDTPA_MAX (__NDTPA_MAX - 1) #define NDTPA_MAX (__NDTPA_MAX - 1)
...@@ -160,6 +161,7 @@ enum { ...@@ -160,6 +161,7 @@ enum {
NDTA_PARMS, /* nested TLV NDTPA_* */ NDTA_PARMS, /* nested TLV NDTPA_* */
NDTA_STATS, /* struct ndt_stats, read-only */ NDTA_STATS, /* struct ndt_stats, read-only */
NDTA_GC_INTERVAL, /* u64, msecs */ NDTA_GC_INTERVAL, /* u64, msecs */
NDTA_PAD,
__NDTA_MAX __NDTA_MAX
}; };
#define NDTA_MAX (__NDTA_MAX - 1) #define NDTA_MAX (__NDTA_MAX - 1)
......
...@@ -118,6 +118,7 @@ enum { ...@@ -118,6 +118,7 @@ enum {
IPSET_ATTR_SKBMARK, IPSET_ATTR_SKBMARK,
IPSET_ATTR_SKBPRIO, IPSET_ATTR_SKBPRIO,
IPSET_ATTR_SKBQUEUE, IPSET_ATTR_SKBQUEUE,
IPSET_ATTR_PAD,
__IPSET_ATTR_ADT_MAX, __IPSET_ATTR_ADT_MAX,
}; };
#define IPSET_ATTR_ADT_MAX (__IPSET_ATTR_ADT_MAX - 1) #define IPSET_ATTR_ADT_MAX (__IPSET_ATTR_ADT_MAX - 1)
......
...@@ -182,6 +182,7 @@ enum nft_chain_attributes { ...@@ -182,6 +182,7 @@ enum nft_chain_attributes {
NFTA_CHAIN_USE, NFTA_CHAIN_USE,
NFTA_CHAIN_TYPE, NFTA_CHAIN_TYPE,
NFTA_CHAIN_COUNTERS, NFTA_CHAIN_COUNTERS,
NFTA_CHAIN_PAD,
__NFTA_CHAIN_MAX __NFTA_CHAIN_MAX
}; };
#define NFTA_CHAIN_MAX (__NFTA_CHAIN_MAX - 1) #define NFTA_CHAIN_MAX (__NFTA_CHAIN_MAX - 1)
...@@ -206,6 +207,7 @@ enum nft_rule_attributes { ...@@ -206,6 +207,7 @@ enum nft_rule_attributes {
NFTA_RULE_COMPAT, NFTA_RULE_COMPAT,
NFTA_RULE_POSITION, NFTA_RULE_POSITION,
NFTA_RULE_USERDATA, NFTA_RULE_USERDATA,
NFTA_RULE_PAD,
__NFTA_RULE_MAX __NFTA_RULE_MAX
}; };
#define NFTA_RULE_MAX (__NFTA_RULE_MAX - 1) #define NFTA_RULE_MAX (__NFTA_RULE_MAX - 1)
...@@ -308,6 +310,7 @@ enum nft_set_attributes { ...@@ -308,6 +310,7 @@ enum nft_set_attributes {
NFTA_SET_TIMEOUT, NFTA_SET_TIMEOUT,
NFTA_SET_GC_INTERVAL, NFTA_SET_GC_INTERVAL,
NFTA_SET_USERDATA, NFTA_SET_USERDATA,
NFTA_SET_PAD,
__NFTA_SET_MAX __NFTA_SET_MAX
}; };
#define NFTA_SET_MAX (__NFTA_SET_MAX - 1) #define NFTA_SET_MAX (__NFTA_SET_MAX - 1)
...@@ -341,6 +344,7 @@ enum nft_set_elem_attributes { ...@@ -341,6 +344,7 @@ enum nft_set_elem_attributes {
NFTA_SET_ELEM_EXPIRATION, NFTA_SET_ELEM_EXPIRATION,
NFTA_SET_ELEM_USERDATA, NFTA_SET_ELEM_USERDATA,
NFTA_SET_ELEM_EXPR, NFTA_SET_ELEM_EXPR,
NFTA_SET_ELEM_PAD,
__NFTA_SET_ELEM_MAX __NFTA_SET_ELEM_MAX
}; };
#define NFTA_SET_ELEM_MAX (__NFTA_SET_ELEM_MAX - 1) #define NFTA_SET_ELEM_MAX (__NFTA_SET_ELEM_MAX - 1)
...@@ -584,6 +588,7 @@ enum nft_dynset_attributes { ...@@ -584,6 +588,7 @@ enum nft_dynset_attributes {
NFTA_DYNSET_SREG_DATA, NFTA_DYNSET_SREG_DATA,
NFTA_DYNSET_TIMEOUT, NFTA_DYNSET_TIMEOUT,
NFTA_DYNSET_EXPR, NFTA_DYNSET_EXPR,
NFTA_DYNSET_PAD,
__NFTA_DYNSET_MAX, __NFTA_DYNSET_MAX,
}; };
#define NFTA_DYNSET_MAX (__NFTA_DYNSET_MAX - 1) #define NFTA_DYNSET_MAX (__NFTA_DYNSET_MAX - 1)
...@@ -806,6 +811,7 @@ enum nft_limit_attributes { ...@@ -806,6 +811,7 @@ enum nft_limit_attributes {
NFTA_LIMIT_BURST, NFTA_LIMIT_BURST,
NFTA_LIMIT_TYPE, NFTA_LIMIT_TYPE,
NFTA_LIMIT_FLAGS, NFTA_LIMIT_FLAGS,
NFTA_LIMIT_PAD,
__NFTA_LIMIT_MAX __NFTA_LIMIT_MAX
}; };
#define NFTA_LIMIT_MAX (__NFTA_LIMIT_MAX - 1) #define NFTA_LIMIT_MAX (__NFTA_LIMIT_MAX - 1)
...@@ -820,6 +826,7 @@ enum nft_counter_attributes { ...@@ -820,6 +826,7 @@ enum nft_counter_attributes {
NFTA_COUNTER_UNSPEC, NFTA_COUNTER_UNSPEC,
NFTA_COUNTER_BYTES, NFTA_COUNTER_BYTES,
NFTA_COUNTER_PACKETS, NFTA_COUNTER_PACKETS,
NFTA_COUNTER_PAD,
__NFTA_COUNTER_MAX __NFTA_COUNTER_MAX
}; };
#define NFTA_COUNTER_MAX (__NFTA_COUNTER_MAX - 1) #define NFTA_COUNTER_MAX (__NFTA_COUNTER_MAX - 1)
...@@ -1055,6 +1062,7 @@ enum nft_trace_attibutes { ...@@ -1055,6 +1062,7 @@ enum nft_trace_attibutes {
NFTA_TRACE_MARK, NFTA_TRACE_MARK,
NFTA_TRACE_NFPROTO, NFTA_TRACE_NFPROTO,
NFTA_TRACE_POLICY, NFTA_TRACE_POLICY,
NFTA_TRACE_PAD,
__NFTA_TRACE_MAX __NFTA_TRACE_MAX
}; };
#define NFTA_TRACE_MAX (__NFTA_TRACE_MAX - 1) #define NFTA_TRACE_MAX (__NFTA_TRACE_MAX - 1)
......
...@@ -29,6 +29,7 @@ enum nfnl_acct_type { ...@@ -29,6 +29,7 @@ enum nfnl_acct_type {
NFACCT_FLAGS, NFACCT_FLAGS,
NFACCT_QUOTA, NFACCT_QUOTA,
NFACCT_FILTER, NFACCT_FILTER,
NFACCT_PAD,
__NFACCT_MAX __NFACCT_MAX
}; };
#define NFACCT_MAX (__NFACCT_MAX - 1) #define NFACCT_MAX (__NFACCT_MAX - 1)
......
...@@ -116,6 +116,7 @@ enum ctattr_protoinfo_dccp { ...@@ -116,6 +116,7 @@ enum ctattr_protoinfo_dccp {
CTA_PROTOINFO_DCCP_STATE, CTA_PROTOINFO_DCCP_STATE,
CTA_PROTOINFO_DCCP_ROLE, CTA_PROTOINFO_DCCP_ROLE,
CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ, CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ,
CTA_PROTOINFO_DCCP_PAD,
__CTA_PROTOINFO_DCCP_MAX, __CTA_PROTOINFO_DCCP_MAX,
}; };
#define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1)
...@@ -135,6 +136,7 @@ enum ctattr_counters { ...@@ -135,6 +136,7 @@ enum ctattr_counters {
CTA_COUNTERS_BYTES, /* 64bit counters */ CTA_COUNTERS_BYTES, /* 64bit counters */
CTA_COUNTERS32_PACKETS, /* old 32bit counters, unused */ CTA_COUNTERS32_PACKETS, /* old 32bit counters, unused */
CTA_COUNTERS32_BYTES, /* old 32bit counters, unused */ CTA_COUNTERS32_BYTES, /* old 32bit counters, unused */
CTA_COUNTERS_PAD,
__CTA_COUNTERS_MAX __CTA_COUNTERS_MAX
}; };
#define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1) #define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1)
...@@ -143,6 +145,7 @@ enum ctattr_tstamp { ...@@ -143,6 +145,7 @@ enum ctattr_tstamp {
CTA_TIMESTAMP_UNSPEC, CTA_TIMESTAMP_UNSPEC,
CTA_TIMESTAMP_START, CTA_TIMESTAMP_START,
CTA_TIMESTAMP_STOP, CTA_TIMESTAMP_STOP,
CTA_TIMESTAMP_PAD,
__CTA_TIMESTAMP_MAX __CTA_TIMESTAMP_MAX
}; };
#define CTA_TIMESTAMP_MAX (__CTA_TIMESTAMP_MAX - 1) #define CTA_TIMESTAMP_MAX (__CTA_TIMESTAMP_MAX - 1)
......
...@@ -351,6 +351,7 @@ enum ovs_tunnel_key_attr { ...@@ -351,6 +351,7 @@ enum ovs_tunnel_key_attr {
OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS, /* Nested OVS_VXLAN_EXT_* */ OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS, /* Nested OVS_VXLAN_EXT_* */
OVS_TUNNEL_KEY_ATTR_IPV6_SRC, /* struct in6_addr src IPv6 address. */ OVS_TUNNEL_KEY_ATTR_IPV6_SRC, /* struct in6_addr src IPv6 address. */
OVS_TUNNEL_KEY_ATTR_IPV6_DST, /* struct in6_addr dst IPv6 address. */ OVS_TUNNEL_KEY_ATTR_IPV6_DST, /* struct in6_addr dst IPv6 address. */
OVS_TUNNEL_KEY_ATTR_PAD,
__OVS_TUNNEL_KEY_ATTR_MAX __OVS_TUNNEL_KEY_ATTR_MAX
}; };
......
...@@ -40,6 +40,7 @@ enum { ...@@ -40,6 +40,7 @@ enum {
TCP_METRICS_ATTR_FOPEN_COOKIE, /* binary */ TCP_METRICS_ATTR_FOPEN_COOKIE, /* binary */
TCP_METRICS_ATTR_SADDR_IPV4, /* u32 */ TCP_METRICS_ATTR_SADDR_IPV4, /* u32 */
TCP_METRICS_ATTR_SADDR_IPV6, /* binary */ TCP_METRICS_ATTR_SADDR_IPV6, /* binary */
TCP_METRICS_ATTR_PAD,
__TCP_METRICS_ATTR_MAX, __TCP_METRICS_ATTR_MAX,
}; };
......
...@@ -302,6 +302,7 @@ enum xfrm_attr_type_t { ...@@ -302,6 +302,7 @@ enum xfrm_attr_type_t {
XFRMA_SA_EXTRA_FLAGS, /* __u32 */ XFRMA_SA_EXTRA_FLAGS, /* __u32 */
XFRMA_PROTO, /* __u8 */ XFRMA_PROTO, /* __u8 */
XFRMA_ADDRESS_FILTER, /* struct xfrm_address_filter */ XFRMA_ADDRESS_FILTER, /* struct xfrm_address_filter */
XFRMA_PAD,
__XFRMA_MAX __XFRMA_MAX
#define XFRMA_MAX (__XFRMA_MAX - 1) #define XFRMA_MAX (__XFRMA_MAX - 1)
......
...@@ -357,10 +357,6 @@ static int parse(struct nlattr *na, struct cpumask *mask) ...@@ -357,10 +357,6 @@ static int parse(struct nlattr *na, struct cpumask *mask)
return ret; return ret;
} }
#if defined(CONFIG_64BIT) && !defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
#define TASKSTATS_NEEDS_PADDING 1
#endif
static struct taskstats *mk_reply(struct sk_buff *skb, int type, u32 pid) static struct taskstats *mk_reply(struct sk_buff *skb, int type, u32 pid)
{ {
struct nlattr *na, *ret; struct nlattr *na, *ret;
...@@ -370,29 +366,6 @@ static struct taskstats *mk_reply(struct sk_buff *skb, int type, u32 pid) ...@@ -370,29 +366,6 @@ static struct taskstats *mk_reply(struct sk_buff *skb, int type, u32 pid)
? TASKSTATS_TYPE_AGGR_PID ? TASKSTATS_TYPE_AGGR_PID
: TASKSTATS_TYPE_AGGR_TGID; : TASKSTATS_TYPE_AGGR_TGID;
/*
* The taskstats structure is internally aligned on 8 byte
* boundaries but the layout of the aggregrate reply, with
* two NLA headers and the pid (each 4 bytes), actually
* force the entire structure to be unaligned. This causes
* the kernel to issue unaligned access warnings on some
* architectures like ia64. Unfortunately, some software out there
* doesn't properly unroll the NLA packet and assumes that the start
* of the taskstats structure will always be 20 bytes from the start
* of the netlink payload. Aligning the start of the taskstats
* structure breaks this software, which we don't want. So, for now
* the alignment only happens on architectures that require it
* and those users will have to update to fixed versions of those
* packages. Space is reserved in the packet only when needed.
* This ifdef should be removed in several years e.g. 2012 once
* we can be confident that fixed versions are installed on most
* systems. We add the padding before the aggregate since the
* aggregate is already a defined type.
*/
#ifdef TASKSTATS_NEEDS_PADDING
if (nla_put(skb, TASKSTATS_TYPE_NULL, 0, NULL) < 0)
goto err;
#endif
na = nla_nest_start(skb, aggr); na = nla_nest_start(skb, aggr);
if (!na) if (!na)
goto err; goto err;
...@@ -401,7 +374,8 @@ static struct taskstats *mk_reply(struct sk_buff *skb, int type, u32 pid) ...@@ -401,7 +374,8 @@ static struct taskstats *mk_reply(struct sk_buff *skb, int type, u32 pid)
nla_nest_cancel(skb, na); nla_nest_cancel(skb, na);
goto err; goto err;
} }
ret = nla_reserve(skb, TASKSTATS_TYPE_STATS, sizeof(struct taskstats)); ret = nla_reserve_64bit(skb, TASKSTATS_TYPE_STATS,
sizeof(struct taskstats), TASKSTATS_TYPE_NULL);
if (!ret) { if (!ret) {
nla_nest_cancel(skb, na); nla_nest_cancel(skb, na);
goto err; goto err;
...@@ -500,10 +474,9 @@ static size_t taskstats_packet_size(void) ...@@ -500,10 +474,9 @@ static size_t taskstats_packet_size(void)
size_t size; size_t size;
size = nla_total_size(sizeof(u32)) + size = nla_total_size(sizeof(u32)) +
nla_total_size(sizeof(struct taskstats)) + nla_total_size(0); nla_total_size_64bit(sizeof(struct taskstats)) +
#ifdef TASKSTATS_NEEDS_PADDING nla_total_size(0);
size += nla_total_size(0); /* Padding for alignment */
#endif
return size; return size;
} }
......
...@@ -359,10 +359,11 @@ EXPORT_SYMBOL(__nla_reserve); ...@@ -359,10 +359,11 @@ EXPORT_SYMBOL(__nla_reserve);
* @skb: socket buffer to reserve room on * @skb: socket buffer to reserve room on
* @attrtype: attribute type * @attrtype: attribute type
* @attrlen: length of attribute payload * @attrlen: length of attribute payload
* @padattr: attribute type for the padding
* *
* Adds a netlink attribute header to a socket buffer and reserves * Adds a netlink attribute header to a socket buffer and reserves
* room for the payload but does not copy it. It also ensure that this * room for the payload but does not copy it. It also ensure that this
* attribute will be 64-bit aign. * attribute will have a 64-bit aligned nla_data() area.
* *
* The caller is responsible to ensure that the skb provides enough * The caller is responsible to ensure that the skb provides enough
* tailroom for the attribute header and payload. * tailroom for the attribute header and payload.
...@@ -424,10 +425,11 @@ EXPORT_SYMBOL(nla_reserve); ...@@ -424,10 +425,11 @@ EXPORT_SYMBOL(nla_reserve);
* @skb: socket buffer to reserve room on * @skb: socket buffer to reserve room on
* @attrtype: attribute type * @attrtype: attribute type
* @attrlen: length of attribute payload * @attrlen: length of attribute payload
* @padattr: attribute type for the padding
* *
* Adds a netlink attribute header to a socket buffer and reserves * Adds a netlink attribute header to a socket buffer and reserves
* room for the payload but does not copy it. It also ensure that this * room for the payload but does not copy it. It also ensure that this
* attribute will be 64-bit aign. * attribute will have a 64-bit aligned nla_data() area.
* *
* Returns NULL if the tailroom of the skb is insufficient to store * Returns NULL if the tailroom of the skb is insufficient to store
* the attribute header and payload. * the attribute header and payload.
...@@ -493,6 +495,7 @@ EXPORT_SYMBOL(__nla_put); ...@@ -493,6 +495,7 @@ EXPORT_SYMBOL(__nla_put);
* @attrtype: attribute type * @attrtype: attribute type
* @attrlen: length of attribute payload * @attrlen: length of attribute payload
* @data: head of attribute payload * @data: head of attribute payload
* @padattr: attribute type for the padding
* *
* The caller is responsible to ensure that the skb provides enough * The caller is responsible to ensure that the skb provides enough
* tailroom for the attribute header and payload. * tailroom for the attribute header and payload.
...@@ -551,6 +554,7 @@ EXPORT_SYMBOL(nla_put); ...@@ -551,6 +554,7 @@ EXPORT_SYMBOL(nla_put);
* @attrtype: attribute type * @attrtype: attribute type
* @attrlen: length of attribute payload * @attrlen: length of attribute payload
* @data: head of attribute payload * @data: head of attribute payload
* @padattr: attribute type for the padding
* *
* Returns -EMSGSIZE if the tailroom of the skb is insufficient to store * Returns -EMSGSIZE if the tailroom of the skb is insufficient to store
* the attribute header and payload. * the attribute header and payload.
......
...@@ -549,7 +549,7 @@ static inline size_t fib_rule_nlmsg_size(struct fib_rules_ops *ops, ...@@ -549,7 +549,7 @@ static inline size_t fib_rule_nlmsg_size(struct fib_rules_ops *ops,
+ nla_total_size(4) /* FRA_SUPPRESS_IFGROUP */ + nla_total_size(4) /* FRA_SUPPRESS_IFGROUP */
+ nla_total_size(4) /* FRA_FWMARK */ + nla_total_size(4) /* FRA_FWMARK */
+ nla_total_size(4) /* FRA_FWMASK */ + nla_total_size(4) /* FRA_FWMASK */
+ nla_total_size(8); /* FRA_TUN_ID */ + nla_total_size_64bit(8); /* FRA_TUN_ID */
if (ops->nlmsg_payload) if (ops->nlmsg_payload)
payload += ops->nlmsg_payload(rule); payload += ops->nlmsg_payload(rule);
...@@ -607,7 +607,7 @@ static int fib_nl_fill_rule(struct sk_buff *skb, struct fib_rule *rule, ...@@ -607,7 +607,7 @@ static int fib_nl_fill_rule(struct sk_buff *skb, struct fib_rule *rule,
(rule->target && (rule->target &&
nla_put_u32(skb, FRA_GOTO, rule->target)) || nla_put_u32(skb, FRA_GOTO, rule->target)) ||
(rule->tun_id && (rule->tun_id &&
nla_put_be64(skb, FRA_TUN_ID, rule->tun_id))) nla_put_be64(skb, FRA_TUN_ID, rule->tun_id, FRA_PAD)))
goto nla_put_failure; goto nla_put_failure;
if (rule->suppress_ifgroup != -1) { if (rule->suppress_ifgroup != -1) {
......
...@@ -1763,21 +1763,22 @@ static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms) ...@@ -1763,21 +1763,22 @@ static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms)
NEIGH_VAR(parms, MCAST_PROBES)) || NEIGH_VAR(parms, MCAST_PROBES)) ||
nla_put_u32(skb, NDTPA_MCAST_REPROBES, nla_put_u32(skb, NDTPA_MCAST_REPROBES,
NEIGH_VAR(parms, MCAST_REPROBES)) || NEIGH_VAR(parms, MCAST_REPROBES)) ||
nla_put_msecs(skb, NDTPA_REACHABLE_TIME, parms->reachable_time) || nla_put_msecs(skb, NDTPA_REACHABLE_TIME, parms->reachable_time,
NDTPA_PAD) ||
nla_put_msecs(skb, NDTPA_BASE_REACHABLE_TIME, nla_put_msecs(skb, NDTPA_BASE_REACHABLE_TIME,
NEIGH_VAR(parms, BASE_REACHABLE_TIME)) || NEIGH_VAR(parms, BASE_REACHABLE_TIME), NDTPA_PAD) ||
nla_put_msecs(skb, NDTPA_GC_STALETIME, nla_put_msecs(skb, NDTPA_GC_STALETIME,
NEIGH_VAR(parms, GC_STALETIME)) || NEIGH_VAR(parms, GC_STALETIME), NDTPA_PAD) ||
nla_put_msecs(skb, NDTPA_DELAY_PROBE_TIME, nla_put_msecs(skb, NDTPA_DELAY_PROBE_TIME,
NEIGH_VAR(parms, DELAY_PROBE_TIME)) || NEIGH_VAR(parms, DELAY_PROBE_TIME), NDTPA_PAD) ||
nla_put_msecs(skb, NDTPA_RETRANS_TIME, nla_put_msecs(skb, NDTPA_RETRANS_TIME,
NEIGH_VAR(parms, RETRANS_TIME)) || NEIGH_VAR(parms, RETRANS_TIME), NDTPA_PAD) ||
nla_put_msecs(skb, NDTPA_ANYCAST_DELAY, nla_put_msecs(skb, NDTPA_ANYCAST_DELAY,
NEIGH_VAR(parms, ANYCAST_DELAY)) || NEIGH_VAR(parms, ANYCAST_DELAY), NDTPA_PAD) ||
nla_put_msecs(skb, NDTPA_PROXY_DELAY, nla_put_msecs(skb, NDTPA_PROXY_DELAY,
NEIGH_VAR(parms, PROXY_DELAY)) || NEIGH_VAR(parms, PROXY_DELAY), NDTPA_PAD) ||
nla_put_msecs(skb, NDTPA_LOCKTIME, nla_put_msecs(skb, NDTPA_LOCKTIME,
NEIGH_VAR(parms, LOCKTIME))) NEIGH_VAR(parms, LOCKTIME), NDTPA_PAD))
goto nla_put_failure; goto nla_put_failure;
return nla_nest_end(skb, nest); return nla_nest_end(skb, nest);
...@@ -1804,7 +1805,7 @@ static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl, ...@@ -1804,7 +1805,7 @@ static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl,
ndtmsg->ndtm_pad2 = 0; ndtmsg->ndtm_pad2 = 0;
if (nla_put_string(skb, NDTA_NAME, tbl->id) || if (nla_put_string(skb, NDTA_NAME, tbl->id) ||
nla_put_msecs(skb, NDTA_GC_INTERVAL, tbl->gc_interval) || nla_put_msecs(skb, NDTA_GC_INTERVAL, tbl->gc_interval, NDTA_PAD) ||
nla_put_u32(skb, NDTA_THRESH1, tbl->gc_thresh1) || nla_put_u32(skb, NDTA_THRESH1, tbl->gc_thresh1) ||
nla_put_u32(skb, NDTA_THRESH2, tbl->gc_thresh2) || nla_put_u32(skb, NDTA_THRESH2, tbl->gc_thresh2) ||
nla_put_u32(skb, NDTA_THRESH3, tbl->gc_thresh3)) nla_put_u32(skb, NDTA_THRESH3, tbl->gc_thresh3))
......
...@@ -722,7 +722,8 @@ ieee802154_llsec_send_key_id(struct sk_buff *msg, ...@@ -722,7 +722,8 @@ ieee802154_llsec_send_key_id(struct sk_buff *msg,
break; break;
case NL802154_DEV_ADDR_EXTENDED: case NL802154_DEV_ADDR_EXTENDED:
if (nla_put_le64(msg, NL802154_DEV_ADDR_ATTR_EXTENDED, if (nla_put_le64(msg, NL802154_DEV_ADDR_ATTR_EXTENDED,
desc->device_addr.extended_addr)) desc->device_addr.extended_addr,
NL802154_DEV_ADDR_ATTR_PAD))
return -ENOBUFS; return -ENOBUFS;
break; break;
default: default:
...@@ -742,7 +743,8 @@ ieee802154_llsec_send_key_id(struct sk_buff *msg, ...@@ -742,7 +743,8 @@ ieee802154_llsec_send_key_id(struct sk_buff *msg,
break; break;
case NL802154_KEY_ID_MODE_INDEX_EXTENDED: case NL802154_KEY_ID_MODE_INDEX_EXTENDED:
if (nla_put_le64(msg, NL802154_KEY_ID_ATTR_SOURCE_EXTENDED, if (nla_put_le64(msg, NL802154_KEY_ID_ATTR_SOURCE_EXTENDED,
desc->extended_source)) desc->extended_source,
NL802154_KEY_ID_ATTR_PAD))
return -ENOBUFS; return -ENOBUFS;
break; break;
default: default:
...@@ -819,7 +821,8 @@ nl802154_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flags, ...@@ -819,7 +821,8 @@ nl802154_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flags,
/* address settings */ /* address settings */
if (nla_put_le64(msg, NL802154_ATTR_EXTENDED_ADDR, if (nla_put_le64(msg, NL802154_ATTR_EXTENDED_ADDR,
wpan_dev->extended_addr) || wpan_dev->extended_addr,
NL802154_ATTR_PAD) ||
nla_put_le16(msg, NL802154_ATTR_SHORT_ADDR, nla_put_le16(msg, NL802154_ATTR_SHORT_ADDR,
wpan_dev->short_addr) || wpan_dev->short_addr) ||
nla_put_le16(msg, NL802154_ATTR_PAN_ID, wpan_dev->pan_id)) nla_put_le16(msg, NL802154_ATTR_PAN_ID, wpan_dev->pan_id))
...@@ -1614,7 +1617,7 @@ static int nl802154_send_device(struct sk_buff *msg, u32 cmd, u32 portid, ...@@ -1614,7 +1617,7 @@ static int nl802154_send_device(struct sk_buff *msg, u32 cmd, u32 portid,
nla_put_le16(msg, NL802154_DEV_ATTR_SHORT_ADDR, nla_put_le16(msg, NL802154_DEV_ATTR_SHORT_ADDR,
dev_desc->short_addr) || dev_desc->short_addr) ||
nla_put_le64(msg, NL802154_DEV_ATTR_EXTENDED_ADDR, nla_put_le64(msg, NL802154_DEV_ATTR_EXTENDED_ADDR,
dev_desc->hwaddr) || dev_desc->hwaddr, NL802154_DEV_ATTR_PAD) ||
nla_put_u8(msg, NL802154_DEV_ATTR_SECLEVEL_EXEMPT, nla_put_u8(msg, NL802154_DEV_ATTR_SECLEVEL_EXEMPT,
dev_desc->seclevel_exempt) || dev_desc->seclevel_exempt) ||
nla_put_u32(msg, NL802154_DEV_ATTR_KEY_MODE, dev_desc->key_mode)) nla_put_u32(msg, NL802154_DEV_ATTR_KEY_MODE, dev_desc->key_mode))
...@@ -1778,7 +1781,7 @@ static int nl802154_send_devkey(struct sk_buff *msg, u32 cmd, u32 portid, ...@@ -1778,7 +1781,7 @@ static int nl802154_send_devkey(struct sk_buff *msg, u32 cmd, u32 portid,
goto nla_put_failure; goto nla_put_failure;
if (nla_put_le64(msg, NL802154_DEVKEY_ATTR_EXTENDED_ADDR, if (nla_put_le64(msg, NL802154_DEVKEY_ATTR_EXTENDED_ADDR,
extended_addr) || extended_addr, NL802154_DEVKEY_ATTR_PAD) ||
nla_put_u32(msg, NL802154_DEVKEY_ATTR_FRAME_COUNTER, nla_put_u32(msg, NL802154_DEVKEY_ATTR_FRAME_COUNTER,
devkey->frame_counter)) devkey->frame_counter))
goto nla_put_failure; goto nla_put_failure;
......
...@@ -271,7 +271,8 @@ static int ip_tun_fill_encap_info(struct sk_buff *skb, ...@@ -271,7 +271,8 @@ static int ip_tun_fill_encap_info(struct sk_buff *skb,
{ {
struct ip_tunnel_info *tun_info = lwt_tun_info(lwtstate); struct ip_tunnel_info *tun_info = lwt_tun_info(lwtstate);
if (nla_put_be64(skb, LWTUNNEL_IP_ID, tun_info->key.tun_id) || if (nla_put_be64(skb, LWTUNNEL_IP_ID, tun_info->key.tun_id,
LWTUNNEL_IP_PAD) ||
nla_put_in_addr(skb, LWTUNNEL_IP_DST, tun_info->key.u.ipv4.dst) || nla_put_in_addr(skb, LWTUNNEL_IP_DST, tun_info->key.u.ipv4.dst) ||
nla_put_in_addr(skb, LWTUNNEL_IP_SRC, tun_info->key.u.ipv4.src) || nla_put_in_addr(skb, LWTUNNEL_IP_SRC, tun_info->key.u.ipv4.src) ||
nla_put_u8(skb, LWTUNNEL_IP_TOS, tun_info->key.tos) || nla_put_u8(skb, LWTUNNEL_IP_TOS, tun_info->key.tos) ||
...@@ -284,7 +285,7 @@ static int ip_tun_fill_encap_info(struct sk_buff *skb, ...@@ -284,7 +285,7 @@ static int ip_tun_fill_encap_info(struct sk_buff *skb,
static int ip_tun_encap_nlsize(struct lwtunnel_state *lwtstate) static int ip_tun_encap_nlsize(struct lwtunnel_state *lwtstate)
{ {
return nla_total_size(8) /* LWTUNNEL_IP_ID */ return nla_total_size_64bit(8) /* LWTUNNEL_IP_ID */
+ nla_total_size(4) /* LWTUNNEL_IP_DST */ + nla_total_size(4) /* LWTUNNEL_IP_DST */
+ nla_total_size(4) /* LWTUNNEL_IP_SRC */ + nla_total_size(4) /* LWTUNNEL_IP_SRC */
+ nla_total_size(1) /* LWTUNNEL_IP_TOS */ + nla_total_size(1) /* LWTUNNEL_IP_TOS */
...@@ -366,7 +367,8 @@ static int ip6_tun_fill_encap_info(struct sk_buff *skb, ...@@ -366,7 +367,8 @@ static int ip6_tun_fill_encap_info(struct sk_buff *skb,
{ {
struct ip_tunnel_info *tun_info = lwt_tun_info(lwtstate); struct ip_tunnel_info *tun_info = lwt_tun_info(lwtstate);
if (nla_put_be64(skb, LWTUNNEL_IP6_ID, tun_info->key.tun_id) || if (nla_put_be64(skb, LWTUNNEL_IP6_ID, tun_info->key.tun_id,
LWTUNNEL_IP6_PAD) ||
nla_put_in6_addr(skb, LWTUNNEL_IP6_DST, &tun_info->key.u.ipv6.dst) || nla_put_in6_addr(skb, LWTUNNEL_IP6_DST, &tun_info->key.u.ipv6.dst) ||
nla_put_in6_addr(skb, LWTUNNEL_IP6_SRC, &tun_info->key.u.ipv6.src) || nla_put_in6_addr(skb, LWTUNNEL_IP6_SRC, &tun_info->key.u.ipv6.src) ||
nla_put_u8(skb, LWTUNNEL_IP6_TC, tun_info->key.tos) || nla_put_u8(skb, LWTUNNEL_IP6_TC, tun_info->key.tos) ||
...@@ -379,7 +381,7 @@ static int ip6_tun_fill_encap_info(struct sk_buff *skb, ...@@ -379,7 +381,7 @@ static int ip6_tun_fill_encap_info(struct sk_buff *skb,
static int ip6_tun_encap_nlsize(struct lwtunnel_state *lwtstate) static int ip6_tun_encap_nlsize(struct lwtunnel_state *lwtstate)
{ {
return nla_total_size(8) /* LWTUNNEL_IP6_ID */ return nla_total_size_64bit(8) /* LWTUNNEL_IP6_ID */
+ nla_total_size(16) /* LWTUNNEL_IP6_DST */ + nla_total_size(16) /* LWTUNNEL_IP6_DST */
+ nla_total_size(16) /* LWTUNNEL_IP6_SRC */ + nla_total_size(16) /* LWTUNNEL_IP6_SRC */
+ nla_total_size(1) /* LWTUNNEL_IP6_HOPLIMIT */ + nla_total_size(1) /* LWTUNNEL_IP6_HOPLIMIT */
......
...@@ -800,7 +800,8 @@ static int tcp_metrics_fill_info(struct sk_buff *msg, ...@@ -800,7 +800,8 @@ static int tcp_metrics_fill_info(struct sk_buff *msg,
} }
if (nla_put_msecs(msg, TCP_METRICS_ATTR_AGE, if (nla_put_msecs(msg, TCP_METRICS_ATTR_AGE,
jiffies - tm->tcpm_stamp) < 0) jiffies - tm->tcpm_stamp,
TCP_METRICS_ATTR_PAD) < 0)
goto nla_put_failure; goto nla_put_failure;
if (tm->tcpm_ts_stamp) { if (tm->tcpm_ts_stamp) {
if (nla_put_s32(msg, TCP_METRICS_ATTR_TW_TS_STAMP, if (nla_put_s32(msg, TCP_METRICS_ATTR_TW_TS_STAMP,
...@@ -864,7 +865,8 @@ static int tcp_metrics_fill_info(struct sk_buff *msg, ...@@ -864,7 +865,8 @@ static int tcp_metrics_fill_info(struct sk_buff *msg,
(nla_put_u16(msg, TCP_METRICS_ATTR_FOPEN_SYN_DROPS, (nla_put_u16(msg, TCP_METRICS_ATTR_FOPEN_SYN_DROPS,
tfom->syn_loss) < 0 || tfom->syn_loss) < 0 ||
nla_put_msecs(msg, TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS, nla_put_msecs(msg, TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS,
jiffies - tfom->last_syn_loss) < 0)) jiffies - tfom->last_syn_loss,
TCP_METRICS_ATTR_PAD) < 0))
goto nla_put_failure; goto nla_put_failure;
if (tfom->cookie.len > 0 && if (tfom->cookie.len > 0 &&
nla_put(msg, TCP_METRICS_ATTR_FOPEN_COOKIE, nla_put(msg, TCP_METRICS_ATTR_FOPEN_COOKIE,
......
...@@ -746,7 +746,8 @@ static int l2tp_nl_session_send(struct sk_buff *skb, u32 portid, u32 seq, int fl ...@@ -746,7 +746,8 @@ static int l2tp_nl_session_send(struct sk_buff *skb, u32 portid, u32 seq, int fl
nla_put_u8(skb, L2TP_ATTR_USING_IPSEC, 1)) || nla_put_u8(skb, L2TP_ATTR_USING_IPSEC, 1)) ||
#endif #endif
(session->reorder_timeout && (session->reorder_timeout &&
nla_put_msecs(skb, L2TP_ATTR_RECV_TIMEOUT, session->reorder_timeout))) nla_put_msecs(skb, L2TP_ATTR_RECV_TIMEOUT,
session->reorder_timeout, L2TP_ATTR_PAD)))
goto nla_put_failure; goto nla_put_failure;
nest = nla_nest_start(skb, L2TP_ATTR_STATS); nest = nla_nest_start(skb, L2TP_ATTR_STATS);
......
...@@ -245,8 +245,10 @@ dump_counters(struct sk_buff *skb, struct nf_conn_acct *acct, ...@@ -245,8 +245,10 @@ dump_counters(struct sk_buff *skb, struct nf_conn_acct *acct,
if (!nest_count) if (!nest_count)
goto nla_put_failure; goto nla_put_failure;
if (nla_put_be64(skb, CTA_COUNTERS_PACKETS, cpu_to_be64(pkts)) || if (nla_put_be64(skb, CTA_COUNTERS_PACKETS, cpu_to_be64(pkts),
nla_put_be64(skb, CTA_COUNTERS_BYTES, cpu_to_be64(bytes))) CTA_COUNTERS_PAD) ||
nla_put_be64(skb, CTA_COUNTERS_BYTES, cpu_to_be64(bytes),
CTA_COUNTERS_PAD))
goto nla_put_failure; goto nla_put_failure;
nla_nest_end(skb, nest_count); nla_nest_end(skb, nest_count);
...@@ -287,9 +289,11 @@ ctnetlink_dump_timestamp(struct sk_buff *skb, const struct nf_conn *ct) ...@@ -287,9 +289,11 @@ ctnetlink_dump_timestamp(struct sk_buff *skb, const struct nf_conn *ct)
if (!nest_count) if (!nest_count)
goto nla_put_failure; goto nla_put_failure;
if (nla_put_be64(skb, CTA_TIMESTAMP_START, cpu_to_be64(tstamp->start)) || if (nla_put_be64(skb, CTA_TIMESTAMP_START, cpu_to_be64(tstamp->start),
CTA_TIMESTAMP_PAD) ||
(tstamp->stop != 0 && nla_put_be64(skb, CTA_TIMESTAMP_STOP, (tstamp->stop != 0 && nla_put_be64(skb, CTA_TIMESTAMP_STOP,
cpu_to_be64(tstamp->stop)))) cpu_to_be64(tstamp->stop),
CTA_TIMESTAMP_PAD)))
goto nla_put_failure; goto nla_put_failure;
nla_nest_end(skb, nest_count); nla_nest_end(skb, nest_count);
...@@ -562,8 +566,8 @@ ctnetlink_acct_size(const struct nf_conn *ct) ...@@ -562,8 +566,8 @@ ctnetlink_acct_size(const struct nf_conn *ct)
if (!nf_ct_ext_exist(ct, NF_CT_EXT_ACCT)) if (!nf_ct_ext_exist(ct, NF_CT_EXT_ACCT))
return 0; return 0;
return 2 * nla_total_size(0) /* CTA_COUNTERS_ORIG|REPL */ return 2 * nla_total_size(0) /* CTA_COUNTERS_ORIG|REPL */
+ 2 * nla_total_size(sizeof(uint64_t)) /* CTA_COUNTERS_PACKETS */ + 2 * nla_total_size_64bit(sizeof(uint64_t)) /* CTA_COUNTERS_PACKETS */
+ 2 * nla_total_size(sizeof(uint64_t)) /* CTA_COUNTERS_BYTES */ + 2 * nla_total_size_64bit(sizeof(uint64_t)) /* CTA_COUNTERS_BYTES */
; ;
} }
...@@ -590,7 +594,7 @@ ctnetlink_timestamp_size(const struct nf_conn *ct) ...@@ -590,7 +594,7 @@ ctnetlink_timestamp_size(const struct nf_conn *ct)
#ifdef CONFIG_NF_CONNTRACK_TIMESTAMP #ifdef CONFIG_NF_CONNTRACK_TIMESTAMP
if (!nf_ct_ext_exist(ct, NF_CT_EXT_TSTAMP)) if (!nf_ct_ext_exist(ct, NF_CT_EXT_TSTAMP))
return 0; return 0;
return nla_total_size(0) + 2 * nla_total_size(sizeof(uint64_t)); return nla_total_size(0) + 2 * nla_total_size_64bit(sizeof(uint64_t));
#else #else
return 0; return 0;
#endif #endif
......
...@@ -645,7 +645,8 @@ static int dccp_to_nlattr(struct sk_buff *skb, struct nlattr *nla, ...@@ -645,7 +645,8 @@ static int dccp_to_nlattr(struct sk_buff *skb, struct nlattr *nla,
nla_put_u8(skb, CTA_PROTOINFO_DCCP_ROLE, nla_put_u8(skb, CTA_PROTOINFO_DCCP_ROLE,
ct->proto.dccp.role[IP_CT_DIR_ORIGINAL]) || ct->proto.dccp.role[IP_CT_DIR_ORIGINAL]) ||
nla_put_be64(skb, CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ, nla_put_be64(skb, CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ,
cpu_to_be64(ct->proto.dccp.handshake_seq))) cpu_to_be64(ct->proto.dccp.handshake_seq),
CTA_PROTOINFO_DCCP_PAD))
goto nla_put_failure; goto nla_put_failure;
nla_nest_end(skb, nest_parms); nla_nest_end(skb, nest_parms);
spin_unlock_bh(&ct->lock); spin_unlock_bh(&ct->lock);
...@@ -660,6 +661,7 @@ static const struct nla_policy dccp_nla_policy[CTA_PROTOINFO_DCCP_MAX + 1] = { ...@@ -660,6 +661,7 @@ static const struct nla_policy dccp_nla_policy[CTA_PROTOINFO_DCCP_MAX + 1] = {
[CTA_PROTOINFO_DCCP_STATE] = { .type = NLA_U8 }, [CTA_PROTOINFO_DCCP_STATE] = { .type = NLA_U8 },
[CTA_PROTOINFO_DCCP_ROLE] = { .type = NLA_U8 }, [CTA_PROTOINFO_DCCP_ROLE] = { .type = NLA_U8 },
[CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ] = { .type = NLA_U64 }, [CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ] = { .type = NLA_U64 },
[CTA_PROTOINFO_DCCP_PAD] = { .type = NLA_UNSPEC },
}; };
static int nlattr_to_dccp(struct nlattr *cda[], struct nf_conn *ct) static int nlattr_to_dccp(struct nlattr *cda[], struct nf_conn *ct)
......
...@@ -944,8 +944,10 @@ static int nft_dump_stats(struct sk_buff *skb, struct nft_stats __percpu *stats) ...@@ -944,8 +944,10 @@ static int nft_dump_stats(struct sk_buff *skb, struct nft_stats __percpu *stats)
if (nest == NULL) if (nest == NULL)
goto nla_put_failure; goto nla_put_failure;
if (nla_put_be64(skb, NFTA_COUNTER_PACKETS, cpu_to_be64(total.pkts)) || if (nla_put_be64(skb, NFTA_COUNTER_PACKETS, cpu_to_be64(total.pkts),
nla_put_be64(skb, NFTA_COUNTER_BYTES, cpu_to_be64(total.bytes))) NFTA_COUNTER_PAD) ||
nla_put_be64(skb, NFTA_COUNTER_BYTES, cpu_to_be64(total.bytes),
NFTA_COUNTER_PAD))
goto nla_put_failure; goto nla_put_failure;
nla_nest_end(skb, nest); nla_nest_end(skb, nest);
...@@ -975,7 +977,8 @@ static int nf_tables_fill_chain_info(struct sk_buff *skb, struct net *net, ...@@ -975,7 +977,8 @@ static int nf_tables_fill_chain_info(struct sk_buff *skb, struct net *net,
if (nla_put_string(skb, NFTA_CHAIN_TABLE, table->name)) if (nla_put_string(skb, NFTA_CHAIN_TABLE, table->name))
goto nla_put_failure; goto nla_put_failure;
if (nla_put_be64(skb, NFTA_CHAIN_HANDLE, cpu_to_be64(chain->handle))) if (nla_put_be64(skb, NFTA_CHAIN_HANDLE, cpu_to_be64(chain->handle),
NFTA_CHAIN_PAD))
goto nla_put_failure; goto nla_put_failure;
if (nla_put_string(skb, NFTA_CHAIN_NAME, chain->name)) if (nla_put_string(skb, NFTA_CHAIN_NAME, chain->name))
goto nla_put_failure; goto nla_put_failure;
...@@ -1803,13 +1806,15 @@ static int nf_tables_fill_rule_info(struct sk_buff *skb, struct net *net, ...@@ -1803,13 +1806,15 @@ static int nf_tables_fill_rule_info(struct sk_buff *skb, struct net *net,
goto nla_put_failure; goto nla_put_failure;
if (nla_put_string(skb, NFTA_RULE_CHAIN, chain->name)) if (nla_put_string(skb, NFTA_RULE_CHAIN, chain->name))
goto nla_put_failure; goto nla_put_failure;
if (nla_put_be64(skb, NFTA_RULE_HANDLE, cpu_to_be64(rule->handle))) if (nla_put_be64(skb, NFTA_RULE_HANDLE, cpu_to_be64(rule->handle),
NFTA_RULE_PAD))
goto nla_put_failure; goto nla_put_failure;
if ((event != NFT_MSG_DELRULE) && (rule->list.prev != &chain->rules)) { if ((event != NFT_MSG_DELRULE) && (rule->list.prev != &chain->rules)) {
prule = list_entry(rule->list.prev, struct nft_rule, list); prule = list_entry(rule->list.prev, struct nft_rule, list);
if (nla_put_be64(skb, NFTA_RULE_POSITION, if (nla_put_be64(skb, NFTA_RULE_POSITION,
cpu_to_be64(prule->handle))) cpu_to_be64(prule->handle),
NFTA_RULE_PAD))
goto nla_put_failure; goto nla_put_failure;
} }
...@@ -2473,7 +2478,8 @@ static int nf_tables_fill_set(struct sk_buff *skb, const struct nft_ctx *ctx, ...@@ -2473,7 +2478,8 @@ static int nf_tables_fill_set(struct sk_buff *skb, const struct nft_ctx *ctx,
} }
if (set->timeout && if (set->timeout &&
nla_put_be64(skb, NFTA_SET_TIMEOUT, cpu_to_be64(set->timeout))) nla_put_be64(skb, NFTA_SET_TIMEOUT, cpu_to_be64(set->timeout),
NFTA_SET_PAD))
goto nla_put_failure; goto nla_put_failure;
if (set->gc_int && if (set->gc_int &&
nla_put_be32(skb, NFTA_SET_GC_INTERVAL, htonl(set->gc_int))) nla_put_be32(skb, NFTA_SET_GC_INTERVAL, htonl(set->gc_int)))
...@@ -3076,7 +3082,8 @@ static int nf_tables_fill_setelem(struct sk_buff *skb, ...@@ -3076,7 +3082,8 @@ static int nf_tables_fill_setelem(struct sk_buff *skb,
if (nft_set_ext_exists(ext, NFT_SET_EXT_TIMEOUT) && if (nft_set_ext_exists(ext, NFT_SET_EXT_TIMEOUT) &&
nla_put_be64(skb, NFTA_SET_ELEM_TIMEOUT, nla_put_be64(skb, NFTA_SET_ELEM_TIMEOUT,
cpu_to_be64(*nft_set_ext_timeout(ext)))) cpu_to_be64(*nft_set_ext_timeout(ext)),
NFTA_SET_ELEM_PAD))
goto nla_put_failure; goto nla_put_failure;
if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPIRATION)) { if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPIRATION)) {
...@@ -3089,7 +3096,8 @@ static int nf_tables_fill_setelem(struct sk_buff *skb, ...@@ -3089,7 +3096,8 @@ static int nf_tables_fill_setelem(struct sk_buff *skb,
expires = 0; expires = 0;
if (nla_put_be64(skb, NFTA_SET_ELEM_EXPIRATION, if (nla_put_be64(skb, NFTA_SET_ELEM_EXPIRATION,
cpu_to_be64(jiffies_to_msecs(expires)))) cpu_to_be64(jiffies_to_msecs(expires)),
NFTA_SET_ELEM_PAD))
goto nla_put_failure; goto nla_put_failure;
} }
......
...@@ -156,7 +156,8 @@ static int nf_trace_fill_rule_info(struct sk_buff *nlskb, ...@@ -156,7 +156,8 @@ static int nf_trace_fill_rule_info(struct sk_buff *nlskb,
return 0; return 0;
return nla_put_be64(nlskb, NFTA_TRACE_RULE_HANDLE, return nla_put_be64(nlskb, NFTA_TRACE_RULE_HANDLE,
cpu_to_be64(info->rule->handle)); cpu_to_be64(info->rule->handle),
NFTA_TRACE_PAD);
} }
void nft_trace_notify(struct nft_traceinfo *info) void nft_trace_notify(struct nft_traceinfo *info)
...@@ -174,7 +175,7 @@ void nft_trace_notify(struct nft_traceinfo *info) ...@@ -174,7 +175,7 @@ void nft_trace_notify(struct nft_traceinfo *info)
size = nlmsg_total_size(sizeof(struct nfgenmsg)) + size = nlmsg_total_size(sizeof(struct nfgenmsg)) +
nla_total_size(NFT_TABLE_MAXNAMELEN) + nla_total_size(NFT_TABLE_MAXNAMELEN) +
nla_total_size(NFT_CHAIN_MAXNAMELEN) + nla_total_size(NFT_CHAIN_MAXNAMELEN) +
nla_total_size(sizeof(__be64)) + /* rule handle */ nla_total_size_64bit(sizeof(__be64)) + /* rule handle */
nla_total_size(sizeof(__be32)) + /* trace type */ nla_total_size(sizeof(__be32)) + /* trace type */
nla_total_size(0) + /* VERDICT, nested */ nla_total_size(0) + /* VERDICT, nested */
nla_total_size(sizeof(u32)) + /* verdict code */ nla_total_size(sizeof(u32)) + /* verdict code */
......
...@@ -160,15 +160,18 @@ nfnl_acct_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type, ...@@ -160,15 +160,18 @@ nfnl_acct_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type,
pkts = atomic64_read(&acct->pkts); pkts = atomic64_read(&acct->pkts);
bytes = atomic64_read(&acct->bytes); bytes = atomic64_read(&acct->bytes);
} }
if (nla_put_be64(skb, NFACCT_PKTS, cpu_to_be64(pkts)) || if (nla_put_be64(skb, NFACCT_PKTS, cpu_to_be64(pkts),
nla_put_be64(skb, NFACCT_BYTES, cpu_to_be64(bytes)) || NFACCT_PAD) ||
nla_put_be64(skb, NFACCT_BYTES, cpu_to_be64(bytes),
NFACCT_PAD) ||
nla_put_be32(skb, NFACCT_USE, htonl(atomic_read(&acct->refcnt)))) nla_put_be32(skb, NFACCT_USE, htonl(atomic_read(&acct->refcnt))))
goto nla_put_failure; goto nla_put_failure;
if (acct->flags & NFACCT_F_QUOTA) { if (acct->flags & NFACCT_F_QUOTA) {
u64 *quota = (u64 *)acct->data; u64 *quota = (u64 *)acct->data;
if (nla_put_be32(skb, NFACCT_FLAGS, htonl(old_flags)) || if (nla_put_be32(skb, NFACCT_FLAGS, htonl(old_flags)) ||
nla_put_be64(skb, NFACCT_QUOTA, cpu_to_be64(*quota))) nla_put_be64(skb, NFACCT_QUOTA, cpu_to_be64(*quota),
NFACCT_PAD))
goto nla_put_failure; goto nla_put_failure;
} }
nlmsg_end(skb, nlh); nlmsg_end(skb, nlh);
......
...@@ -76,8 +76,10 @@ static int nft_counter_dump(struct sk_buff *skb, const struct nft_expr *expr) ...@@ -76,8 +76,10 @@ static int nft_counter_dump(struct sk_buff *skb, const struct nft_expr *expr)
nft_counter_fetch(priv->counter, &total); nft_counter_fetch(priv->counter, &total);
if (nla_put_be64(skb, NFTA_COUNTER_BYTES, cpu_to_be64(total.bytes)) || if (nla_put_be64(skb, NFTA_COUNTER_BYTES, cpu_to_be64(total.bytes),
nla_put_be64(skb, NFTA_COUNTER_PACKETS, cpu_to_be64(total.packets))) NFTA_COUNTER_PAD) ||
nla_put_be64(skb, NFTA_COUNTER_PACKETS, cpu_to_be64(total.packets),
NFTA_COUNTER_PAD))
goto nla_put_failure; goto nla_put_failure;
return 0; return 0;
......
...@@ -227,7 +227,8 @@ static int nft_dynset_dump(struct sk_buff *skb, const struct nft_expr *expr) ...@@ -227,7 +227,8 @@ static int nft_dynset_dump(struct sk_buff *skb, const struct nft_expr *expr)
goto nla_put_failure; goto nla_put_failure;
if (nla_put_string(skb, NFTA_DYNSET_SET_NAME, priv->set->name)) if (nla_put_string(skb, NFTA_DYNSET_SET_NAME, priv->set->name))
goto nla_put_failure; goto nla_put_failure;
if (nla_put_be64(skb, NFTA_DYNSET_TIMEOUT, cpu_to_be64(priv->timeout))) if (nla_put_be64(skb, NFTA_DYNSET_TIMEOUT, cpu_to_be64(priv->timeout),
NFTA_DYNSET_PAD))
goto nla_put_failure; goto nla_put_failure;
if (priv->expr && nft_expr_dump(skb, NFTA_DYNSET_EXPR, priv->expr)) if (priv->expr && nft_expr_dump(skb, NFTA_DYNSET_EXPR, priv->expr))
goto nla_put_failure; goto nla_put_failure;
......
...@@ -97,8 +97,10 @@ static int nft_limit_dump(struct sk_buff *skb, const struct nft_limit *limit, ...@@ -97,8 +97,10 @@ static int nft_limit_dump(struct sk_buff *skb, const struct nft_limit *limit,
u64 secs = div_u64(limit->nsecs, NSEC_PER_SEC); u64 secs = div_u64(limit->nsecs, NSEC_PER_SEC);
u64 rate = limit->rate - limit->burst; u64 rate = limit->rate - limit->burst;
if (nla_put_be64(skb, NFTA_LIMIT_RATE, cpu_to_be64(rate)) || if (nla_put_be64(skb, NFTA_LIMIT_RATE, cpu_to_be64(rate),
nla_put_be64(skb, NFTA_LIMIT_UNIT, cpu_to_be64(secs)) || NFTA_LIMIT_PAD) ||
nla_put_be64(skb, NFTA_LIMIT_UNIT, cpu_to_be64(secs),
NFTA_LIMIT_PAD) ||
nla_put_be32(skb, NFTA_LIMIT_BURST, htonl(limit->burst)) || nla_put_be32(skb, NFTA_LIMIT_BURST, htonl(limit->burst)) ||
nla_put_be32(skb, NFTA_LIMIT_TYPE, htonl(type)) || nla_put_be32(skb, NFTA_LIMIT_TYPE, htonl(type)) ||
nla_put_be32(skb, NFTA_LIMIT_FLAGS, htonl(flags))) nla_put_be32(skb, NFTA_LIMIT_FLAGS, htonl(flags)))
......
...@@ -261,7 +261,7 @@ size_t ovs_tun_key_attr_size(void) ...@@ -261,7 +261,7 @@ size_t ovs_tun_key_attr_size(void)
/* Whenever adding new OVS_TUNNEL_KEY_ FIELDS, we should consider /* Whenever adding new OVS_TUNNEL_KEY_ FIELDS, we should consider
* updating this function. * updating this function.
*/ */
return nla_total_size(8) /* OVS_TUNNEL_KEY_ATTR_ID */ return nla_total_size_64bit(8) /* OVS_TUNNEL_KEY_ATTR_ID */
+ nla_total_size(16) /* OVS_TUNNEL_KEY_ATTR_IPV[46]_SRC */ + nla_total_size(16) /* OVS_TUNNEL_KEY_ATTR_IPV[46]_SRC */
+ nla_total_size(16) /* OVS_TUNNEL_KEY_ATTR_IPV[46]_DST */ + nla_total_size(16) /* OVS_TUNNEL_KEY_ATTR_IPV[46]_DST */
+ nla_total_size(1) /* OVS_TUNNEL_KEY_ATTR_TOS */ + nla_total_size(1) /* OVS_TUNNEL_KEY_ATTR_TOS */
...@@ -720,7 +720,8 @@ static int __ip_tun_to_nlattr(struct sk_buff *skb, ...@@ -720,7 +720,8 @@ static int __ip_tun_to_nlattr(struct sk_buff *skb,
unsigned short tun_proto) unsigned short tun_proto)
{ {
if (output->tun_flags & TUNNEL_KEY && if (output->tun_flags & TUNNEL_KEY &&
nla_put_be64(skb, OVS_TUNNEL_KEY_ATTR_ID, output->tun_id)) nla_put_be64(skb, OVS_TUNNEL_KEY_ATTR_ID, output->tun_id,
OVS_TUNNEL_KEY_ATTR_PAD))
return -EMSGSIZE; return -EMSGSIZE;
switch (tun_proto) { switch (tun_proto) {
case AF_INET: case AF_INET:
......
...@@ -809,7 +809,8 @@ static int copy_to_user_state_extra(struct xfrm_state *x, ...@@ -809,7 +809,8 @@ static int copy_to_user_state_extra(struct xfrm_state *x,
goto out; goto out;
} }
if (x->lastused) { if (x->lastused) {
ret = nla_put_u64(skb, XFRMA_LASTUSED, x->lastused); ret = nla_put_u64_64bit(skb, XFRMA_LASTUSED, x->lastused,
XFRMA_PAD);
if (ret) if (ret)
goto out; goto out;
} }
...@@ -1813,7 +1814,7 @@ static inline size_t xfrm_aevent_msgsize(struct xfrm_state *x) ...@@ -1813,7 +1814,7 @@ static inline size_t xfrm_aevent_msgsize(struct xfrm_state *x)
return NLMSG_ALIGN(sizeof(struct xfrm_aevent_id)) return NLMSG_ALIGN(sizeof(struct xfrm_aevent_id))
+ nla_total_size(replay_size) + nla_total_size(replay_size)
+ nla_total_size(sizeof(struct xfrm_lifetime_cur)) + nla_total_size_64bit(sizeof(struct xfrm_lifetime_cur))
+ nla_total_size(sizeof(struct xfrm_mark)) + nla_total_size(sizeof(struct xfrm_mark))
+ nla_total_size(4) /* XFRM_AE_RTHR */ + nla_total_size(4) /* XFRM_AE_RTHR */
+ nla_total_size(4); /* XFRM_AE_ETHR */ + nla_total_size(4); /* XFRM_AE_ETHR */
...@@ -1848,7 +1849,8 @@ static int build_aevent(struct sk_buff *skb, struct xfrm_state *x, const struct ...@@ -1848,7 +1849,8 @@ static int build_aevent(struct sk_buff *skb, struct xfrm_state *x, const struct
} }
if (err) if (err)
goto out_cancel; goto out_cancel;
err = nla_put(skb, XFRMA_LTIME_VAL, sizeof(x->curlft), &x->curlft); err = nla_put_64bit(skb, XFRMA_LTIME_VAL, sizeof(x->curlft), &x->curlft,
XFRMA_PAD);
if (err) if (err)
goto out_cancel; goto out_cancel;
...@@ -2617,7 +2619,7 @@ static inline size_t xfrm_sa_len(struct xfrm_state *x) ...@@ -2617,7 +2619,7 @@ static inline size_t xfrm_sa_len(struct xfrm_state *x)
l += nla_total_size(sizeof(x->props.extra_flags)); l += nla_total_size(sizeof(x->props.extra_flags));
/* Must count x->lastused as it may become non-zero behind our back. */ /* Must count x->lastused as it may become non-zero behind our back. */
l += nla_total_size(sizeof(u64)); l += nla_total_size_64bit(sizeof(u64));
return l; return l;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment