Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

nla_data() is now aligned on a 64-bit area.

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Nicolas Dichtel and committed by
David S. Miller
e7479122 11a99573

+19 -8
+5 -3
include/net/netlink.h
··· 878 878 } 879 879 880 880 /** 881 - * nla_put_le64 - Add a __le64 netlink attribute to a socket buffer 881 + * nla_put_le64 - Add a __le64 netlink attribute to a socket buffer and align it 882 882 * @skb: socket buffer to add attribute to 883 883 * @attrtype: attribute type 884 884 * @value: numeric value 885 + * @padattr: attribute type for the padding 885 886 */ 886 - static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value) 887 + static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value, 888 + int padattr) 887 889 { 888 - return nla_put(skb, attrtype, sizeof(__le64), &value); 890 + return nla_put_64bit(skb, attrtype, sizeof(__le64), &value, padattr); 889 891 } 890 892 891 893 /**
+6
include/net/nl802154.h
··· 138 138 NL802154_ATTR_SEC_KEY, 139 139 #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */ 140 140 141 + NL802154_ATTR_PAD, 142 + 141 143 __NL802154_ATTR_AFTER_LAST, 142 144 NL802154_ATTR_MAX = __NL802154_ATTR_AFTER_LAST - 1 143 145 }; ··· 297 295 NL802154_DEV_ADDR_ATTR_MODE, 298 296 NL802154_DEV_ADDR_ATTR_SHORT, 299 297 NL802154_DEV_ADDR_ATTR_EXTENDED, 298 + NL802154_DEV_ADDR_ATTR_PAD, 300 299 301 300 /* keep last */ 302 301 __NL802154_DEV_ADDR_ATTR_AFTER_LAST, ··· 323 320 NL802154_KEY_ID_ATTR_IMPLICIT, 324 321 NL802154_KEY_ID_ATTR_SOURCE_SHORT, 325 322 NL802154_KEY_ID_ATTR_SOURCE_EXTENDED, 323 + NL802154_KEY_ID_ATTR_PAD, 326 324 327 325 /* keep last */ 328 326 __NL802154_KEY_ID_ATTR_AFTER_LAST, ··· 406 402 NL802154_DEV_ATTR_EXTENDED_ADDR, 407 403 NL802154_DEV_ATTR_SECLEVEL_EXEMPT, 408 404 NL802154_DEV_ATTR_KEY_MODE, 405 + NL802154_DEV_ATTR_PAD, 409 406 410 407 /* keep last */ 411 408 __NL802154_DEV_ATTR_AFTER_LAST, ··· 419 414 NL802154_DEVKEY_ATTR_FRAME_COUNTER, 420 415 NL802154_DEVKEY_ATTR_EXTENDED_ADDR, 421 416 NL802154_DEVKEY_ATTR_ID, 417 + NL802154_DEVKEY_ATTR_PAD, 422 418 423 419 /* keep last */ 424 420 __NL802154_DEVKEY_ATTR_AFTER_LAST,
+8 -5
net/ieee802154/nl802154.c
··· 722 722 break; 723 723 case NL802154_DEV_ADDR_EXTENDED: 724 724 if (nla_put_le64(msg, NL802154_DEV_ADDR_ATTR_EXTENDED, 725 - desc->device_addr.extended_addr)) 725 + desc->device_addr.extended_addr, 726 + NL802154_DEV_ADDR_ATTR_PAD)) 726 727 return -ENOBUFS; 727 728 break; 728 729 default: ··· 743 742 break; 744 743 case NL802154_KEY_ID_MODE_INDEX_EXTENDED: 745 744 if (nla_put_le64(msg, NL802154_KEY_ID_ATTR_SOURCE_EXTENDED, 746 - desc->extended_source)) 745 + desc->extended_source, 746 + NL802154_KEY_ID_ATTR_PAD)) 747 747 return -ENOBUFS; 748 748 break; 749 749 default: ··· 821 819 822 820 /* address settings */ 823 821 if (nla_put_le64(msg, NL802154_ATTR_EXTENDED_ADDR, 824 - wpan_dev->extended_addr) || 822 + wpan_dev->extended_addr, 823 + NL802154_ATTR_PAD) || 825 824 nla_put_le16(msg, NL802154_ATTR_SHORT_ADDR, 826 825 wpan_dev->short_addr) || 827 826 nla_put_le16(msg, NL802154_ATTR_PAN_ID, wpan_dev->pan_id)) ··· 1617 1614 nla_put_le16(msg, NL802154_DEV_ATTR_SHORT_ADDR, 1618 1615 dev_desc->short_addr) || 1619 1616 nla_put_le64(msg, NL802154_DEV_ATTR_EXTENDED_ADDR, 1620 - dev_desc->hwaddr) || 1617 + dev_desc->hwaddr, NL802154_DEV_ATTR_PAD) || 1621 1618 nla_put_u8(msg, NL802154_DEV_ATTR_SECLEVEL_EXEMPT, 1622 1619 dev_desc->seclevel_exempt) || 1623 1620 nla_put_u32(msg, NL802154_DEV_ATTR_KEY_MODE, dev_desc->key_mode)) ··· 1781 1778 goto nla_put_failure; 1782 1779 1783 1780 if (nla_put_le64(msg, NL802154_DEVKEY_ATTR_EXTENDED_ADDR, 1784 - extended_addr) || 1781 + extended_addr, NL802154_DEVKEY_ATTR_PAD) || 1785 1782 nla_put_u32(msg, NL802154_DEVKEY_ATTR_FRAME_COUNTER, 1786 1783 devkey->frame_counter)) 1787 1784 goto nla_put_failure;