Commit 9c9f261d authored by David S. Miller's avatar David S. Miller

Merge branch 'nla_align-set-4'

Nicolas Dichtel says:

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

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

It's the last patchset from what I've seen.

The last user of nla_put_u64() is block/drbd. This module does not use
standard netlink API (see all the stuff in include/linux/genl_magic_struct.h
and include/linux/genl_magic_func.h). I didn't modify it because it's seems
hard to do it whithout testing and fully understanding the context (for
example, why include/linux/drbd_genl.h is not part of uapi?).
Any thoughts?
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents fab7b629 9854518e
...@@ -33,7 +33,8 @@ my_dumping_routine(struct sk_buff *skb, ...) ...@@ -33,7 +33,8 @@ my_dumping_routine(struct sk_buff *skb, ...)
{ {
struct gnet_dump dump; struct gnet_dump dump;
if (gnet_stats_start_copy(skb, TCA_STATS2, &mystruct->lock, &dump) < 0) if (gnet_stats_start_copy(skb, TCA_STATS2, &mystruct->lock, &dump,
TCA_PAD) < 0)
goto rtattr_failure; goto rtattr_failure;
if (gnet_stats_copy_basic(&dump, &mystruct->bstats) < 0 || if (gnet_stats_copy_basic(&dump, &mystruct->bstats) < 0 ||
...@@ -56,7 +57,8 @@ existing TLV types. ...@@ -56,7 +57,8 @@ existing TLV types.
my_dumping_routine(struct sk_buff *skb, ...) my_dumping_routine(struct sk_buff *skb, ...)
{ {
if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS,
TCA_XSTATS, &mystruct->lock, &dump) < 0) TCA_XSTATS, &mystruct->lock, &dump,
TCA_PAD) < 0)
goto rtattr_failure; goto rtattr_failure;
... ...
} }
......
...@@ -1405,9 +1405,10 @@ static sci_t nla_get_sci(const struct nlattr *nla) ...@@ -1405,9 +1405,10 @@ static sci_t nla_get_sci(const struct nlattr *nla)
return (__force sci_t)nla_get_u64(nla); return (__force sci_t)nla_get_u64(nla);
} }
static int nla_put_sci(struct sk_buff *skb, int attrtype, sci_t value) static int nla_put_sci(struct sk_buff *skb, int attrtype, sci_t value,
int padattr)
{ {
return nla_put_u64(skb, attrtype, (__force u64)value); return nla_put_u64_64bit(skb, attrtype, (__force u64)value, padattr);
} }
static struct macsec_tx_sa *get_txsa_from_nl(struct net *net, static struct macsec_tx_sa *get_txsa_from_nl(struct net *net,
...@@ -2131,16 +2132,36 @@ static int copy_rx_sc_stats(struct sk_buff *skb, ...@@ -2131,16 +2132,36 @@ static int copy_rx_sc_stats(struct sk_buff *skb,
sum.InPktsUnusedSA += tmp.InPktsUnusedSA; sum.InPktsUnusedSA += tmp.InPktsUnusedSA;
} }
if (nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_VALIDATED, sum.InOctetsValidated) || if (nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_VALIDATED,
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_DECRYPTED, sum.InOctetsDecrypted) || sum.InOctetsValidated,
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNCHECKED, sum.InPktsUnchecked) || MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_DELAYED, sum.InPktsDelayed) || nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_DECRYPTED,
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_OK, sum.InPktsOK) || sum.InOctetsDecrypted,
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_INVALID, sum.InPktsInvalid) || MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_LATE, sum.InPktsLate) || nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNCHECKED,
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID, sum.InPktsNotValid) || sum.InPktsUnchecked,
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA, sum.InPktsNotUsingSA) || MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA, sum.InPktsUnusedSA)) nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_DELAYED,
sum.InPktsDelayed,
MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_OK,
sum.InPktsOK,
MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_INVALID,
sum.InPktsInvalid,
MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_LATE,
sum.InPktsLate,
MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID,
sum.InPktsNotValid,
MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA,
sum.InPktsNotUsingSA,
MACSEC_RXSC_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA,
sum.InPktsUnusedSA,
MACSEC_RXSC_STATS_ATTR_PAD))
return -EMSGSIZE; return -EMSGSIZE;
return 0; return 0;
...@@ -2169,10 +2190,18 @@ static int copy_tx_sc_stats(struct sk_buff *skb, ...@@ -2169,10 +2190,18 @@ static int copy_tx_sc_stats(struct sk_buff *skb,
sum.OutOctetsEncrypted += tmp.OutOctetsEncrypted; sum.OutOctetsEncrypted += tmp.OutOctetsEncrypted;
} }
if (nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED, sum.OutPktsProtected) || if (nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED,
nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED, sum.OutPktsEncrypted) || sum.OutPktsProtected,
nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED, sum.OutOctetsProtected) || MACSEC_TXSC_STATS_ATTR_PAD) ||
nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED, sum.OutOctetsEncrypted)) nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED,
sum.OutPktsEncrypted,
MACSEC_TXSC_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED,
sum.OutOctetsProtected,
MACSEC_TXSC_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED,
sum.OutOctetsEncrypted,
MACSEC_TXSC_STATS_ATTR_PAD))
return -EMSGSIZE; return -EMSGSIZE;
return 0; return 0;
...@@ -2205,14 +2234,30 @@ static int copy_secy_stats(struct sk_buff *skb, ...@@ -2205,14 +2234,30 @@ static int copy_secy_stats(struct sk_buff *skb,
sum.InPktsOverrun += tmp.InPktsOverrun; sum.InPktsOverrun += tmp.InPktsOverrun;
} }
if (nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_UNTAGGED, sum.OutPktsUntagged) || if (nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_UNTAGGED,
nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNTAGGED, sum.InPktsUntagged) || sum.OutPktsUntagged,
nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_TOO_LONG, sum.OutPktsTooLong) || MACSEC_SECY_STATS_ATTR_PAD) ||
nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_TAG, sum.InPktsNoTag) || nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNTAGGED,
nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_BAD_TAG, sum.InPktsBadTag) || sum.InPktsUntagged,
nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI, sum.InPktsUnknownSCI) || MACSEC_SECY_STATS_ATTR_PAD) ||
nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI, sum.InPktsNoSCI) || nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_TOO_LONG,
nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN, sum.InPktsOverrun)) sum.OutPktsTooLong,
MACSEC_SECY_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_TAG,
sum.InPktsNoTag,
MACSEC_SECY_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_BAD_TAG,
sum.InPktsBadTag,
MACSEC_SECY_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI,
sum.InPktsUnknownSCI,
MACSEC_SECY_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI,
sum.InPktsNoSCI,
MACSEC_SECY_STATS_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN,
sum.InPktsOverrun,
MACSEC_SECY_STATS_ATTR_PAD))
return -EMSGSIZE; return -EMSGSIZE;
return 0; return 0;
...@@ -2226,8 +2271,11 @@ static int nla_put_secy(struct macsec_secy *secy, struct sk_buff *skb) ...@@ -2226,8 +2271,11 @@ static int nla_put_secy(struct macsec_secy *secy, struct sk_buff *skb)
if (!secy_nest) if (!secy_nest)
return 1; return 1;
if (nla_put_sci(skb, MACSEC_SECY_ATTR_SCI, secy->sci) || if (nla_put_sci(skb, MACSEC_SECY_ATTR_SCI, secy->sci,
nla_put_u64(skb, MACSEC_SECY_ATTR_CIPHER_SUITE, DEFAULT_CIPHER_ID) || MACSEC_SECY_ATTR_PAD) ||
nla_put_u64_64bit(skb, MACSEC_SECY_ATTR_CIPHER_SUITE,
DEFAULT_CIPHER_ID,
MACSEC_SECY_ATTR_PAD) ||
nla_put_u8(skb, MACSEC_SECY_ATTR_ICV_LEN, secy->icv_len) || nla_put_u8(skb, MACSEC_SECY_ATTR_ICV_LEN, secy->icv_len) ||
nla_put_u8(skb, MACSEC_SECY_ATTR_OPER, secy->operational) || nla_put_u8(skb, MACSEC_SECY_ATTR_OPER, secy->operational) ||
nla_put_u8(skb, MACSEC_SECY_ATTR_PROTECT, secy->protect_frames) || nla_put_u8(skb, MACSEC_SECY_ATTR_PROTECT, secy->protect_frames) ||
...@@ -2312,7 +2360,9 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, ...@@ -2312,7 +2360,9 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev,
if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) ||
nla_put_u32(skb, MACSEC_SA_ATTR_PN, tx_sa->next_pn) || nla_put_u32(skb, MACSEC_SA_ATTR_PN, tx_sa->next_pn) ||
nla_put_u64(skb, MACSEC_SA_ATTR_KEYID, tx_sa->key.id) || nla_put_u64_64bit(skb, MACSEC_SA_ATTR_KEYID,
tx_sa->key.id,
MACSEC_SA_ATTR_PAD) ||
nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, tx_sa->active)) { nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, tx_sa->active)) {
nla_nest_cancel(skb, txsa_nest); nla_nest_cancel(skb, txsa_nest);
nla_nest_cancel(skb, txsa_list); nla_nest_cancel(skb, txsa_list);
...@@ -2353,7 +2403,8 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, ...@@ -2353,7 +2403,8 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev,
} }
if (nla_put_u8(skb, MACSEC_RXSC_ATTR_ACTIVE, rx_sc->active) || if (nla_put_u8(skb, MACSEC_RXSC_ATTR_ACTIVE, rx_sc->active) ||
nla_put_sci(skb, MACSEC_RXSC_ATTR_SCI, rx_sc->sci)) { nla_put_sci(skb, MACSEC_RXSC_ATTR_SCI, rx_sc->sci,
MACSEC_RXSC_ATTR_PAD)) {
nla_nest_cancel(skb, rxsc_nest); nla_nest_cancel(skb, rxsc_nest);
nla_nest_cancel(skb, rxsc_list); nla_nest_cancel(skb, rxsc_list);
goto nla_put_failure; goto nla_put_failure;
...@@ -2413,7 +2464,9 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, ...@@ -2413,7 +2464,9 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev,
if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) ||
nla_put_u32(skb, MACSEC_SA_ATTR_PN, rx_sa->next_pn) || nla_put_u32(skb, MACSEC_SA_ATTR_PN, rx_sa->next_pn) ||
nla_put_u64(skb, MACSEC_SA_ATTR_KEYID, rx_sa->key.id) || nla_put_u64_64bit(skb, MACSEC_SA_ATTR_KEYID,
rx_sa->key.id,
MACSEC_SA_ATTR_PAD) ||
nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) { nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) {
nla_nest_cancel(skb, rxsa_nest); nla_nest_cancel(skb, rxsa_nest);
nla_nest_cancel(skb, rxsc_nest); nla_nest_cancel(skb, rxsc_nest);
...@@ -3145,9 +3198,9 @@ static struct net *macsec_get_link_net(const struct net_device *dev) ...@@ -3145,9 +3198,9 @@ static struct net *macsec_get_link_net(const struct net_device *dev)
static size_t macsec_get_size(const struct net_device *dev) static size_t macsec_get_size(const struct net_device *dev)
{ {
return 0 + return 0 +
nla_total_size(8) + /* SCI */ nla_total_size_64bit(8) + /* SCI */
nla_total_size(1) + /* ICV_LEN */ nla_total_size(1) + /* ICV_LEN */
nla_total_size(8) + /* CIPHER_SUITE */ nla_total_size_64bit(8) + /* CIPHER_SUITE */
nla_total_size(4) + /* WINDOW */ nla_total_size(4) + /* WINDOW */
nla_total_size(1) + /* ENCODING_SA */ nla_total_size(1) + /* ENCODING_SA */
nla_total_size(1) + /* ENCRYPT */ nla_total_size(1) + /* ENCRYPT */
...@@ -3166,9 +3219,11 @@ static int macsec_fill_info(struct sk_buff *skb, ...@@ -3166,9 +3219,11 @@ static int macsec_fill_info(struct sk_buff *skb,
struct macsec_secy *secy = &macsec_priv(dev)->secy; struct macsec_secy *secy = &macsec_priv(dev)->secy;
struct macsec_tx_sc *tx_sc = &secy->tx_sc; struct macsec_tx_sc *tx_sc = &secy->tx_sc;
if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci) || if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci,
IFLA_MACSEC_PAD) ||
nla_put_u8(skb, IFLA_MACSEC_ICV_LEN, secy->icv_len) || nla_put_u8(skb, IFLA_MACSEC_ICV_LEN, secy->icv_len) ||
nla_put_u64(skb, IFLA_MACSEC_CIPHER_SUITE, DEFAULT_CIPHER_ID) || nla_put_u64_64bit(skb, IFLA_MACSEC_CIPHER_SUITE,
DEFAULT_CIPHER_ID, IFLA_MACSEC_PAD) ||
nla_put_u8(skb, IFLA_MACSEC_ENCODING_SA, tx_sc->encoding_sa) || nla_put_u8(skb, IFLA_MACSEC_ENCODING_SA, tx_sc->encoding_sa) ||
nla_put_u8(skb, IFLA_MACSEC_ENCRYPT, tx_sc->encrypt) || nla_put_u8(skb, IFLA_MACSEC_ENCRYPT, tx_sc->encrypt) ||
nla_put_u8(skb, IFLA_MACSEC_PROTECT, secy->protect_frames) || nla_put_u8(skb, IFLA_MACSEC_PROTECT, secy->protect_frames) ||
......
...@@ -1030,7 +1030,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw, ...@@ -1030,7 +1030,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
data->pending_cookie++; data->pending_cookie++;
cookie = data->pending_cookie; cookie = data->pending_cookie;
info->rate_driver_data[0] = (void *)cookie; info->rate_driver_data[0] = (void *)cookie;
if (nla_put_u64(skb, HWSIM_ATTR_COOKIE, cookie)) if (nla_put_u64_64bit(skb, HWSIM_ATTR_COOKIE, cookie, HWSIM_ATTR_PAD))
goto nla_put_failure; goto nla_put_failure;
genlmsg_end(skb, msg_head); genlmsg_end(skb, msg_head);
......
...@@ -148,6 +148,7 @@ enum { ...@@ -148,6 +148,7 @@ enum {
HWSIM_ATTR_RADIO_NAME, HWSIM_ATTR_RADIO_NAME,
HWSIM_ATTR_NO_VIF, HWSIM_ATTR_NO_VIF,
HWSIM_ATTR_FREQ, HWSIM_ATTR_FREQ,
HWSIM_ATTR_PAD,
__HWSIM_ATTR_MAX, __HWSIM_ATTR_MAX,
}; };
#define HWSIM_ATTR_MAX (__HWSIM_ATTR_MAX - 1) #define HWSIM_ATTR_MAX (__HWSIM_ATTR_MAX - 1)
......
...@@ -47,7 +47,7 @@ void quota_send_warning(struct kqid qid, dev_t dev, ...@@ -47,7 +47,7 @@ void quota_send_warning(struct kqid qid, dev_t dev,
void *msg_head; void *msg_head;
int ret; int ret;
int msg_size = 4 * nla_total_size(sizeof(u32)) + int msg_size = 4 * nla_total_size(sizeof(u32)) +
2 * nla_total_size(sizeof(u64)); 2 * nla_total_size_64bit(sizeof(u64));
/* We have to allocate using GFP_NOFS as we are called from a /* We have to allocate using GFP_NOFS as we are called from a
* filesystem performing write and thus further recursion into * filesystem performing write and thus further recursion into
...@@ -68,8 +68,9 @@ void quota_send_warning(struct kqid qid, dev_t dev, ...@@ -68,8 +68,9 @@ void quota_send_warning(struct kqid qid, dev_t dev,
ret = nla_put_u32(skb, QUOTA_NL_A_QTYPE, qid.type); ret = nla_put_u32(skb, QUOTA_NL_A_QTYPE, qid.type);
if (ret) if (ret)
goto attr_err_out; goto attr_err_out;
ret = nla_put_u64(skb, QUOTA_NL_A_EXCESS_ID, ret = nla_put_u64_64bit(skb, QUOTA_NL_A_EXCESS_ID,
from_kqid_munged(&init_user_ns, qid)); from_kqid_munged(&init_user_ns, qid),
QUOTA_NL_A_PAD);
if (ret) if (ret)
goto attr_err_out; goto attr_err_out;
ret = nla_put_u32(skb, QUOTA_NL_A_WARNING, warntype); ret = nla_put_u32(skb, QUOTA_NL_A_WARNING, warntype);
...@@ -81,8 +82,9 @@ void quota_send_warning(struct kqid qid, dev_t dev, ...@@ -81,8 +82,9 @@ void quota_send_warning(struct kqid qid, dev_t dev,
ret = nla_put_u32(skb, QUOTA_NL_A_DEV_MINOR, MINOR(dev)); ret = nla_put_u32(skb, QUOTA_NL_A_DEV_MINOR, MINOR(dev));
if (ret) if (ret)
goto attr_err_out; goto attr_err_out;
ret = nla_put_u64(skb, QUOTA_NL_A_CAUSED_ID, ret = nla_put_u64_64bit(skb, QUOTA_NL_A_CAUSED_ID,
from_kuid_munged(&init_user_ns, current_uid())); from_kuid_munged(&init_user_ns, current_uid()),
QUOTA_NL_A_PAD);
if (ret) if (ret)
goto attr_err_out; goto attr_err_out;
genlmsg_end(skb, msg_head); genlmsg_end(skb, msg_head);
......
...@@ -19,17 +19,19 @@ struct gnet_dump { ...@@ -19,17 +19,19 @@ struct gnet_dump {
/* Backward compatibility */ /* Backward compatibility */
int compat_tc_stats; int compat_tc_stats;
int compat_xstats; int compat_xstats;
int padattr;
void * xstats; void * xstats;
int xstats_len; int xstats_len;
struct tc_stats tc_stats; struct tc_stats tc_stats;
}; };
int gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock, int gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock,
struct gnet_dump *d); struct gnet_dump *d, int padattr);
int gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int gnet_stats_start_copy_compat(struct sk_buff *skb, int type,
int tc_stats_type, int xstats_type, int tc_stats_type, int xstats_type,
spinlock_t *lock, struct gnet_dump *d); spinlock_t *lock, struct gnet_dump *d,
int padattr);
int gnet_stats_copy_basic(struct gnet_dump *d, int gnet_stats_copy_basic(struct gnet_dump *d,
struct gnet_stats_basic_cpu __percpu *cpu, struct gnet_stats_basic_cpu __percpu *cpu,
......
...@@ -10,6 +10,7 @@ enum { ...@@ -10,6 +10,7 @@ enum {
TCA_STATS_QUEUE, TCA_STATS_QUEUE,
TCA_STATS_APP, TCA_STATS_APP,
TCA_STATS_RATE_EST64, TCA_STATS_RATE_EST64,
TCA_STATS_PAD,
__TCA_STATS_MAX, __TCA_STATS_MAX,
}; };
#define TCA_STATS_MAX (__TCA_STATS_MAX - 1) #define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
......
...@@ -434,6 +434,7 @@ enum { ...@@ -434,6 +434,7 @@ enum {
IFLA_MACSEC_SCB, IFLA_MACSEC_SCB,
IFLA_MACSEC_REPLAY_PROTECT, IFLA_MACSEC_REPLAY_PROTECT,
IFLA_MACSEC_VALIDATION, IFLA_MACSEC_VALIDATION,
IFLA_MACSEC_PAD,
__IFLA_MACSEC_MAX, __IFLA_MACSEC_MAX,
}; };
......
...@@ -55,6 +55,7 @@ enum macsec_secy_attrs { ...@@ -55,6 +55,7 @@ enum macsec_secy_attrs {
MACSEC_SECY_ATTR_INC_SCI, MACSEC_SECY_ATTR_INC_SCI,
MACSEC_SECY_ATTR_ES, MACSEC_SECY_ATTR_ES,
MACSEC_SECY_ATTR_SCB, MACSEC_SECY_ATTR_SCB,
MACSEC_SECY_ATTR_PAD,
__MACSEC_SECY_ATTR_END, __MACSEC_SECY_ATTR_END,
NUM_MACSEC_SECY_ATTR = __MACSEC_SECY_ATTR_END, NUM_MACSEC_SECY_ATTR = __MACSEC_SECY_ATTR_END,
MACSEC_SECY_ATTR_MAX = __MACSEC_SECY_ATTR_END - 1, MACSEC_SECY_ATTR_MAX = __MACSEC_SECY_ATTR_END - 1,
...@@ -66,6 +67,7 @@ enum macsec_rxsc_attrs { ...@@ -66,6 +67,7 @@ enum macsec_rxsc_attrs {
MACSEC_RXSC_ATTR_ACTIVE, /* config/dump, u8 0..1 */ MACSEC_RXSC_ATTR_ACTIVE, /* config/dump, u8 0..1 */
MACSEC_RXSC_ATTR_SA_LIST, /* dump, nested */ MACSEC_RXSC_ATTR_SA_LIST, /* dump, nested */
MACSEC_RXSC_ATTR_STATS, /* dump, nested, macsec_rxsc_stats_attr */ MACSEC_RXSC_ATTR_STATS, /* dump, nested, macsec_rxsc_stats_attr */
MACSEC_RXSC_ATTR_PAD,
__MACSEC_RXSC_ATTR_END, __MACSEC_RXSC_ATTR_END,
NUM_MACSEC_RXSC_ATTR = __MACSEC_RXSC_ATTR_END, NUM_MACSEC_RXSC_ATTR = __MACSEC_RXSC_ATTR_END,
MACSEC_RXSC_ATTR_MAX = __MACSEC_RXSC_ATTR_END - 1, MACSEC_RXSC_ATTR_MAX = __MACSEC_RXSC_ATTR_END - 1,
...@@ -79,6 +81,7 @@ enum macsec_sa_attrs { ...@@ -79,6 +81,7 @@ enum macsec_sa_attrs {
MACSEC_SA_ATTR_KEY, /* config, data */ MACSEC_SA_ATTR_KEY, /* config, data */
MACSEC_SA_ATTR_KEYID, /* config/dump, u64 */ MACSEC_SA_ATTR_KEYID, /* config/dump, u64 */
MACSEC_SA_ATTR_STATS, /* dump, nested, macsec_sa_stats_attr */ MACSEC_SA_ATTR_STATS, /* dump, nested, macsec_sa_stats_attr */
MACSEC_SA_ATTR_PAD,
__MACSEC_SA_ATTR_END, __MACSEC_SA_ATTR_END,
NUM_MACSEC_SA_ATTR = __MACSEC_SA_ATTR_END, NUM_MACSEC_SA_ATTR = __MACSEC_SA_ATTR_END,
MACSEC_SA_ATTR_MAX = __MACSEC_SA_ATTR_END - 1, MACSEC_SA_ATTR_MAX = __MACSEC_SA_ATTR_END - 1,
...@@ -110,6 +113,7 @@ enum macsec_rxsc_stats_attr { ...@@ -110,6 +113,7 @@ enum macsec_rxsc_stats_attr {
MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID,
MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA,
MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA,
MACSEC_RXSC_STATS_ATTR_PAD,
__MACSEC_RXSC_STATS_ATTR_END, __MACSEC_RXSC_STATS_ATTR_END,
NUM_MACSEC_RXSC_STATS_ATTR = __MACSEC_RXSC_STATS_ATTR_END, NUM_MACSEC_RXSC_STATS_ATTR = __MACSEC_RXSC_STATS_ATTR_END,
MACSEC_RXSC_STATS_ATTR_MAX = __MACSEC_RXSC_STATS_ATTR_END - 1, MACSEC_RXSC_STATS_ATTR_MAX = __MACSEC_RXSC_STATS_ATTR_END - 1,
...@@ -137,6 +141,7 @@ enum macsec_txsc_stats_attr { ...@@ -137,6 +141,7 @@ enum macsec_txsc_stats_attr {
MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED,
MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED,
MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED,
MACSEC_TXSC_STATS_ATTR_PAD,
__MACSEC_TXSC_STATS_ATTR_END, __MACSEC_TXSC_STATS_ATTR_END,
NUM_MACSEC_TXSC_STATS_ATTR = __MACSEC_TXSC_STATS_ATTR_END, NUM_MACSEC_TXSC_STATS_ATTR = __MACSEC_TXSC_STATS_ATTR_END,
MACSEC_TXSC_STATS_ATTR_MAX = __MACSEC_TXSC_STATS_ATTR_END - 1, MACSEC_TXSC_STATS_ATTR_MAX = __MACSEC_TXSC_STATS_ATTR_END - 1,
...@@ -153,6 +158,7 @@ enum macsec_secy_stats_attr { ...@@ -153,6 +158,7 @@ enum macsec_secy_stats_attr {
MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI,
MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI,
MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN,
MACSEC_SECY_STATS_ATTR_PAD,
__MACSEC_SECY_STATS_ATTR_END, __MACSEC_SECY_STATS_ATTR_END,
NUM_MACSEC_SECY_STATS_ATTR = __MACSEC_SECY_STATS_ATTR_END, NUM_MACSEC_SECY_STATS_ATTR = __MACSEC_SECY_STATS_ATTR_END,
MACSEC_SECY_STATS_ATTR_MAX = __MACSEC_SECY_STATS_ATTR_END - 1, MACSEC_SECY_STATS_ATTR_MAX = __MACSEC_SECY_STATS_ATTR_END - 1,
......
...@@ -115,9 +115,11 @@ enum { ...@@ -115,9 +115,11 @@ enum {
INET_DIAG_SKV6ONLY, INET_DIAG_SKV6ONLY,
INET_DIAG_LOCALS, INET_DIAG_LOCALS,
INET_DIAG_PEERS, INET_DIAG_PEERS,
INET_DIAG_PAD,
__INET_DIAG_MAX,
}; };
#define INET_DIAG_MAX INET_DIAG_SKV6ONLY #define INET_DIAG_MAX (__INET_DIAG_MAX - 1)
/* INET_DIAG_MEM */ /* INET_DIAG_MEM */
......
...@@ -84,6 +84,7 @@ enum ovs_datapath_attr { ...@@ -84,6 +84,7 @@ enum ovs_datapath_attr {
OVS_DP_ATTR_STATS, /* struct ovs_dp_stats */ OVS_DP_ATTR_STATS, /* struct ovs_dp_stats */
OVS_DP_ATTR_MEGAFLOW_STATS, /* struct ovs_dp_megaflow_stats */ OVS_DP_ATTR_MEGAFLOW_STATS, /* struct ovs_dp_megaflow_stats */
OVS_DP_ATTR_USER_FEATURES, /* OVS_DP_F_* */ OVS_DP_ATTR_USER_FEATURES, /* OVS_DP_F_* */
OVS_DP_ATTR_PAD,
__OVS_DP_ATTR_MAX __OVS_DP_ATTR_MAX
}; };
...@@ -253,6 +254,7 @@ enum ovs_vport_attr { ...@@ -253,6 +254,7 @@ enum ovs_vport_attr {
OVS_VPORT_ATTR_UPCALL_PID, /* array of u32 Netlink socket PIDs for */ OVS_VPORT_ATTR_UPCALL_PID, /* array of u32 Netlink socket PIDs for */
/* receiving upcalls */ /* receiving upcalls */
OVS_VPORT_ATTR_STATS, /* struct ovs_vport_stats */ OVS_VPORT_ATTR_STATS, /* struct ovs_vport_stats */
OVS_VPORT_ATTR_PAD,
__OVS_VPORT_ATTR_MAX __OVS_VPORT_ATTR_MAX
}; };
......
...@@ -66,6 +66,7 @@ enum { ...@@ -66,6 +66,7 @@ enum {
TCA_ACT_OPTIONS, TCA_ACT_OPTIONS,
TCA_ACT_INDEX, TCA_ACT_INDEX,
TCA_ACT_STATS, TCA_ACT_STATS,
TCA_ACT_PAD,
__TCA_ACT_MAX __TCA_ACT_MAX
}; };
...@@ -173,6 +174,7 @@ enum { ...@@ -173,6 +174,7 @@ enum {
TCA_U32_PCNT, TCA_U32_PCNT,
TCA_U32_MARK, TCA_U32_MARK,
TCA_U32_FLAGS, TCA_U32_FLAGS,
TCA_U32_PAD,
__TCA_U32_MAX __TCA_U32_MAX
}; };
......
...@@ -191,6 +191,7 @@ enum { ...@@ -191,6 +191,7 @@ enum {
QUOTA_NL_A_DEV_MAJOR, QUOTA_NL_A_DEV_MAJOR,
QUOTA_NL_A_DEV_MINOR, QUOTA_NL_A_DEV_MINOR,
QUOTA_NL_A_CAUSED_ID, QUOTA_NL_A_CAUSED_ID,
QUOTA_NL_A_PAD,
__QUOTA_NL_A_MAX, __QUOTA_NL_A_MAX,
}; };
#define QUOTA_NL_A_MAX (__QUOTA_NL_A_MAX - 1) #define QUOTA_NL_A_MAX (__QUOTA_NL_A_MAX - 1)
......
...@@ -542,6 +542,7 @@ enum { ...@@ -542,6 +542,7 @@ enum {
TCA_FCNT, TCA_FCNT,
TCA_STATS2, TCA_STATS2,
TCA_STAB, TCA_STAB,
TCA_PAD,
__TCA_MAX __TCA_MAX
}; };
......
...@@ -26,6 +26,7 @@ enum { ...@@ -26,6 +26,7 @@ enum {
TCA_ACT_BPF_OPS, TCA_ACT_BPF_OPS,
TCA_ACT_BPF_FD, TCA_ACT_BPF_FD,
TCA_ACT_BPF_NAME, TCA_ACT_BPF_NAME,
TCA_ACT_BPF_PAD,
__TCA_ACT_BPF_MAX, __TCA_ACT_BPF_MAX,
}; };
#define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1) #define TCA_ACT_BPF_MAX (__TCA_ACT_BPF_MAX - 1)
......
...@@ -15,6 +15,7 @@ enum { ...@@ -15,6 +15,7 @@ enum {
TCA_CONNMARK_UNSPEC, TCA_CONNMARK_UNSPEC,
TCA_CONNMARK_PARMS, TCA_CONNMARK_PARMS,
TCA_CONNMARK_TM, TCA_CONNMARK_TM,
TCA_CONNMARK_PAD,
__TCA_CONNMARK_MAX __TCA_CONNMARK_MAX
}; };
#define TCA_CONNMARK_MAX (__TCA_CONNMARK_MAX - 1) #define TCA_CONNMARK_MAX (__TCA_CONNMARK_MAX - 1)
......
...@@ -10,6 +10,7 @@ enum { ...@@ -10,6 +10,7 @@ enum {
TCA_CSUM_UNSPEC, TCA_CSUM_UNSPEC,
TCA_CSUM_PARMS, TCA_CSUM_PARMS,
TCA_CSUM_TM, TCA_CSUM_TM,
TCA_CSUM_PAD,
__TCA_CSUM_MAX __TCA_CSUM_MAX
}; };
#define TCA_CSUM_MAX (__TCA_CSUM_MAX - 1) #define TCA_CSUM_MAX (__TCA_CSUM_MAX - 1)
......
...@@ -12,6 +12,7 @@ enum { ...@@ -12,6 +12,7 @@ enum {
TCA_DEF_TM, TCA_DEF_TM,
TCA_DEF_PARMS, TCA_DEF_PARMS,
TCA_DEF_DATA, TCA_DEF_DATA,
TCA_DEF_PAD,
__TCA_DEF_MAX __TCA_DEF_MAX
}; };
#define TCA_DEF_MAX (__TCA_DEF_MAX - 1) #define TCA_DEF_MAX (__TCA_DEF_MAX - 1)
......
...@@ -25,6 +25,7 @@ enum { ...@@ -25,6 +25,7 @@ enum {
TCA_GACT_TM, TCA_GACT_TM,
TCA_GACT_PARMS, TCA_GACT_PARMS,
TCA_GACT_PROB, TCA_GACT_PROB,
TCA_GACT_PAD,
__TCA_GACT_MAX __TCA_GACT_MAX
}; };
#define TCA_GACT_MAX (__TCA_GACT_MAX - 1) #define TCA_GACT_MAX (__TCA_GACT_MAX - 1)
......
...@@ -23,6 +23,7 @@ enum { ...@@ -23,6 +23,7 @@ enum {
TCA_IFE_SMAC, TCA_IFE_SMAC,
TCA_IFE_TYPE, TCA_IFE_TYPE,
TCA_IFE_METALST, TCA_IFE_METALST,
TCA_IFE_PAD,
__TCA_IFE_MAX __TCA_IFE_MAX
}; };
#define TCA_IFE_MAX (__TCA_IFE_MAX - 1) #define TCA_IFE_MAX (__TCA_IFE_MAX - 1)
......
...@@ -14,6 +14,7 @@ enum { ...@@ -14,6 +14,7 @@ enum {
TCA_IPT_CNT, TCA_IPT_CNT,
TCA_IPT_TM, TCA_IPT_TM,
TCA_IPT_TARG, TCA_IPT_TARG,
TCA_IPT_PAD,
__TCA_IPT_MAX __TCA_IPT_MAX
}; };
#define TCA_IPT_MAX (__TCA_IPT_MAX - 1) #define TCA_IPT_MAX (__TCA_IPT_MAX - 1)
......
...@@ -20,6 +20,7 @@ enum { ...@@ -20,6 +20,7 @@ enum {
TCA_MIRRED_UNSPEC, TCA_MIRRED_UNSPEC,
TCA_MIRRED_TM, TCA_MIRRED_TM,
TCA_MIRRED_PARMS, TCA_MIRRED_PARMS,
TCA_MIRRED_PAD,
__TCA_MIRRED_MAX __TCA_MIRRED_MAX
}; };
#define TCA_MIRRED_MAX (__TCA_MIRRED_MAX - 1) #define TCA_MIRRED_MAX (__TCA_MIRRED_MAX - 1)
......
...@@ -10,6 +10,7 @@ enum { ...@@ -10,6 +10,7 @@ enum {
TCA_NAT_UNSPEC, TCA_NAT_UNSPEC,
TCA_NAT_PARMS, TCA_NAT_PARMS,
TCA_NAT_TM, TCA_NAT_TM,
TCA_NAT_PAD,
__TCA_NAT_MAX __TCA_NAT_MAX
}; };
#define TCA_NAT_MAX (__TCA_NAT_MAX - 1) #define TCA_NAT_MAX (__TCA_NAT_MAX - 1)
......
...@@ -10,6 +10,7 @@ enum { ...@@ -10,6 +10,7 @@ enum {
TCA_PEDIT_UNSPEC, TCA_PEDIT_UNSPEC,
TCA_PEDIT_TM, TCA_PEDIT_TM,
TCA_PEDIT_PARMS, TCA_PEDIT_PARMS,
TCA_PEDIT_PAD,
__TCA_PEDIT_MAX __TCA_PEDIT_MAX
}; };
#define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1) #define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1)
......
...@@ -39,6 +39,7 @@ enum { ...@@ -39,6 +39,7 @@ enum {
TCA_SKBEDIT_PRIORITY, TCA_SKBEDIT_PRIORITY,
TCA_SKBEDIT_QUEUE_MAPPING, TCA_SKBEDIT_QUEUE_MAPPING,
TCA_SKBEDIT_MARK, TCA_SKBEDIT_MARK,
TCA_SKBEDIT_PAD,
__TCA_SKBEDIT_MAX __TCA_SKBEDIT_MAX
}; };
#define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1) #define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1)
......
...@@ -28,6 +28,7 @@ enum { ...@@ -28,6 +28,7 @@ enum {
TCA_VLAN_PARMS, TCA_VLAN_PARMS,
TCA_VLAN_PUSH_VLAN_ID, TCA_VLAN_PUSH_VLAN_ID,
TCA_VLAN_PUSH_VLAN_PROTOCOL, TCA_VLAN_PUSH_VLAN_PROTOCOL,
TCA_VLAN_PAD,
__TCA_VLAN_MAX, __TCA_VLAN_MAX,
}; };
#define TCA_VLAN_MAX (__TCA_VLAN_MAX - 1) #define TCA_VLAN_MAX (__TCA_VLAN_MAX - 1)
......
...@@ -25,9 +25,9 @@ ...@@ -25,9 +25,9 @@
static inline int static inline int
gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size) gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size, int padattr)
{ {
if (nla_put(d->skb, type, size, buf)) if (nla_put_64bit(d->skb, type, size, buf, padattr))
goto nla_put_failure; goto nla_put_failure;
return 0; return 0;
...@@ -59,7 +59,8 @@ gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size) ...@@ -59,7 +59,8 @@ gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size)
*/ */
int int
gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type, gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type,
int xstats_type, spinlock_t *lock, struct gnet_dump *d) int xstats_type, spinlock_t *lock,
struct gnet_dump *d, int padattr)
__acquires(lock) __acquires(lock)
{ {
memset(d, 0, sizeof(*d)); memset(d, 0, sizeof(*d));
...@@ -71,16 +72,17 @@ gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type, ...@@ -71,16 +72,17 @@ gnet_stats_start_copy_compat(struct sk_buff *skb, int type, int tc_stats_type,
d->skb = skb; d->skb = skb;
d->compat_tc_stats = tc_stats_type; d->compat_tc_stats = tc_stats_type;
d->compat_xstats = xstats_type; d->compat_xstats = xstats_type;
d->padattr = padattr;
if (d->tail) if (d->tail)
return gnet_stats_copy(d, type, NULL, 0); return gnet_stats_copy(d, type, NULL, 0, padattr);
return 0; return 0;
} }
EXPORT_SYMBOL(gnet_stats_start_copy_compat); EXPORT_SYMBOL(gnet_stats_start_copy_compat);
/** /**
* gnet_stats_start_copy_compat - start dumping procedure in compatibility mode * gnet_stats_start_copy - start dumping procedure in compatibility mode
* @skb: socket buffer to put statistics TLVs into * @skb: socket buffer to put statistics TLVs into
* @type: TLV type for top level statistic TLV * @type: TLV type for top level statistic TLV
* @lock: statistics lock * @lock: statistics lock
...@@ -94,9 +96,9 @@ EXPORT_SYMBOL(gnet_stats_start_copy_compat); ...@@ -94,9 +96,9 @@ EXPORT_SYMBOL(gnet_stats_start_copy_compat);
*/ */
int int
gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock, gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock,
struct gnet_dump *d) struct gnet_dump *d, int padattr)
{ {
return gnet_stats_start_copy_compat(skb, type, 0, 0, lock, d); return gnet_stats_start_copy_compat(skb, type, 0, 0, lock, d, padattr);
} }
EXPORT_SYMBOL(gnet_stats_start_copy); EXPORT_SYMBOL(gnet_stats_start_copy);
...@@ -169,7 +171,8 @@ gnet_stats_copy_basic(struct gnet_dump *d, ...@@ -169,7 +171,8 @@ gnet_stats_copy_basic(struct gnet_dump *d,
memset(&sb, 0, sizeof(sb)); memset(&sb, 0, sizeof(sb));
sb.bytes = bstats.bytes; sb.bytes = bstats.bytes;
sb.packets = bstats.packets; sb.packets = bstats.packets;
return gnet_stats_copy(d, TCA_STATS_BASIC, &sb, sizeof(sb)); return gnet_stats_copy(d, TCA_STATS_BASIC, &sb, sizeof(sb),
TCA_STATS_PAD);
} }
return 0; return 0;
} }
...@@ -208,11 +211,13 @@ gnet_stats_copy_rate_est(struct gnet_dump *d, ...@@ -208,11 +211,13 @@ gnet_stats_copy_rate_est(struct gnet_dump *d,
} }
if (d->tail) { if (d->tail) {
res = gnet_stats_copy(d, TCA_STATS_RATE_EST, &est, sizeof(est)); res = gnet_stats_copy(d, TCA_STATS_RATE_EST, &est, sizeof(est),
TCA_STATS_PAD);
if (res < 0 || est.bps == r->bps) if (res < 0 || est.bps == r->bps)
return res; return res;
/* emit 64bit stats only if needed */ /* emit 64bit stats only if needed */
return gnet_stats_copy(d, TCA_STATS_RATE_EST64, r, sizeof(*r)); return gnet_stats_copy(d, TCA_STATS_RATE_EST64, r, sizeof(*r),
TCA_STATS_PAD);
} }
return 0; return 0;
...@@ -286,7 +291,8 @@ gnet_stats_copy_queue(struct gnet_dump *d, ...@@ -286,7 +291,8 @@ gnet_stats_copy_queue(struct gnet_dump *d,
if (d->tail) if (d->tail)
return gnet_stats_copy(d, TCA_STATS_QUEUE, return gnet_stats_copy(d, TCA_STATS_QUEUE,
&qstats, sizeof(qstats)); &qstats, sizeof(qstats),
TCA_STATS_PAD);
return 0; return 0;
} }
...@@ -316,7 +322,8 @@ gnet_stats_copy_app(struct gnet_dump *d, void *st, int len) ...@@ -316,7 +322,8 @@ gnet_stats_copy_app(struct gnet_dump *d, void *st, int len)
} }
if (d->tail) if (d->tail)
return gnet_stats_copy(d, TCA_STATS_APP, st, len); return gnet_stats_copy(d, TCA_STATS_APP, st, len,
TCA_STATS_PAD);
return 0; return 0;
...@@ -347,12 +354,12 @@ gnet_stats_finish_copy(struct gnet_dump *d) ...@@ -347,12 +354,12 @@ gnet_stats_finish_copy(struct gnet_dump *d)
if (d->compat_tc_stats) if (d->compat_tc_stats)
if (gnet_stats_copy(d, d->compat_tc_stats, &d->tc_stats, if (gnet_stats_copy(d, d->compat_tc_stats, &d->tc_stats,
sizeof(d->tc_stats)) < 0) sizeof(d->tc_stats), d->padattr) < 0)
return -1; return -1;
if (d->compat_xstats && d->xstats) { if (d->compat_xstats && d->xstats) {
if (gnet_stats_copy(d, d->compat_xstats, d->xstats, if (gnet_stats_copy(d, d->compat_xstats, d->xstats,
d->xstats_len) < 0) d->xstats_len, d->padattr) < 0)
return -1; return -1;
} }
......
...@@ -1857,7 +1857,8 @@ static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl, ...@@ -1857,7 +1857,8 @@ static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl,
ndst.ndts_table_fulls += st->table_fulls; ndst.ndts_table_fulls += st->table_fulls;
} }
if (nla_put(skb, NDTA_STATS, sizeof(ndst), &ndst)) if (nla_put_64bit(skb, NDTA_STATS, sizeof(ndst), &ndst,
NDTA_PAD))
goto nla_put_failure; goto nla_put_failure;
} }
......
...@@ -876,7 +876,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev, ...@@ -876,7 +876,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
+ nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */ + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
+ nla_total_size(IFALIASZ) /* IFLA_IFALIAS */ + nla_total_size(IFALIASZ) /* IFLA_IFALIAS */
+ nla_total_size(IFNAMSIZ) /* IFLA_QDISC */ + nla_total_size(IFNAMSIZ) /* IFLA_QDISC */
+ nla_total_size(sizeof(struct rtnl_link_ifmap)) + nla_total_size_64bit(sizeof(struct rtnl_link_ifmap))
+ nla_total_size(sizeof(struct rtnl_link_stats)) + nla_total_size(sizeof(struct rtnl_link_stats))
+ nla_total_size_64bit(sizeof(struct rtnl_link_stats64)) + nla_total_size_64bit(sizeof(struct rtnl_link_stats64))
+ nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */ + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
...@@ -1181,7 +1181,7 @@ static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev) ...@@ -1181,7 +1181,7 @@ static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev)
.dma = dev->dma, .dma = dev->dma,
.port = dev->if_port, .port = dev->if_port,
}; };
if (nla_put(skb, IFLA_MAP, sizeof(map), &map)) if (nla_put_64bit(skb, IFLA_MAP, sizeof(map), &map, IFLA_PAD))
return -EMSGSIZE; return -EMSGSIZE;
return 0; return 0;
......
...@@ -120,7 +120,7 @@ static size_t sock_diag_nlmsg_size(void) ...@@ -120,7 +120,7 @@ static size_t sock_diag_nlmsg_size(void)
{ {
return NLMSG_ALIGN(sizeof(struct inet_diag_msg) return NLMSG_ALIGN(sizeof(struct inet_diag_msg)
+ nla_total_size(sizeof(u8)) /* INET_DIAG_PROTOCOL */ + 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) static void sock_diag_broadcast_destroy_work(struct work_struct *work)
......
...@@ -220,8 +220,9 @@ int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk, ...@@ -220,8 +220,9 @@ int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
} }
if ((ext & (1 << (INET_DIAG_INFO - 1))) && handler->idiag_info_size) { if ((ext & (1 << (INET_DIAG_INFO - 1))) && handler->idiag_info_size) {
attr = nla_reserve(skb, INET_DIAG_INFO, attr = nla_reserve_64bit(skb, INET_DIAG_INFO,
handler->idiag_info_size); handler->idiag_info_size,
INET_DIAG_PAD);
if (!attr) if (!attr)
goto errout; goto errout;
...@@ -1078,7 +1079,9 @@ int inet_diag_handler_get_info(struct sk_buff *skb, struct sock *sk) ...@@ -1078,7 +1079,9 @@ int inet_diag_handler_get_info(struct sk_buff *skb, struct sock *sk)
} }
attr = handler->idiag_info_size 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; : NULL;
if (attr) if (attr)
info = nla_data(attr); info = nla_data(attr);
......
...@@ -738,9 +738,9 @@ static size_t ovs_flow_cmd_msg_size(const struct sw_flow_actions *acts, ...@@ -738,9 +738,9 @@ static size_t ovs_flow_cmd_msg_size(const struct sw_flow_actions *acts,
len += nla_total_size(acts->orig_len); len += nla_total_size(acts->orig_len);
return len return len
+ nla_total_size(sizeof(struct ovs_flow_stats)) /* OVS_FLOW_ATTR_STATS */ + nla_total_size_64bit(sizeof(struct ovs_flow_stats)) /* OVS_FLOW_ATTR_STATS */
+ nla_total_size(1) /* OVS_FLOW_ATTR_TCP_FLAGS */ + nla_total_size(1) /* OVS_FLOW_ATTR_TCP_FLAGS */
+ nla_total_size(8); /* OVS_FLOW_ATTR_USED */ + nla_total_size_64bit(8); /* OVS_FLOW_ATTR_USED */
} }
/* Called with ovs_mutex or RCU read lock. */ /* Called with ovs_mutex or RCU read lock. */
...@@ -759,7 +759,9 @@ static int ovs_flow_cmd_fill_stats(const struct sw_flow *flow, ...@@ -759,7 +759,9 @@ static int ovs_flow_cmd_fill_stats(const struct sw_flow *flow,
return -EMSGSIZE; return -EMSGSIZE;
if (stats.n_packets && if (stats.n_packets &&
nla_put(skb, OVS_FLOW_ATTR_STATS, sizeof(struct ovs_flow_stats), &stats)) nla_put_64bit(skb, OVS_FLOW_ATTR_STATS,
sizeof(struct ovs_flow_stats), &stats,
OVS_FLOW_ATTR_PAD))
return -EMSGSIZE; return -EMSGSIZE;
if ((u8)ntohs(tcp_flags) && if ((u8)ntohs(tcp_flags) &&
...@@ -1435,8 +1437,8 @@ static size_t ovs_dp_cmd_msg_size(void) ...@@ -1435,8 +1437,8 @@ static size_t ovs_dp_cmd_msg_size(void)
size_t msgsize = NLMSG_ALIGN(sizeof(struct ovs_header)); size_t msgsize = NLMSG_ALIGN(sizeof(struct ovs_header));
msgsize += nla_total_size(IFNAMSIZ); msgsize += nla_total_size(IFNAMSIZ);
msgsize += nla_total_size(sizeof(struct ovs_dp_stats)); msgsize += nla_total_size_64bit(sizeof(struct ovs_dp_stats));
msgsize += nla_total_size(sizeof(struct ovs_dp_megaflow_stats)); msgsize += nla_total_size_64bit(sizeof(struct ovs_dp_megaflow_stats));
msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_USER_FEATURES */ msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_USER_FEATURES */
return msgsize; return msgsize;
...@@ -1463,13 +1465,13 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb, ...@@ -1463,13 +1465,13 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
goto nla_put_failure; goto nla_put_failure;
get_dp_stats(dp, &dp_stats, &dp_megaflow_stats); get_dp_stats(dp, &dp_stats, &dp_megaflow_stats);
if (nla_put(skb, OVS_DP_ATTR_STATS, sizeof(struct ovs_dp_stats), if (nla_put_64bit(skb, OVS_DP_ATTR_STATS, sizeof(struct ovs_dp_stats),
&dp_stats)) &dp_stats, OVS_DP_ATTR_PAD))
goto nla_put_failure; goto nla_put_failure;
if (nla_put(skb, OVS_DP_ATTR_MEGAFLOW_STATS, if (nla_put_64bit(skb, OVS_DP_ATTR_MEGAFLOW_STATS,
sizeof(struct ovs_dp_megaflow_stats), sizeof(struct ovs_dp_megaflow_stats),
&dp_megaflow_stats)) &dp_megaflow_stats, OVS_DP_ATTR_PAD))
goto nla_put_failure; goto nla_put_failure;
if (nla_put_u32(skb, OVS_DP_ATTR_USER_FEATURES, dp->user_features)) if (nla_put_u32(skb, OVS_DP_ATTR_USER_FEATURES, dp->user_features))
...@@ -1838,8 +1840,9 @@ static int ovs_vport_cmd_fill_info(struct vport *vport, struct sk_buff *skb, ...@@ -1838,8 +1840,9 @@ static int ovs_vport_cmd_fill_info(struct vport *vport, struct sk_buff *skb,
goto nla_put_failure; goto nla_put_failure;
ovs_vport_get_stats(vport, &vport_stats); ovs_vport_get_stats(vport, &vport_stats);
if (nla_put(skb, OVS_VPORT_ATTR_STATS, sizeof(struct ovs_vport_stats), if (nla_put_64bit(skb, OVS_VPORT_ATTR_STATS,
&vport_stats)) sizeof(struct ovs_vport_stats), &vport_stats,
OVS_VPORT_ATTR_PAD))
goto nla_put_failure; goto nla_put_failure;
if (ovs_vport_get_upcall_portids(vport, skb)) if (ovs_vport_get_upcall_portids(vport, skb))
......
...@@ -657,12 +657,15 @@ int tcf_action_copy_stats(struct sk_buff *skb, struct tc_action *a, ...@@ -657,12 +657,15 @@ int tcf_action_copy_stats(struct sk_buff *skb, struct tc_action *a,
if (compat_mode) { if (compat_mode) {
if (a->type == TCA_OLD_COMPAT) if (a->type == TCA_OLD_COMPAT)
err = gnet_stats_start_copy_compat(skb, 0, err = gnet_stats_start_copy_compat(skb, 0,
TCA_STATS, TCA_XSTATS, &p->tcfc_lock, &d); TCA_STATS,
TCA_XSTATS,
&p->tcfc_lock, &d,
TCA_PAD);
else else
return 0; return 0;
} else } else
err = gnet_stats_start_copy(skb, TCA_ACT_STATS, err = gnet_stats_start_copy(skb, TCA_ACT_STATS,
&p->tcfc_lock, &d); &p->tcfc_lock, &d, TCA_ACT_PAD);
if (err < 0) if (err < 0)
goto errout; goto errout;
......
...@@ -156,7 +156,8 @@ static int tcf_bpf_dump(struct sk_buff *skb, struct tc_action *act, ...@@ -156,7 +156,8 @@ static int tcf_bpf_dump(struct sk_buff *skb, struct tc_action *act,
tm.lastuse = jiffies_to_clock_t(jiffies - prog->tcf_tm.lastuse); tm.lastuse = jiffies_to_clock_t(jiffies - prog->tcf_tm.lastuse);
tm.expires = jiffies_to_clock_t(prog->tcf_tm.expires); tm.expires = jiffies_to_clock_t(prog->tcf_tm.expires);
if (nla_put(skb, TCA_ACT_BPF_TM, sizeof(tm), &tm)) if (nla_put_64bit(skb, TCA_ACT_BPF_TM, sizeof(tm), &tm,
TCA_ACT_BPF_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -163,7 +163,8 @@ static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a, ...@@ -163,7 +163,8 @@ static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a,
t.install = jiffies_to_clock_t(jiffies - ci->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - ci->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - ci->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - ci->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(ci->tcf_tm.expires); t.expires = jiffies_to_clock_t(ci->tcf_tm.expires);
if (nla_put(skb, TCA_CONNMARK_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_CONNMARK_TM, sizeof(t), &t,
TCA_CONNMARK_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -549,7 +549,7 @@ static int tcf_csum_dump(struct sk_buff *skb, ...@@ -549,7 +549,7 @@ static int tcf_csum_dump(struct sk_buff *skb,
t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(p->tcf_tm.expires); t.expires = jiffies_to_clock_t(p->tcf_tm.expires);
if (nla_put(skb, TCA_CSUM_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_CSUM_TM, sizeof(t), &t, TCA_CSUM_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -177,7 +177,7 @@ static int tcf_gact_dump(struct sk_buff *skb, struct tc_action *a, int bind, int ...@@ -177,7 +177,7 @@ static int tcf_gact_dump(struct sk_buff *skb, struct tc_action *a, int bind, int
t.install = jiffies_to_clock_t(jiffies - gact->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - gact->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - gact->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - gact->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(gact->tcf_tm.expires); t.expires = jiffies_to_clock_t(gact->tcf_tm.expires);
if (nla_put(skb, TCA_GACT_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_GACT_TM, sizeof(t), &t, TCA_GACT_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -550,7 +550,7 @@ static int tcf_ife_dump(struct sk_buff *skb, struct tc_action *a, int bind, ...@@ -550,7 +550,7 @@ static int tcf_ife_dump(struct sk_buff *skb, struct tc_action *a, int bind,
t.install = jiffies_to_clock_t(jiffies - ife->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - ife->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - ife->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - ife->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(ife->tcf_tm.expires); t.expires = jiffies_to_clock_t(ife->tcf_tm.expires);
if (nla_put(skb, TCA_IFE_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_IFE_TM, sizeof(t), &t, TCA_IFE_PAD))
goto nla_put_failure; goto nla_put_failure;
if (!is_zero_ether_addr(ife->eth_dst)) { if (!is_zero_ether_addr(ife->eth_dst)) {
......
...@@ -275,7 +275,7 @@ static int tcf_ipt_dump(struct sk_buff *skb, struct tc_action *a, int bind, int ...@@ -275,7 +275,7 @@ static int tcf_ipt_dump(struct sk_buff *skb, struct tc_action *a, int bind, int
tm.install = jiffies_to_clock_t(jiffies - ipt->tcf_tm.install); tm.install = jiffies_to_clock_t(jiffies - ipt->tcf_tm.install);
tm.lastuse = jiffies_to_clock_t(jiffies - ipt->tcf_tm.lastuse); tm.lastuse = jiffies_to_clock_t(jiffies - ipt->tcf_tm.lastuse);
tm.expires = jiffies_to_clock_t(ipt->tcf_tm.expires); tm.expires = jiffies_to_clock_t(ipt->tcf_tm.expires);
if (nla_put(skb, TCA_IPT_TM, sizeof (tm), &tm)) if (nla_put_64bit(skb, TCA_IPT_TM, sizeof(tm), &tm, TCA_IPT_PAD))
goto nla_put_failure; goto nla_put_failure;
kfree(t); kfree(t);
return skb->len; return skb->len;
......
...@@ -214,7 +214,7 @@ static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, i ...@@ -214,7 +214,7 @@ static int tcf_mirred_dump(struct sk_buff *skb, struct tc_action *a, int bind, i
t.install = jiffies_to_clock_t(jiffies - m->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - m->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - m->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - m->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(m->tcf_tm.expires); t.expires = jiffies_to_clock_t(m->tcf_tm.expires);
if (nla_put(skb, TCA_MIRRED_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_MIRRED_TM, sizeof(t), &t, TCA_MIRRED_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -267,7 +267,7 @@ static int tcf_nat_dump(struct sk_buff *skb, struct tc_action *a, ...@@ -267,7 +267,7 @@ static int tcf_nat_dump(struct sk_buff *skb, struct tc_action *a,
t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(p->tcf_tm.expires); t.expires = jiffies_to_clock_t(p->tcf_tm.expires);
if (nla_put(skb, TCA_NAT_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_NAT_TM, sizeof(t), &t, TCA_NAT_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -203,7 +203,7 @@ static int tcf_pedit_dump(struct sk_buff *skb, struct tc_action *a, ...@@ -203,7 +203,7 @@ static int tcf_pedit_dump(struct sk_buff *skb, struct tc_action *a,
t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(p->tcf_tm.expires); t.expires = jiffies_to_clock_t(p->tcf_tm.expires);
if (nla_put(skb, TCA_PEDIT_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_PEDIT_TM, sizeof(t), &t, TCA_PEDIT_PAD))
goto nla_put_failure; goto nla_put_failure;
kfree(opt); kfree(opt);
return skb->len; return skb->len;
......
...@@ -155,7 +155,7 @@ static int tcf_simp_dump(struct sk_buff *skb, struct tc_action *a, ...@@ -155,7 +155,7 @@ static int tcf_simp_dump(struct sk_buff *skb, struct tc_action *a,
t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(d->tcf_tm.expires); t.expires = jiffies_to_clock_t(d->tcf_tm.expires);
if (nla_put(skb, TCA_DEF_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_DEF_TM, sizeof(t), &t, TCA_DEF_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -167,7 +167,7 @@ static int tcf_skbedit_dump(struct sk_buff *skb, struct tc_action *a, ...@@ -167,7 +167,7 @@ static int tcf_skbedit_dump(struct sk_buff *skb, struct tc_action *a,
t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - d->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - d->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(d->tcf_tm.expires); t.expires = jiffies_to_clock_t(d->tcf_tm.expires);
if (nla_put(skb, TCA_SKBEDIT_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_SKBEDIT_TM, sizeof(t), &t, TCA_SKBEDIT_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -175,7 +175,7 @@ static int tcf_vlan_dump(struct sk_buff *skb, struct tc_action *a, ...@@ -175,7 +175,7 @@ static int tcf_vlan_dump(struct sk_buff *skb, struct tc_action *a,
t.install = jiffies_to_clock_t(jiffies - v->tcf_tm.install); t.install = jiffies_to_clock_t(jiffies - v->tcf_tm.install);
t.lastuse = jiffies_to_clock_t(jiffies - v->tcf_tm.lastuse); t.lastuse = jiffies_to_clock_t(jiffies - v->tcf_tm.lastuse);
t.expires = jiffies_to_clock_t(v->tcf_tm.expires); t.expires = jiffies_to_clock_t(v->tcf_tm.expires);
if (nla_put(skb, TCA_VLAN_TM, sizeof(t), &t)) if (nla_put_64bit(skb, TCA_VLAN_TM, sizeof(t), &t, TCA_VLAN_PAD))
goto nla_put_failure; goto nla_put_failure;
return skb->len; return skb->len;
......
...@@ -1140,9 +1140,10 @@ static int u32_dump(struct net *net, struct tcf_proto *tp, unsigned long fh, ...@@ -1140,9 +1140,10 @@ static int u32_dump(struct net *net, struct tcf_proto *tp, unsigned long fh,
gpf->kcnts[i] += pf->kcnts[i]; gpf->kcnts[i] += pf->kcnts[i];
} }
if (nla_put(skb, TCA_U32_PCNT, if (nla_put_64bit(skb, TCA_U32_PCNT,
sizeof(struct tc_u32_pcnt) + n->sel.nkeys*sizeof(u64), sizeof(struct tc_u32_pcnt) +
gpf)) { n->sel.nkeys * sizeof(u64),
gpf, TCA_U32_PAD)) {
kfree(gpf); kfree(gpf);
goto nla_put_failure; goto nla_put_failure;
} }
......
...@@ -1365,7 +1365,8 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, ...@@ -1365,7 +1365,8 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid,
goto nla_put_failure; goto nla_put_failure;
if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS, if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS,
qdisc_root_sleeping_lock(q), &d) < 0) qdisc_root_sleeping_lock(q), &d,
TCA_PAD) < 0)
goto nla_put_failure; goto nla_put_failure;
if (q->ops->dump_stats && q->ops->dump_stats(q, &d) < 0) if (q->ops->dump_stats && q->ops->dump_stats(q, &d) < 0)
...@@ -1679,7 +1680,8 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q, ...@@ -1679,7 +1680,8 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q,
goto nla_put_failure; goto nla_put_failure;
if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS, if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS, TCA_XSTATS,
qdisc_root_sleeping_lock(q), &d) < 0) qdisc_root_sleeping_lock(q), &d,
TCA_PAD) < 0)
goto nla_put_failure; goto nla_put_failure;
if (cl_ops->dump_stats && cl_ops->dump_stats(q, cl, &d) < 0) if (cl_ops->dump_stats && cl_ops->dump_stats(q, cl, &d) < 0)
......
...@@ -161,8 +161,9 @@ static int inet_sctp_diag_fill(struct sock *sk, struct sctp_association *asoc, ...@@ -161,8 +161,9 @@ static int inet_sctp_diag_fill(struct sock *sk, struct sctp_association *asoc,
if (ext & (1 << (INET_DIAG_INFO - 1))) { if (ext & (1 << (INET_DIAG_INFO - 1))) {
struct nlattr *attr; struct nlattr *attr;
attr = nla_reserve(skb, INET_DIAG_INFO, attr = nla_reserve_64bit(skb, INET_DIAG_INFO,
sizeof(struct sctp_info)); sizeof(struct sctp_info),
INET_DIAG_PAD);
if (!attr) if (!attr)
goto errout; goto errout;
......
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