Commit 2175d87c authored by Nicolas Dichtel's avatar Nicolas Dichtel Committed by David S. Miller

libnl: nla_put_msecs(): align on a 64-bit area

nla_data() is now aligned on a 64-bit area.
Signed-off-by: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 756a2f59
...@@ -106,7 +106,8 @@ ...@@ -106,7 +106,8 @@
* padattr) add s64 attribute to skb * 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
* *
...@@ -965,16 +966,18 @@ static inline int nla_put_flag(struct sk_buff *skb, int attrtype) ...@@ -965,16 +966,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);
} }
/** /**
......
...@@ -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,
}; };
......
...@@ -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)
......
...@@ -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,
}; };
......
...@@ -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))
......
...@@ -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);
......
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