cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

netlink.h (61656B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __NET_NETLINK_H
      3#define __NET_NETLINK_H
      4
      5#include <linux/types.h>
      6#include <linux/netlink.h>
      7#include <linux/jiffies.h>
      8#include <linux/in6.h>
      9
     10/* ========================================================================
     11 *         Netlink Messages and Attributes Interface (As Seen On TV)
     12 * ------------------------------------------------------------------------
     13 *                          Messages Interface
     14 * ------------------------------------------------------------------------
     15 *
     16 * Message Format:
     17 *    <--- nlmsg_total_size(payload)  --->
     18 *    <-- nlmsg_msg_size(payload) ->
     19 *   +----------+- - -+-------------+- - -+-------- - -
     20 *   | nlmsghdr | Pad |   Payload   | Pad | nlmsghdr
     21 *   +----------+- - -+-------------+- - -+-------- - -
     22 *   nlmsg_data(nlh)---^                   ^
     23 *   nlmsg_next(nlh)-----------------------+
     24 *
     25 * Payload Format:
     26 *    <---------------------- nlmsg_len(nlh) --------------------->
     27 *    <------ hdrlen ------>       <- nlmsg_attrlen(nlh, hdrlen) ->
     28 *   +----------------------+- - -+--------------------------------+
     29 *   |     Family Header    | Pad |           Attributes           |
     30 *   +----------------------+- - -+--------------------------------+
     31 *   nlmsg_attrdata(nlh, hdrlen)---^
     32 *
     33 * Data Structures:
     34 *   struct nlmsghdr			netlink message header
     35 *
     36 * Message Construction:
     37 *   nlmsg_new()			create a new netlink message
     38 *   nlmsg_put()			add a netlink message to an skb
     39 *   nlmsg_put_answer()			callback based nlmsg_put()
     40 *   nlmsg_end()			finalize netlink message
     41 *   nlmsg_get_pos()			return current position in message
     42 *   nlmsg_trim()			trim part of message
     43 *   nlmsg_cancel()			cancel message construction
     44 *   nlmsg_free()			free a netlink message
     45 *
     46 * Message Sending:
     47 *   nlmsg_multicast()			multicast message to several groups
     48 *   nlmsg_unicast()			unicast a message to a single socket
     49 *   nlmsg_notify()			send notification message
     50 *
     51 * Message Length Calculations:
     52 *   nlmsg_msg_size(payload)		length of message w/o padding
     53 *   nlmsg_total_size(payload)		length of message w/ padding
     54 *   nlmsg_padlen(payload)		length of padding at tail
     55 *
     56 * Message Payload Access:
     57 *   nlmsg_data(nlh)			head of message payload
     58 *   nlmsg_len(nlh)			length of message payload
     59 *   nlmsg_attrdata(nlh, hdrlen)	head of attributes data
     60 *   nlmsg_attrlen(nlh, hdrlen)		length of attributes data
     61 *
     62 * Message Parsing:
     63 *   nlmsg_ok(nlh, remaining)		does nlh fit into remaining bytes?
     64 *   nlmsg_next(nlh, remaining)		get next netlink message
     65 *   nlmsg_parse()			parse attributes of a message
     66 *   nlmsg_find_attr()			find an attribute in a message
     67 *   nlmsg_for_each_msg()		loop over all messages
     68 *   nlmsg_validate()			validate netlink message incl. attrs
     69 *   nlmsg_for_each_attr()		loop over all attributes
     70 *
     71 * Misc:
     72 *   nlmsg_report()			report back to application?
     73 *
     74 * ------------------------------------------------------------------------
     75 *                          Attributes Interface
     76 * ------------------------------------------------------------------------
     77 *
     78 * Attribute Format:
     79 *    <------- nla_total_size(payload) ------->
     80 *    <---- nla_attr_size(payload) ----->
     81 *   +----------+- - -+- - - - - - - - - +- - -+-------- - -
     82 *   |  Header  | Pad |     Payload      | Pad |  Header
     83 *   +----------+- - -+- - - - - - - - - +- - -+-------- - -
     84 *                     <- nla_len(nla) ->      ^
     85 *   nla_data(nla)----^                        |
     86 *   nla_next(nla)-----------------------------'
     87 *
     88 * Data Structures:
     89 *   struct nlattr			netlink attribute header
     90 *
     91 * Attribute Construction:
     92 *   nla_reserve(skb, type, len)	reserve room for an attribute
     93 *   nla_reserve_nohdr(skb, len)	reserve room for an attribute w/o hdr
     94 *   nla_put(skb, type, len, data)	add attribute to skb
     95 *   nla_put_nohdr(skb, len, data)	add attribute w/o hdr
     96 *   nla_append(skb, len, data)		append data to skb
     97 *
     98 * Attribute Construction for Basic Types:
     99 *   nla_put_u8(skb, type, value)	add u8 attribute to skb
    100 *   nla_put_u16(skb, type, value)	add u16 attribute to skb
    101 *   nla_put_u32(skb, type, value)	add u32 attribute to skb
    102 *   nla_put_u64_64bit(skb, type,
    103 *                     value, padattr)	add u64 attribute to skb
    104 *   nla_put_s8(skb, type, value)	add s8 attribute to skb
    105 *   nla_put_s16(skb, type, value)	add s16 attribute to skb
    106 *   nla_put_s32(skb, type, value)	add s32 attribute to skb
    107 *   nla_put_s64(skb, type, value,
    108 *               padattr)		add s64 attribute to skb
    109 *   nla_put_string(skb, type, str)	add string attribute to skb
    110 *   nla_put_flag(skb, type)		add flag attribute to skb
    111 *   nla_put_msecs(skb, type, jiffies,
    112 *                 padattr)		add msecs attribute to skb
    113 *   nla_put_in_addr(skb, type, addr)	add IPv4 address attribute to skb
    114 *   nla_put_in6_addr(skb, type, addr)	add IPv6 address attribute to skb
    115 *
    116 * Nested Attributes Construction:
    117 *   nla_nest_start(skb, type)		start a nested attribute
    118 *   nla_nest_end(skb, nla)		finalize a nested attribute
    119 *   nla_nest_cancel(skb, nla)		cancel nested attribute construction
    120 *
    121 * Attribute Length Calculations:
    122 *   nla_attr_size(payload)		length of attribute w/o padding
    123 *   nla_total_size(payload)		length of attribute w/ padding
    124 *   nla_padlen(payload)		length of padding
    125 *
    126 * Attribute Payload Access:
    127 *   nla_data(nla)			head of attribute payload
    128 *   nla_len(nla)			length of attribute payload
    129 *
    130 * Attribute Payload Access for Basic Types:
    131 *   nla_get_u8(nla)			get payload for a u8 attribute
    132 *   nla_get_u16(nla)			get payload for a u16 attribute
    133 *   nla_get_u32(nla)			get payload for a u32 attribute
    134 *   nla_get_u64(nla)			get payload for a u64 attribute
    135 *   nla_get_s8(nla)			get payload for a s8 attribute
    136 *   nla_get_s16(nla)			get payload for a s16 attribute
    137 *   nla_get_s32(nla)			get payload for a s32 attribute
    138 *   nla_get_s64(nla)			get payload for a s64 attribute
    139 *   nla_get_flag(nla)			return 1 if flag is true
    140 *   nla_get_msecs(nla)			get payload for a msecs attribute
    141 *
    142 * Attribute Misc:
    143 *   nla_memcpy(dest, nla, count)	copy attribute into memory
    144 *   nla_memcmp(nla, data, size)	compare attribute with memory area
    145 *   nla_strscpy(dst, nla, size)	copy attribute to a sized string
    146 *   nla_strcmp(nla, str)		compare attribute with string
    147 *
    148 * Attribute Parsing:
    149 *   nla_ok(nla, remaining)		does nla fit into remaining bytes?
    150 *   nla_next(nla, remaining)		get next netlink attribute
    151 *   nla_validate()			validate a stream of attributes
    152 *   nla_validate_nested()		validate a stream of nested attributes
    153 *   nla_find()				find attribute in stream of attributes
    154 *   nla_find_nested()			find attribute in nested attributes
    155 *   nla_parse()			parse and validate stream of attrs
    156 *   nla_parse_nested()			parse nested attributes
    157 *   nla_for_each_attr()		loop over all attributes
    158 *   nla_for_each_nested()		loop over the nested attributes
    159 *=========================================================================
    160 */
    161
    162 /**
    163  * Standard attribute types to specify validation policy
    164  */
    165enum {
    166	NLA_UNSPEC,
    167	NLA_U8,
    168	NLA_U16,
    169	NLA_U32,
    170	NLA_U64,
    171	NLA_STRING,
    172	NLA_FLAG,
    173	NLA_MSECS,
    174	NLA_NESTED,
    175	NLA_NESTED_ARRAY,
    176	NLA_NUL_STRING,
    177	NLA_BINARY,
    178	NLA_S8,
    179	NLA_S16,
    180	NLA_S32,
    181	NLA_S64,
    182	NLA_BITFIELD32,
    183	NLA_REJECT,
    184	__NLA_TYPE_MAX,
    185};
    186
    187#define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1)
    188
    189struct netlink_range_validation {
    190	u64 min, max;
    191};
    192
    193struct netlink_range_validation_signed {
    194	s64 min, max;
    195};
    196
    197enum nla_policy_validation {
    198	NLA_VALIDATE_NONE,
    199	NLA_VALIDATE_RANGE,
    200	NLA_VALIDATE_RANGE_WARN_TOO_LONG,
    201	NLA_VALIDATE_MIN,
    202	NLA_VALIDATE_MAX,
    203	NLA_VALIDATE_MASK,
    204	NLA_VALIDATE_RANGE_PTR,
    205	NLA_VALIDATE_FUNCTION,
    206};
    207
    208/**
    209 * struct nla_policy - attribute validation policy
    210 * @type: Type of attribute or NLA_UNSPEC
    211 * @validation_type: type of attribute validation done in addition to
    212 *	type-specific validation (e.g. range, function call), see
    213 *	&enum nla_policy_validation
    214 * @len: Type specific length of payload
    215 *
    216 * Policies are defined as arrays of this struct, the array must be
    217 * accessible by attribute type up to the highest identifier to be expected.
    218 *
    219 * Meaning of `len' field:
    220 *    NLA_STRING           Maximum length of string
    221 *    NLA_NUL_STRING       Maximum length of string (excluding NUL)
    222 *    NLA_FLAG             Unused
    223 *    NLA_BINARY           Maximum length of attribute payload
    224 *                         (but see also below with the validation type)
    225 *    NLA_NESTED,
    226 *    NLA_NESTED_ARRAY     Length verification is done by checking len of
    227 *                         nested header (or empty); len field is used if
    228 *                         nested_policy is also used, for the max attr
    229 *                         number in the nested policy.
    230 *    NLA_U8, NLA_U16,
    231 *    NLA_U32, NLA_U64,
    232 *    NLA_S8, NLA_S16,
    233 *    NLA_S32, NLA_S64,
    234 *    NLA_MSECS            Leaving the length field zero will verify the
    235 *                         given type fits, using it verifies minimum length
    236 *                         just like "All other"
    237 *    NLA_BITFIELD32       Unused
    238 *    NLA_REJECT           Unused
    239 *    All other            Minimum length of attribute payload
    240 *
    241 * Meaning of validation union:
    242 *    NLA_BITFIELD32       This is a 32-bit bitmap/bitselector attribute and
    243 *                         `bitfield32_valid' is the u32 value of valid flags
    244 *    NLA_REJECT           This attribute is always rejected and `reject_message'
    245 *                         may point to a string to report as the error instead
    246 *                         of the generic one in extended ACK.
    247 *    NLA_NESTED           `nested_policy' to a nested policy to validate, must
    248 *                         also set `len' to the max attribute number. Use the
    249 *                         provided NLA_POLICY_NESTED() macro.
    250 *                         Note that nla_parse() will validate, but of course not
    251 *                         parse, the nested sub-policies.
    252 *    NLA_NESTED_ARRAY     `nested_policy' points to a nested policy to validate,
    253 *                         must also set `len' to the max attribute number. Use
    254 *                         the provided NLA_POLICY_NESTED_ARRAY() macro.
    255 *                         The difference to NLA_NESTED is the structure:
    256 *                         NLA_NESTED has the nested attributes directly inside
    257 *                         while an array has the nested attributes at another
    258 *                         level down and the attribute types directly in the
    259 *                         nesting don't matter.
    260 *    NLA_U8,
    261 *    NLA_U16,
    262 *    NLA_U32,
    263 *    NLA_U64,
    264 *    NLA_S8,
    265 *    NLA_S16,
    266 *    NLA_S32,
    267 *    NLA_S64              The `min' and `max' fields are used depending on the
    268 *                         validation_type field, if that is min/max/range then
    269 *                         the min, max or both are used (respectively) to check
    270 *                         the value of the integer attribute.
    271 *                         Note that in the interest of code simplicity and
    272 *                         struct size both limits are s16, so you cannot
    273 *                         enforce a range that doesn't fall within the range
    274 *                         of s16 - do that as usual in the code instead.
    275 *                         Use the NLA_POLICY_MIN(), NLA_POLICY_MAX() and
    276 *                         NLA_POLICY_RANGE() macros.
    277 *    NLA_U8,
    278 *    NLA_U16,
    279 *    NLA_U32,
    280 *    NLA_U64              If the validation_type field instead is set to
    281 *                         NLA_VALIDATE_RANGE_PTR, `range' must be a pointer
    282 *                         to a struct netlink_range_validation that indicates
    283 *                         the min/max values.
    284 *                         Use NLA_POLICY_FULL_RANGE().
    285 *    NLA_S8,
    286 *    NLA_S16,
    287 *    NLA_S32,
    288 *    NLA_S64              If the validation_type field instead is set to
    289 *                         NLA_VALIDATE_RANGE_PTR, `range_signed' must be a
    290 *                         pointer to a struct netlink_range_validation_signed
    291 *                         that indicates the min/max values.
    292 *                         Use NLA_POLICY_FULL_RANGE_SIGNED().
    293 *
    294 *    NLA_BINARY           If the validation type is like the ones for integers
    295 *                         above, then the min/max length (not value like for
    296 *                         integers) of the attribute is enforced.
    297 *
    298 *    All other            Unused - but note that it's a union
    299 *
    300 * Meaning of `validate' field, use via NLA_POLICY_VALIDATE_FN:
    301 *    NLA_BINARY           Validation function called for the attribute.
    302 *    All other            Unused - but note that it's a union
    303 *
    304 * Example:
    305 *
    306 * static const u32 myvalidflags = 0xff231023;
    307 *
    308 * static const struct nla_policy my_policy[ATTR_MAX+1] = {
    309 * 	[ATTR_FOO] = { .type = NLA_U16 },
    310 *	[ATTR_BAR] = { .type = NLA_STRING, .len = BARSIZ },
    311 *	[ATTR_BAZ] = NLA_POLICY_EXACT_LEN(sizeof(struct mystruct)),
    312 *	[ATTR_GOO] = NLA_POLICY_BITFIELD32(myvalidflags),
    313 * };
    314 */
    315struct nla_policy {
    316	u8		type;
    317	u8		validation_type;
    318	u16		len;
    319	union {
    320		const u32 bitfield32_valid;
    321		const u32 mask;
    322		const char *reject_message;
    323		const struct nla_policy *nested_policy;
    324		struct netlink_range_validation *range;
    325		struct netlink_range_validation_signed *range_signed;
    326		struct {
    327			s16 min, max;
    328		};
    329		int (*validate)(const struct nlattr *attr,
    330				struct netlink_ext_ack *extack);
    331		/* This entry is special, and used for the attribute at index 0
    332		 * only, and specifies special data about the policy, namely it
    333		 * specifies the "boundary type" where strict length validation
    334		 * starts for any attribute types >= this value, also, strict
    335		 * nesting validation starts here.
    336		 *
    337		 * Additionally, it means that NLA_UNSPEC is actually NLA_REJECT
    338		 * for any types >= this, so need to use NLA_POLICY_MIN_LEN() to
    339		 * get the previous pure { .len = xyz } behaviour. The advantage
    340		 * of this is that types not specified in the policy will be
    341		 * rejected.
    342		 *
    343		 * For completely new families it should be set to 1 so that the
    344		 * validation is enforced for all attributes. For existing ones
    345		 * it should be set at least when new attributes are added to
    346		 * the enum used by the policy, and be set to the new value that
    347		 * was added to enforce strict validation from thereon.
    348		 */
    349		u16 strict_start_type;
    350	};
    351};
    352
    353#define NLA_POLICY_ETH_ADDR		NLA_POLICY_EXACT_LEN(ETH_ALEN)
    354#define NLA_POLICY_ETH_ADDR_COMPAT	NLA_POLICY_EXACT_LEN_WARN(ETH_ALEN)
    355
    356#define _NLA_POLICY_NESTED(maxattr, policy) \
    357	{ .type = NLA_NESTED, .nested_policy = policy, .len = maxattr }
    358#define _NLA_POLICY_NESTED_ARRAY(maxattr, policy) \
    359	{ .type = NLA_NESTED_ARRAY, .nested_policy = policy, .len = maxattr }
    360#define NLA_POLICY_NESTED(policy) \
    361	_NLA_POLICY_NESTED(ARRAY_SIZE(policy) - 1, policy)
    362#define NLA_POLICY_NESTED_ARRAY(policy) \
    363	_NLA_POLICY_NESTED_ARRAY(ARRAY_SIZE(policy) - 1, policy)
    364#define NLA_POLICY_BITFIELD32(valid) \
    365	{ .type = NLA_BITFIELD32, .bitfield32_valid = valid }
    366
    367#define __NLA_IS_UINT_TYPE(tp)						\
    368	(tp == NLA_U8 || tp == NLA_U16 || tp == NLA_U32 || tp == NLA_U64)
    369#define __NLA_IS_SINT_TYPE(tp)						\
    370	(tp == NLA_S8 || tp == NLA_S16 || tp == NLA_S32 || tp == NLA_S64)
    371
    372#define __NLA_ENSURE(condition) BUILD_BUG_ON_ZERO(!(condition))
    373#define NLA_ENSURE_UINT_TYPE(tp)			\
    374	(__NLA_ENSURE(__NLA_IS_UINT_TYPE(tp)) + tp)
    375#define NLA_ENSURE_UINT_OR_BINARY_TYPE(tp)		\
    376	(__NLA_ENSURE(__NLA_IS_UINT_TYPE(tp) ||	\
    377		      tp == NLA_MSECS ||		\
    378		      tp == NLA_BINARY) + tp)
    379#define NLA_ENSURE_SINT_TYPE(tp)			\
    380	(__NLA_ENSURE(__NLA_IS_SINT_TYPE(tp)) + tp)
    381#define NLA_ENSURE_INT_OR_BINARY_TYPE(tp)		\
    382	(__NLA_ENSURE(__NLA_IS_UINT_TYPE(tp) ||		\
    383		      __NLA_IS_SINT_TYPE(tp) ||		\
    384		      tp == NLA_MSECS ||		\
    385		      tp == NLA_BINARY) + tp)
    386#define NLA_ENSURE_NO_VALIDATION_PTR(tp)		\
    387	(__NLA_ENSURE(tp != NLA_BITFIELD32 &&		\
    388		      tp != NLA_REJECT &&		\
    389		      tp != NLA_NESTED &&		\
    390		      tp != NLA_NESTED_ARRAY) + tp)
    391
    392#define NLA_POLICY_RANGE(tp, _min, _max) {		\
    393	.type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp),	\
    394	.validation_type = NLA_VALIDATE_RANGE,		\
    395	.min = _min,					\
    396	.max = _max					\
    397}
    398
    399#define NLA_POLICY_FULL_RANGE(tp, _range) {		\
    400	.type = NLA_ENSURE_UINT_OR_BINARY_TYPE(tp),	\
    401	.validation_type = NLA_VALIDATE_RANGE_PTR,	\
    402	.range = _range,				\
    403}
    404
    405#define NLA_POLICY_FULL_RANGE_SIGNED(tp, _range) {	\
    406	.type = NLA_ENSURE_SINT_TYPE(tp),		\
    407	.validation_type = NLA_VALIDATE_RANGE_PTR,	\
    408	.range_signed = _range,				\
    409}
    410
    411#define NLA_POLICY_MIN(tp, _min) {			\
    412	.type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp),	\
    413	.validation_type = NLA_VALIDATE_MIN,		\
    414	.min = _min,					\
    415}
    416
    417#define NLA_POLICY_MAX(tp, _max) {			\
    418	.type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp),	\
    419	.validation_type = NLA_VALIDATE_MAX,		\
    420	.max = _max,					\
    421}
    422
    423#define NLA_POLICY_MASK(tp, _mask) {			\
    424	.type = NLA_ENSURE_UINT_TYPE(tp),		\
    425	.validation_type = NLA_VALIDATE_MASK,		\
    426	.mask = _mask,					\
    427}
    428
    429#define NLA_POLICY_VALIDATE_FN(tp, fn, ...) {		\
    430	.type = NLA_ENSURE_NO_VALIDATION_PTR(tp),	\
    431	.validation_type = NLA_VALIDATE_FUNCTION,	\
    432	.validate = fn,					\
    433	.len = __VA_ARGS__ + 0,				\
    434}
    435
    436#define NLA_POLICY_EXACT_LEN(_len)	NLA_POLICY_RANGE(NLA_BINARY, _len, _len)
    437#define NLA_POLICY_EXACT_LEN_WARN(_len) {			\
    438	.type = NLA_BINARY,					\
    439	.validation_type = NLA_VALIDATE_RANGE_WARN_TOO_LONG,	\
    440	.min = _len,						\
    441	.max = _len						\
    442}
    443#define NLA_POLICY_MIN_LEN(_len)	NLA_POLICY_MIN(NLA_BINARY, _len)
    444
    445/**
    446 * struct nl_info - netlink source information
    447 * @nlh: Netlink message header of original request
    448 * @nl_net: Network namespace
    449 * @portid: Netlink PORTID of requesting application
    450 * @skip_notify: Skip netlink notifications to user space
    451 * @skip_notify_kernel: Skip selected in-kernel notifications
    452 */
    453struct nl_info {
    454	struct nlmsghdr		*nlh;
    455	struct net		*nl_net;
    456	u32			portid;
    457	u8			skip_notify:1,
    458				skip_notify_kernel:1;
    459};
    460
    461/**
    462 * enum netlink_validation - netlink message/attribute validation levels
    463 * @NL_VALIDATE_LIBERAL: Old-style "be liberal" validation, not caring about
    464 *	extra data at the end of the message, attributes being longer than
    465 *	they should be, or unknown attributes being present.
    466 * @NL_VALIDATE_TRAILING: Reject junk data encountered after attribute parsing.
    467 * @NL_VALIDATE_MAXTYPE: Reject attributes > max type; Together with _TRAILING
    468 *	this is equivalent to the old nla_parse_strict()/nlmsg_parse_strict().
    469 * @NL_VALIDATE_UNSPEC: Reject attributes with NLA_UNSPEC in the policy.
    470 *	This can safely be set by the kernel when the given policy has no
    471 *	NLA_UNSPEC anymore, and can thus be used to ensure policy entries
    472 *	are enforced going forward.
    473 * @NL_VALIDATE_STRICT_ATTRS: strict attribute policy parsing (e.g.
    474 *	U8, U16, U32 must have exact size, etc.)
    475 * @NL_VALIDATE_NESTED: Check that NLA_F_NESTED is set for NLA_NESTED(_ARRAY)
    476 *	and unset for other policies.
    477 */
    478enum netlink_validation {
    479	NL_VALIDATE_LIBERAL = 0,
    480	NL_VALIDATE_TRAILING = BIT(0),
    481	NL_VALIDATE_MAXTYPE = BIT(1),
    482	NL_VALIDATE_UNSPEC = BIT(2),
    483	NL_VALIDATE_STRICT_ATTRS = BIT(3),
    484	NL_VALIDATE_NESTED = BIT(4),
    485};
    486
    487#define NL_VALIDATE_DEPRECATED_STRICT (NL_VALIDATE_TRAILING |\
    488				       NL_VALIDATE_MAXTYPE)
    489#define NL_VALIDATE_STRICT (NL_VALIDATE_TRAILING |\
    490			    NL_VALIDATE_MAXTYPE |\
    491			    NL_VALIDATE_UNSPEC |\
    492			    NL_VALIDATE_STRICT_ATTRS |\
    493			    NL_VALIDATE_NESTED)
    494
    495int netlink_rcv_skb(struct sk_buff *skb,
    496		    int (*cb)(struct sk_buff *, struct nlmsghdr *,
    497			      struct netlink_ext_ack *));
    498int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 portid,
    499		 unsigned int group, int report, gfp_t flags);
    500
    501int __nla_validate(const struct nlattr *head, int len, int maxtype,
    502		   const struct nla_policy *policy, unsigned int validate,
    503		   struct netlink_ext_ack *extack);
    504int __nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head,
    505		int len, const struct nla_policy *policy, unsigned int validate,
    506		struct netlink_ext_ack *extack);
    507int nla_policy_len(const struct nla_policy *, int);
    508struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype);
    509ssize_t nla_strscpy(char *dst, const struct nlattr *nla, size_t dstsize);
    510char *nla_strdup(const struct nlattr *nla, gfp_t flags);
    511int nla_memcpy(void *dest, const struct nlattr *src, int count);
    512int nla_memcmp(const struct nlattr *nla, const void *data, size_t size);
    513int nla_strcmp(const struct nlattr *nla, const char *str);
    514struct nlattr *__nla_reserve(struct sk_buff *skb, int attrtype, int attrlen);
    515struct nlattr *__nla_reserve_64bit(struct sk_buff *skb, int attrtype,
    516				   int attrlen, int padattr);
    517void *__nla_reserve_nohdr(struct sk_buff *skb, int attrlen);
    518struct nlattr *nla_reserve(struct sk_buff *skb, int attrtype, int attrlen);
    519struct nlattr *nla_reserve_64bit(struct sk_buff *skb, int attrtype,
    520				 int attrlen, int padattr);
    521void *nla_reserve_nohdr(struct sk_buff *skb, int attrlen);
    522void __nla_put(struct sk_buff *skb, int attrtype, int attrlen,
    523	       const void *data);
    524void __nla_put_64bit(struct sk_buff *skb, int attrtype, int attrlen,
    525		     const void *data, int padattr);
    526void __nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data);
    527int nla_put(struct sk_buff *skb, int attrtype, int attrlen, const void *data);
    528int nla_put_64bit(struct sk_buff *skb, int attrtype, int attrlen,
    529		  const void *data, int padattr);
    530int nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data);
    531int nla_append(struct sk_buff *skb, int attrlen, const void *data);
    532
    533/**************************************************************************
    534 * Netlink Messages
    535 **************************************************************************/
    536
    537/**
    538 * nlmsg_msg_size - length of netlink message not including padding
    539 * @payload: length of message payload
    540 */
    541static inline int nlmsg_msg_size(int payload)
    542{
    543	return NLMSG_HDRLEN + payload;
    544}
    545
    546/**
    547 * nlmsg_total_size - length of netlink message including padding
    548 * @payload: length of message payload
    549 */
    550static inline int nlmsg_total_size(int payload)
    551{
    552	return NLMSG_ALIGN(nlmsg_msg_size(payload));
    553}
    554
    555/**
    556 * nlmsg_padlen - length of padding at the message's tail
    557 * @payload: length of message payload
    558 */
    559static inline int nlmsg_padlen(int payload)
    560{
    561	return nlmsg_total_size(payload) - nlmsg_msg_size(payload);
    562}
    563
    564/**
    565 * nlmsg_data - head of message payload
    566 * @nlh: netlink message header
    567 */
    568static inline void *nlmsg_data(const struct nlmsghdr *nlh)
    569{
    570	return (unsigned char *) nlh + NLMSG_HDRLEN;
    571}
    572
    573/**
    574 * nlmsg_len - length of message payload
    575 * @nlh: netlink message header
    576 */
    577static inline int nlmsg_len(const struct nlmsghdr *nlh)
    578{
    579	return nlh->nlmsg_len - NLMSG_HDRLEN;
    580}
    581
    582/**
    583 * nlmsg_attrdata - head of attributes data
    584 * @nlh: netlink message header
    585 * @hdrlen: length of family specific header
    586 */
    587static inline struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh,
    588					    int hdrlen)
    589{
    590	unsigned char *data = nlmsg_data(nlh);
    591	return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen));
    592}
    593
    594/**
    595 * nlmsg_attrlen - length of attributes data
    596 * @nlh: netlink message header
    597 * @hdrlen: length of family specific header
    598 */
    599static inline int nlmsg_attrlen(const struct nlmsghdr *nlh, int hdrlen)
    600{
    601	return nlmsg_len(nlh) - NLMSG_ALIGN(hdrlen);
    602}
    603
    604/**
    605 * nlmsg_ok - check if the netlink message fits into the remaining bytes
    606 * @nlh: netlink message header
    607 * @remaining: number of bytes remaining in message stream
    608 */
    609static inline int nlmsg_ok(const struct nlmsghdr *nlh, int remaining)
    610{
    611	return (remaining >= (int) sizeof(struct nlmsghdr) &&
    612		nlh->nlmsg_len >= sizeof(struct nlmsghdr) &&
    613		nlh->nlmsg_len <= remaining);
    614}
    615
    616/**
    617 * nlmsg_next - next netlink message in message stream
    618 * @nlh: netlink message header
    619 * @remaining: number of bytes remaining in message stream
    620 *
    621 * Returns the next netlink message in the message stream and
    622 * decrements remaining by the size of the current message.
    623 */
    624static inline struct nlmsghdr *
    625nlmsg_next(const struct nlmsghdr *nlh, int *remaining)
    626{
    627	int totlen = NLMSG_ALIGN(nlh->nlmsg_len);
    628
    629	*remaining -= totlen;
    630
    631	return (struct nlmsghdr *) ((unsigned char *) nlh + totlen);
    632}
    633
    634/**
    635 * nla_parse - Parse a stream of attributes into a tb buffer
    636 * @tb: destination array with maxtype+1 elements
    637 * @maxtype: maximum attribute type to be expected
    638 * @head: head of attribute stream
    639 * @len: length of attribute stream
    640 * @policy: validation policy
    641 * @extack: extended ACK pointer
    642 *
    643 * Parses a stream of attributes and stores a pointer to each attribute in
    644 * the tb array accessible via the attribute type. Attributes with a type
    645 * exceeding maxtype will be rejected, policy must be specified, attributes
    646 * will be validated in the strictest way possible.
    647 *
    648 * Returns 0 on success or a negative error code.
    649 */
    650static inline int nla_parse(struct nlattr **tb, int maxtype,
    651			    const struct nlattr *head, int len,
    652			    const struct nla_policy *policy,
    653			    struct netlink_ext_ack *extack)
    654{
    655	return __nla_parse(tb, maxtype, head, len, policy,
    656			   NL_VALIDATE_STRICT, extack);
    657}
    658
    659/**
    660 * nla_parse_deprecated - Parse a stream of attributes into a tb buffer
    661 * @tb: destination array with maxtype+1 elements
    662 * @maxtype: maximum attribute type to be expected
    663 * @head: head of attribute stream
    664 * @len: length of attribute stream
    665 * @policy: validation policy
    666 * @extack: extended ACK pointer
    667 *
    668 * Parses a stream of attributes and stores a pointer to each attribute in
    669 * the tb array accessible via the attribute type. Attributes with a type
    670 * exceeding maxtype will be ignored and attributes from the policy are not
    671 * always strictly validated (only for new attributes).
    672 *
    673 * Returns 0 on success or a negative error code.
    674 */
    675static inline int nla_parse_deprecated(struct nlattr **tb, int maxtype,
    676				       const struct nlattr *head, int len,
    677				       const struct nla_policy *policy,
    678				       struct netlink_ext_ack *extack)
    679{
    680	return __nla_parse(tb, maxtype, head, len, policy,
    681			   NL_VALIDATE_LIBERAL, extack);
    682}
    683
    684/**
    685 * nla_parse_deprecated_strict - Parse a stream of attributes into a tb buffer
    686 * @tb: destination array with maxtype+1 elements
    687 * @maxtype: maximum attribute type to be expected
    688 * @head: head of attribute stream
    689 * @len: length of attribute stream
    690 * @policy: validation policy
    691 * @extack: extended ACK pointer
    692 *
    693 * Parses a stream of attributes and stores a pointer to each attribute in
    694 * the tb array accessible via the attribute type. Attributes with a type
    695 * exceeding maxtype will be rejected as well as trailing data, but the
    696 * policy is not completely strictly validated (only for new attributes).
    697 *
    698 * Returns 0 on success or a negative error code.
    699 */
    700static inline int nla_parse_deprecated_strict(struct nlattr **tb, int maxtype,
    701					      const struct nlattr *head,
    702					      int len,
    703					      const struct nla_policy *policy,
    704					      struct netlink_ext_ack *extack)
    705{
    706	return __nla_parse(tb, maxtype, head, len, policy,
    707			   NL_VALIDATE_DEPRECATED_STRICT, extack);
    708}
    709
    710/**
    711 * __nlmsg_parse - parse attributes of a netlink message
    712 * @nlh: netlink message header
    713 * @hdrlen: length of family specific header
    714 * @tb: destination array with maxtype+1 elements
    715 * @maxtype: maximum attribute type to be expected
    716 * @policy: validation policy
    717 * @validate: validation strictness
    718 * @extack: extended ACK report struct
    719 *
    720 * See nla_parse()
    721 */
    722static inline int __nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen,
    723				struct nlattr *tb[], int maxtype,
    724				const struct nla_policy *policy,
    725				unsigned int validate,
    726				struct netlink_ext_ack *extack)
    727{
    728	if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) {
    729		NL_SET_ERR_MSG(extack, "Invalid header length");
    730		return -EINVAL;
    731	}
    732
    733	return __nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen),
    734			   nlmsg_attrlen(nlh, hdrlen), policy, validate,
    735			   extack);
    736}
    737
    738/**
    739 * nlmsg_parse - parse attributes of a netlink message
    740 * @nlh: netlink message header
    741 * @hdrlen: length of family specific header
    742 * @tb: destination array with maxtype+1 elements
    743 * @maxtype: maximum attribute type to be expected
    744 * @extack: extended ACK report struct
    745 *
    746 * See nla_parse()
    747 */
    748static inline int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen,
    749			      struct nlattr *tb[], int maxtype,
    750			      const struct nla_policy *policy,
    751			      struct netlink_ext_ack *extack)
    752{
    753	return __nlmsg_parse(nlh, hdrlen, tb, maxtype, policy,
    754			     NL_VALIDATE_STRICT, extack);
    755}
    756
    757/**
    758 * nlmsg_parse_deprecated - parse attributes of a netlink message
    759 * @nlh: netlink message header
    760 * @hdrlen: length of family specific header
    761 * @tb: destination array with maxtype+1 elements
    762 * @maxtype: maximum attribute type to be expected
    763 * @extack: extended ACK report struct
    764 *
    765 * See nla_parse_deprecated()
    766 */
    767static inline int nlmsg_parse_deprecated(const struct nlmsghdr *nlh, int hdrlen,
    768					 struct nlattr *tb[], int maxtype,
    769					 const struct nla_policy *policy,
    770					 struct netlink_ext_ack *extack)
    771{
    772	return __nlmsg_parse(nlh, hdrlen, tb, maxtype, policy,
    773			     NL_VALIDATE_LIBERAL, extack);
    774}
    775
    776/**
    777 * nlmsg_parse_deprecated_strict - parse attributes of a netlink message
    778 * @nlh: netlink message header
    779 * @hdrlen: length of family specific header
    780 * @tb: destination array with maxtype+1 elements
    781 * @maxtype: maximum attribute type to be expected
    782 * @extack: extended ACK report struct
    783 *
    784 * See nla_parse_deprecated_strict()
    785 */
    786static inline int
    787nlmsg_parse_deprecated_strict(const struct nlmsghdr *nlh, int hdrlen,
    788			      struct nlattr *tb[], int maxtype,
    789			      const struct nla_policy *policy,
    790			      struct netlink_ext_ack *extack)
    791{
    792	return __nlmsg_parse(nlh, hdrlen, tb, maxtype, policy,
    793			     NL_VALIDATE_DEPRECATED_STRICT, extack);
    794}
    795
    796/**
    797 * nlmsg_find_attr - find a specific attribute in a netlink message
    798 * @nlh: netlink message header
    799 * @hdrlen: length of familiy specific header
    800 * @attrtype: type of attribute to look for
    801 *
    802 * Returns the first attribute which matches the specified type.
    803 */
    804static inline struct nlattr *nlmsg_find_attr(const struct nlmsghdr *nlh,
    805					     int hdrlen, int attrtype)
    806{
    807	return nla_find(nlmsg_attrdata(nlh, hdrlen),
    808			nlmsg_attrlen(nlh, hdrlen), attrtype);
    809}
    810
    811/**
    812 * nla_validate_deprecated - Validate a stream of attributes
    813 * @head: head of attribute stream
    814 * @len: length of attribute stream
    815 * @maxtype: maximum attribute type to be expected
    816 * @policy: validation policy
    817 * @validate: validation strictness
    818 * @extack: extended ACK report struct
    819 *
    820 * Validates all attributes in the specified attribute stream against the
    821 * specified policy. Validation is done in liberal mode.
    822 * See documenation of struct nla_policy for more details.
    823 *
    824 * Returns 0 on success or a negative error code.
    825 */
    826static inline int nla_validate_deprecated(const struct nlattr *head, int len,
    827					  int maxtype,
    828					  const struct nla_policy *policy,
    829					  struct netlink_ext_ack *extack)
    830{
    831	return __nla_validate(head, len, maxtype, policy, NL_VALIDATE_LIBERAL,
    832			      extack);
    833}
    834
    835/**
    836 * nla_validate - Validate a stream of attributes
    837 * @head: head of attribute stream
    838 * @len: length of attribute stream
    839 * @maxtype: maximum attribute type to be expected
    840 * @policy: validation policy
    841 * @extack: extended ACK report struct
    842 *
    843 * Validates all attributes in the specified attribute stream against the
    844 * specified policy. Validation is done in strict mode.
    845 * See documenation of struct nla_policy for more details.
    846 *
    847 * Returns 0 on success or a negative error code.
    848 */
    849static inline int nla_validate(const struct nlattr *head, int len, int maxtype,
    850			       const struct nla_policy *policy,
    851			       struct netlink_ext_ack *extack)
    852{
    853	return __nla_validate(head, len, maxtype, policy, NL_VALIDATE_STRICT,
    854			      extack);
    855}
    856
    857/**
    858 * nlmsg_validate_deprecated - validate a netlink message including attributes
    859 * @nlh: netlinket message header
    860 * @hdrlen: length of familiy specific header
    861 * @maxtype: maximum attribute type to be expected
    862 * @policy: validation policy
    863 * @extack: extended ACK report struct
    864 */
    865static inline int nlmsg_validate_deprecated(const struct nlmsghdr *nlh,
    866					    int hdrlen, int maxtype,
    867					    const struct nla_policy *policy,
    868					    struct netlink_ext_ack *extack)
    869{
    870	if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen))
    871		return -EINVAL;
    872
    873	return __nla_validate(nlmsg_attrdata(nlh, hdrlen),
    874			      nlmsg_attrlen(nlh, hdrlen), maxtype,
    875			      policy, NL_VALIDATE_LIBERAL, extack);
    876}
    877
    878
    879
    880/**
    881 * nlmsg_report - need to report back to application?
    882 * @nlh: netlink message header
    883 *
    884 * Returns 1 if a report back to the application is requested.
    885 */
    886static inline int nlmsg_report(const struct nlmsghdr *nlh)
    887{
    888	return nlh ? !!(nlh->nlmsg_flags & NLM_F_ECHO) : 0;
    889}
    890
    891/**
    892 * nlmsg_for_each_attr - iterate over a stream of attributes
    893 * @pos: loop counter, set to current attribute
    894 * @nlh: netlink message header
    895 * @hdrlen: length of familiy specific header
    896 * @rem: initialized to len, holds bytes currently remaining in stream
    897 */
    898#define nlmsg_for_each_attr(pos, nlh, hdrlen, rem) \
    899	nla_for_each_attr(pos, nlmsg_attrdata(nlh, hdrlen), \
    900			  nlmsg_attrlen(nlh, hdrlen), rem)
    901
    902/**
    903 * nlmsg_put - Add a new netlink message to an skb
    904 * @skb: socket buffer to store message in
    905 * @portid: netlink PORTID of requesting application
    906 * @seq: sequence number of message
    907 * @type: message type
    908 * @payload: length of message payload
    909 * @flags: message flags
    910 *
    911 * Returns NULL if the tailroom of the skb is insufficient to store
    912 * the message header and payload.
    913 */
    914static inline struct nlmsghdr *nlmsg_put(struct sk_buff *skb, u32 portid, u32 seq,
    915					 int type, int payload, int flags)
    916{
    917	if (unlikely(skb_tailroom(skb) < nlmsg_total_size(payload)))
    918		return NULL;
    919
    920	return __nlmsg_put(skb, portid, seq, type, payload, flags);
    921}
    922
    923/**
    924 * nlmsg_put_answer - Add a new callback based netlink message to an skb
    925 * @skb: socket buffer to store message in
    926 * @cb: netlink callback
    927 * @type: message type
    928 * @payload: length of message payload
    929 * @flags: message flags
    930 *
    931 * Returns NULL if the tailroom of the skb is insufficient to store
    932 * the message header and payload.
    933 */
    934static inline struct nlmsghdr *nlmsg_put_answer(struct sk_buff *skb,
    935						struct netlink_callback *cb,
    936						int type, int payload,
    937						int flags)
    938{
    939	return nlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
    940			 type, payload, flags);
    941}
    942
    943/**
    944 * nlmsg_new - Allocate a new netlink message
    945 * @payload: size of the message payload
    946 * @flags: the type of memory to allocate.
    947 *
    948 * Use NLMSG_DEFAULT_SIZE if the size of the payload isn't known
    949 * and a good default is needed.
    950 */
    951static inline struct sk_buff *nlmsg_new(size_t payload, gfp_t flags)
    952{
    953	return alloc_skb(nlmsg_total_size(payload), flags);
    954}
    955
    956/**
    957 * nlmsg_end - Finalize a netlink message
    958 * @skb: socket buffer the message is stored in
    959 * @nlh: netlink message header
    960 *
    961 * Corrects the netlink message header to include the appeneded
    962 * attributes. Only necessary if attributes have been added to
    963 * the message.
    964 */
    965static inline void nlmsg_end(struct sk_buff *skb, struct nlmsghdr *nlh)
    966{
    967	nlh->nlmsg_len = skb_tail_pointer(skb) - (unsigned char *)nlh;
    968}
    969
    970/**
    971 * nlmsg_get_pos - return current position in netlink message
    972 * @skb: socket buffer the message is stored in
    973 *
    974 * Returns a pointer to the current tail of the message.
    975 */
    976static inline void *nlmsg_get_pos(struct sk_buff *skb)
    977{
    978	return skb_tail_pointer(skb);
    979}
    980
    981/**
    982 * nlmsg_trim - Trim message to a mark
    983 * @skb: socket buffer the message is stored in
    984 * @mark: mark to trim to
    985 *
    986 * Trims the message to the provided mark.
    987 */
    988static inline void nlmsg_trim(struct sk_buff *skb, const void *mark)
    989{
    990	if (mark) {
    991		WARN_ON((unsigned char *) mark < skb->data);
    992		skb_trim(skb, (unsigned char *) mark - skb->data);
    993	}
    994}
    995
    996/**
    997 * nlmsg_cancel - Cancel construction of a netlink message
    998 * @skb: socket buffer the message is stored in
    999 * @nlh: netlink message header
   1000 *
   1001 * Removes the complete netlink message including all
   1002 * attributes from the socket buffer again.
   1003 */
   1004static inline void nlmsg_cancel(struct sk_buff *skb, struct nlmsghdr *nlh)
   1005{
   1006	nlmsg_trim(skb, nlh);
   1007}
   1008
   1009/**
   1010 * nlmsg_free - free a netlink message
   1011 * @skb: socket buffer of netlink message
   1012 */
   1013static inline void nlmsg_free(struct sk_buff *skb)
   1014{
   1015	kfree_skb(skb);
   1016}
   1017
   1018/**
   1019 * nlmsg_multicast - multicast a netlink message
   1020 * @sk: netlink socket to spread messages to
   1021 * @skb: netlink message as socket buffer
   1022 * @portid: own netlink portid to avoid sending to yourself
   1023 * @group: multicast group id
   1024 * @flags: allocation flags
   1025 */
   1026static inline int nlmsg_multicast(struct sock *sk, struct sk_buff *skb,
   1027				  u32 portid, unsigned int group, gfp_t flags)
   1028{
   1029	int err;
   1030
   1031	NETLINK_CB(skb).dst_group = group;
   1032
   1033	err = netlink_broadcast(sk, skb, portid, group, flags);
   1034	if (err > 0)
   1035		err = 0;
   1036
   1037	return err;
   1038}
   1039
   1040/**
   1041 * nlmsg_unicast - unicast a netlink message
   1042 * @sk: netlink socket to spread message to
   1043 * @skb: netlink message as socket buffer
   1044 * @portid: netlink portid of the destination socket
   1045 */
   1046static inline int nlmsg_unicast(struct sock *sk, struct sk_buff *skb, u32 portid)
   1047{
   1048	int err;
   1049
   1050	err = netlink_unicast(sk, skb, portid, MSG_DONTWAIT);
   1051	if (err > 0)
   1052		err = 0;
   1053
   1054	return err;
   1055}
   1056
   1057/**
   1058 * nlmsg_for_each_msg - iterate over a stream of messages
   1059 * @pos: loop counter, set to current message
   1060 * @head: head of message stream
   1061 * @len: length of message stream
   1062 * @rem: initialized to len, holds bytes currently remaining in stream
   1063 */
   1064#define nlmsg_for_each_msg(pos, head, len, rem) \
   1065	for (pos = head, rem = len; \
   1066	     nlmsg_ok(pos, rem); \
   1067	     pos = nlmsg_next(pos, &(rem)))
   1068
   1069/**
   1070 * nl_dump_check_consistent - check if sequence is consistent and advertise if not
   1071 * @cb: netlink callback structure that stores the sequence number
   1072 * @nlh: netlink message header to write the flag to
   1073 *
   1074 * This function checks if the sequence (generation) number changed during dump
   1075 * and if it did, advertises it in the netlink message header.
   1076 *
   1077 * The correct way to use it is to set cb->seq to the generation counter when
   1078 * all locks for dumping have been acquired, and then call this function for
   1079 * each message that is generated.
   1080 *
   1081 * Note that due to initialisation concerns, 0 is an invalid sequence number
   1082 * and must not be used by code that uses this functionality.
   1083 */
   1084static inline void
   1085nl_dump_check_consistent(struct netlink_callback *cb,
   1086			 struct nlmsghdr *nlh)
   1087{
   1088	if (cb->prev_seq && cb->seq != cb->prev_seq)
   1089		nlh->nlmsg_flags |= NLM_F_DUMP_INTR;
   1090	cb->prev_seq = cb->seq;
   1091}
   1092
   1093/**************************************************************************
   1094 * Netlink Attributes
   1095 **************************************************************************/
   1096
   1097/**
   1098 * nla_attr_size - length of attribute not including padding
   1099 * @payload: length of payload
   1100 */
   1101static inline int nla_attr_size(int payload)
   1102{
   1103	return NLA_HDRLEN + payload;
   1104}
   1105
   1106/**
   1107 * nla_total_size - total length of attribute including padding
   1108 * @payload: length of payload
   1109 */
   1110static inline int nla_total_size(int payload)
   1111{
   1112	return NLA_ALIGN(nla_attr_size(payload));
   1113}
   1114
   1115/**
   1116 * nla_padlen - length of padding at the tail of attribute
   1117 * @payload: length of payload
   1118 */
   1119static inline int nla_padlen(int payload)
   1120{
   1121	return nla_total_size(payload) - nla_attr_size(payload);
   1122}
   1123
   1124/**
   1125 * nla_type - attribute type
   1126 * @nla: netlink attribute
   1127 */
   1128static inline int nla_type(const struct nlattr *nla)
   1129{
   1130	return nla->nla_type & NLA_TYPE_MASK;
   1131}
   1132
   1133/**
   1134 * nla_data - head of payload
   1135 * @nla: netlink attribute
   1136 */
   1137static inline void *nla_data(const struct nlattr *nla)
   1138{
   1139	return (char *) nla + NLA_HDRLEN;
   1140}
   1141
   1142/**
   1143 * nla_len - length of payload
   1144 * @nla: netlink attribute
   1145 */
   1146static inline int nla_len(const struct nlattr *nla)
   1147{
   1148	return nla->nla_len - NLA_HDRLEN;
   1149}
   1150
   1151/**
   1152 * nla_ok - check if the netlink attribute fits into the remaining bytes
   1153 * @nla: netlink attribute
   1154 * @remaining: number of bytes remaining in attribute stream
   1155 */
   1156static inline int nla_ok(const struct nlattr *nla, int remaining)
   1157{
   1158	return remaining >= (int) sizeof(*nla) &&
   1159	       nla->nla_len >= sizeof(*nla) &&
   1160	       nla->nla_len <= remaining;
   1161}
   1162
   1163/**
   1164 * nla_next - next netlink attribute in attribute stream
   1165 * @nla: netlink attribute
   1166 * @remaining: number of bytes remaining in attribute stream
   1167 *
   1168 * Returns the next netlink attribute in the attribute stream and
   1169 * decrements remaining by the size of the current attribute.
   1170 */
   1171static inline struct nlattr *nla_next(const struct nlattr *nla, int *remaining)
   1172{
   1173	unsigned int totlen = NLA_ALIGN(nla->nla_len);
   1174
   1175	*remaining -= totlen;
   1176	return (struct nlattr *) ((char *) nla + totlen);
   1177}
   1178
   1179/**
   1180 * nla_find_nested - find attribute in a set of nested attributes
   1181 * @nla: attribute containing the nested attributes
   1182 * @attrtype: type of attribute to look for
   1183 *
   1184 * Returns the first attribute which matches the specified type.
   1185 */
   1186static inline struct nlattr *
   1187nla_find_nested(const struct nlattr *nla, int attrtype)
   1188{
   1189	return nla_find(nla_data(nla), nla_len(nla), attrtype);
   1190}
   1191
   1192/**
   1193 * nla_parse_nested - parse nested attributes
   1194 * @tb: destination array with maxtype+1 elements
   1195 * @maxtype: maximum attribute type to be expected
   1196 * @nla: attribute containing the nested attributes
   1197 * @policy: validation policy
   1198 * @extack: extended ACK report struct
   1199 *
   1200 * See nla_parse()
   1201 */
   1202static inline int nla_parse_nested(struct nlattr *tb[], int maxtype,
   1203				   const struct nlattr *nla,
   1204				   const struct nla_policy *policy,
   1205				   struct netlink_ext_ack *extack)
   1206{
   1207	if (!(nla->nla_type & NLA_F_NESTED)) {
   1208		NL_SET_ERR_MSG_ATTR(extack, nla, "NLA_F_NESTED is missing");
   1209		return -EINVAL;
   1210	}
   1211
   1212	return __nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy,
   1213			   NL_VALIDATE_STRICT, extack);
   1214}
   1215
   1216/**
   1217 * nla_parse_nested_deprecated - parse nested attributes
   1218 * @tb: destination array with maxtype+1 elements
   1219 * @maxtype: maximum attribute type to be expected
   1220 * @nla: attribute containing the nested attributes
   1221 * @policy: validation policy
   1222 * @extack: extended ACK report struct
   1223 *
   1224 * See nla_parse_deprecated()
   1225 */
   1226static inline int nla_parse_nested_deprecated(struct nlattr *tb[], int maxtype,
   1227					      const struct nlattr *nla,
   1228					      const struct nla_policy *policy,
   1229					      struct netlink_ext_ack *extack)
   1230{
   1231	return __nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy,
   1232			   NL_VALIDATE_LIBERAL, extack);
   1233}
   1234
   1235/**
   1236 * nla_put_u8 - Add a u8 netlink attribute to a socket buffer
   1237 * @skb: socket buffer to add attribute to
   1238 * @attrtype: attribute type
   1239 * @value: numeric value
   1240 */
   1241static inline int nla_put_u8(struct sk_buff *skb, int attrtype, u8 value)
   1242{
   1243	/* temporary variables to work around GCC PR81715 with asan-stack=1 */
   1244	u8 tmp = value;
   1245
   1246	return nla_put(skb, attrtype, sizeof(u8), &tmp);
   1247}
   1248
   1249/**
   1250 * nla_put_u16 - Add a u16 netlink attribute to a socket buffer
   1251 * @skb: socket buffer to add attribute to
   1252 * @attrtype: attribute type
   1253 * @value: numeric value
   1254 */
   1255static inline int nla_put_u16(struct sk_buff *skb, int attrtype, u16 value)
   1256{
   1257	u16 tmp = value;
   1258
   1259	return nla_put(skb, attrtype, sizeof(u16), &tmp);
   1260}
   1261
   1262/**
   1263 * nla_put_be16 - Add a __be16 netlink attribute to a socket buffer
   1264 * @skb: socket buffer to add attribute to
   1265 * @attrtype: attribute type
   1266 * @value: numeric value
   1267 */
   1268static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value)
   1269{
   1270	__be16 tmp = value;
   1271
   1272	return nla_put(skb, attrtype, sizeof(__be16), &tmp);
   1273}
   1274
   1275/**
   1276 * nla_put_net16 - Add 16-bit network byte order netlink attribute to a socket buffer
   1277 * @skb: socket buffer to add attribute to
   1278 * @attrtype: attribute type
   1279 * @value: numeric value
   1280 */
   1281static inline int nla_put_net16(struct sk_buff *skb, int attrtype, __be16 value)
   1282{
   1283	__be16 tmp = value;
   1284
   1285	return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
   1286}
   1287
   1288/**
   1289 * nla_put_le16 - Add a __le16 netlink attribute to a socket buffer
   1290 * @skb: socket buffer to add attribute to
   1291 * @attrtype: attribute type
   1292 * @value: numeric value
   1293 */
   1294static inline int nla_put_le16(struct sk_buff *skb, int attrtype, __le16 value)
   1295{
   1296	__le16 tmp = value;
   1297
   1298	return nla_put(skb, attrtype, sizeof(__le16), &tmp);
   1299}
   1300
   1301/**
   1302 * nla_put_u32 - Add a u32 netlink attribute to a socket buffer
   1303 * @skb: socket buffer to add attribute to
   1304 * @attrtype: attribute type
   1305 * @value: numeric value
   1306 */
   1307static inline int nla_put_u32(struct sk_buff *skb, int attrtype, u32 value)
   1308{
   1309	u32 tmp = value;
   1310
   1311	return nla_put(skb, attrtype, sizeof(u32), &tmp);
   1312}
   1313
   1314/**
   1315 * nla_put_be32 - Add a __be32 netlink attribute to a socket buffer
   1316 * @skb: socket buffer to add attribute to
   1317 * @attrtype: attribute type
   1318 * @value: numeric value
   1319 */
   1320static inline int nla_put_be32(struct sk_buff *skb, int attrtype, __be32 value)
   1321{
   1322	__be32 tmp = value;
   1323
   1324	return nla_put(skb, attrtype, sizeof(__be32), &tmp);
   1325}
   1326
   1327/**
   1328 * nla_put_net32 - Add 32-bit network byte order netlink attribute to a socket buffer
   1329 * @skb: socket buffer to add attribute to
   1330 * @attrtype: attribute type
   1331 * @value: numeric value
   1332 */
   1333static inline int nla_put_net32(struct sk_buff *skb, int attrtype, __be32 value)
   1334{
   1335	__be32 tmp = value;
   1336
   1337	return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
   1338}
   1339
   1340/**
   1341 * nla_put_le32 - Add a __le32 netlink attribute to a socket buffer
   1342 * @skb: socket buffer to add attribute to
   1343 * @attrtype: attribute type
   1344 * @value: numeric value
   1345 */
   1346static inline int nla_put_le32(struct sk_buff *skb, int attrtype, __le32 value)
   1347{
   1348	__le32 tmp = value;
   1349
   1350	return nla_put(skb, attrtype, sizeof(__le32), &tmp);
   1351}
   1352
   1353/**
   1354 * nla_put_u64_64bit - Add a u64 netlink attribute to a skb and align it
   1355 * @skb: socket buffer to add attribute to
   1356 * @attrtype: attribute type
   1357 * @value: numeric value
   1358 * @padattr: attribute type for the padding
   1359 */
   1360static inline int nla_put_u64_64bit(struct sk_buff *skb, int attrtype,
   1361				    u64 value, int padattr)
   1362{
   1363	u64 tmp = value;
   1364
   1365	return nla_put_64bit(skb, attrtype, sizeof(u64), &tmp, padattr);
   1366}
   1367
   1368/**
   1369 * nla_put_be64 - Add a __be64 netlink attribute to a socket buffer and align it
   1370 * @skb: socket buffer to add attribute to
   1371 * @attrtype: attribute type
   1372 * @value: numeric value
   1373 * @padattr: attribute type for the padding
   1374 */
   1375static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value,
   1376			       int padattr)
   1377{
   1378	__be64 tmp = value;
   1379
   1380	return nla_put_64bit(skb, attrtype, sizeof(__be64), &tmp, padattr);
   1381}
   1382
   1383/**
   1384 * nla_put_net64 - Add 64-bit network byte order nlattr to a skb and align it
   1385 * @skb: socket buffer to add attribute to
   1386 * @attrtype: attribute type
   1387 * @value: numeric value
   1388 * @padattr: attribute type for the padding
   1389 */
   1390static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value,
   1391				int padattr)
   1392{
   1393	__be64 tmp = value;
   1394
   1395	return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, tmp,
   1396			    padattr);
   1397}
   1398
   1399/**
   1400 * nla_put_le64 - Add a __le64 netlink attribute to a socket buffer and align it
   1401 * @skb: socket buffer to add attribute to
   1402 * @attrtype: attribute type
   1403 * @value: numeric value
   1404 * @padattr: attribute type for the padding
   1405 */
   1406static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value,
   1407			       int padattr)
   1408{
   1409	__le64 tmp = value;
   1410
   1411	return nla_put_64bit(skb, attrtype, sizeof(__le64), &tmp, padattr);
   1412}
   1413
   1414/**
   1415 * nla_put_s8 - Add a s8 netlink attribute to a socket buffer
   1416 * @skb: socket buffer to add attribute to
   1417 * @attrtype: attribute type
   1418 * @value: numeric value
   1419 */
   1420static inline int nla_put_s8(struct sk_buff *skb, int attrtype, s8 value)
   1421{
   1422	s8 tmp = value;
   1423
   1424	return nla_put(skb, attrtype, sizeof(s8), &tmp);
   1425}
   1426
   1427/**
   1428 * nla_put_s16 - Add a s16 netlink attribute to a socket buffer
   1429 * @skb: socket buffer to add attribute to
   1430 * @attrtype: attribute type
   1431 * @value: numeric value
   1432 */
   1433static inline int nla_put_s16(struct sk_buff *skb, int attrtype, s16 value)
   1434{
   1435	s16 tmp = value;
   1436
   1437	return nla_put(skb, attrtype, sizeof(s16), &tmp);
   1438}
   1439
   1440/**
   1441 * nla_put_s32 - Add a s32 netlink attribute to a socket buffer
   1442 * @skb: socket buffer to add attribute to
   1443 * @attrtype: attribute type
   1444 * @value: numeric value
   1445 */
   1446static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value)
   1447{
   1448	s32 tmp = value;
   1449
   1450	return nla_put(skb, attrtype, sizeof(s32), &tmp);
   1451}
   1452
   1453/**
   1454 * nla_put_s64 - Add a s64 netlink attribute to a socket buffer and align it
   1455 * @skb: socket buffer to add attribute to
   1456 * @attrtype: attribute type
   1457 * @value: numeric value
   1458 * @padattr: attribute type for the padding
   1459 */
   1460static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value,
   1461			      int padattr)
   1462{
   1463	s64 tmp = value;
   1464
   1465	return nla_put_64bit(skb, attrtype, sizeof(s64), &tmp, padattr);
   1466}
   1467
   1468/**
   1469 * nla_put_string - Add a string netlink attribute to a socket buffer
   1470 * @skb: socket buffer to add attribute to
   1471 * @attrtype: attribute type
   1472 * @str: NUL terminated string
   1473 */
   1474static inline int nla_put_string(struct sk_buff *skb, int attrtype,
   1475				 const char *str)
   1476{
   1477	return nla_put(skb, attrtype, strlen(str) + 1, str);
   1478}
   1479
   1480/**
   1481 * nla_put_flag - Add a flag netlink attribute to a socket buffer
   1482 * @skb: socket buffer to add attribute to
   1483 * @attrtype: attribute type
   1484 */
   1485static inline int nla_put_flag(struct sk_buff *skb, int attrtype)
   1486{
   1487	return nla_put(skb, attrtype, 0, NULL);
   1488}
   1489
   1490/**
   1491 * nla_put_msecs - Add a msecs netlink attribute to a skb and align it
   1492 * @skb: socket buffer to add attribute to
   1493 * @attrtype: attribute type
   1494 * @njiffies: number of jiffies to convert to msecs
   1495 * @padattr: attribute type for the padding
   1496 */
   1497static inline int nla_put_msecs(struct sk_buff *skb, int attrtype,
   1498				unsigned long njiffies, int padattr)
   1499{
   1500	u64 tmp = jiffies_to_msecs(njiffies);
   1501
   1502	return nla_put_64bit(skb, attrtype, sizeof(u64), &tmp, padattr);
   1503}
   1504
   1505/**
   1506 * nla_put_in_addr - Add an IPv4 address netlink attribute to a socket
   1507 * buffer
   1508 * @skb: socket buffer to add attribute to
   1509 * @attrtype: attribute type
   1510 * @addr: IPv4 address
   1511 */
   1512static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype,
   1513				  __be32 addr)
   1514{
   1515	__be32 tmp = addr;
   1516
   1517	return nla_put_be32(skb, attrtype, tmp);
   1518}
   1519
   1520/**
   1521 * nla_put_in6_addr - Add an IPv6 address netlink attribute to a socket
   1522 * buffer
   1523 * @skb: socket buffer to add attribute to
   1524 * @attrtype: attribute type
   1525 * @addr: IPv6 address
   1526 */
   1527static inline int nla_put_in6_addr(struct sk_buff *skb, int attrtype,
   1528				   const struct in6_addr *addr)
   1529{
   1530	return nla_put(skb, attrtype, sizeof(*addr), addr);
   1531}
   1532
   1533/**
   1534 * nla_put_bitfield32 - Add a bitfield32 netlink attribute to a socket buffer
   1535 * @skb: socket buffer to add attribute to
   1536 * @attrtype: attribute type
   1537 * @value: value carrying bits
   1538 * @selector: selector of valid bits
   1539 */
   1540static inline int nla_put_bitfield32(struct sk_buff *skb, int attrtype,
   1541				     __u32 value, __u32 selector)
   1542{
   1543	struct nla_bitfield32 tmp = { value, selector, };
   1544
   1545	return nla_put(skb, attrtype, sizeof(tmp), &tmp);
   1546}
   1547
   1548/**
   1549 * nla_get_u32 - return payload of u32 attribute
   1550 * @nla: u32 netlink attribute
   1551 */
   1552static inline u32 nla_get_u32(const struct nlattr *nla)
   1553{
   1554	return *(u32 *) nla_data(nla);
   1555}
   1556
   1557/**
   1558 * nla_get_be32 - return payload of __be32 attribute
   1559 * @nla: __be32 netlink attribute
   1560 */
   1561static inline __be32 nla_get_be32(const struct nlattr *nla)
   1562{
   1563	return *(__be32 *) nla_data(nla);
   1564}
   1565
   1566/**
   1567 * nla_get_le32 - return payload of __le32 attribute
   1568 * @nla: __le32 netlink attribute
   1569 */
   1570static inline __le32 nla_get_le32(const struct nlattr *nla)
   1571{
   1572	return *(__le32 *) nla_data(nla);
   1573}
   1574
   1575/**
   1576 * nla_get_u16 - return payload of u16 attribute
   1577 * @nla: u16 netlink attribute
   1578 */
   1579static inline u16 nla_get_u16(const struct nlattr *nla)
   1580{
   1581	return *(u16 *) nla_data(nla);
   1582}
   1583
   1584/**
   1585 * nla_get_be16 - return payload of __be16 attribute
   1586 * @nla: __be16 netlink attribute
   1587 */
   1588static inline __be16 nla_get_be16(const struct nlattr *nla)
   1589{
   1590	return *(__be16 *) nla_data(nla);
   1591}
   1592
   1593/**
   1594 * nla_get_le16 - return payload of __le16 attribute
   1595 * @nla: __le16 netlink attribute
   1596 */
   1597static inline __le16 nla_get_le16(const struct nlattr *nla)
   1598{
   1599	return *(__le16 *) nla_data(nla);
   1600}
   1601
   1602/**
   1603 * nla_get_u8 - return payload of u8 attribute
   1604 * @nla: u8 netlink attribute
   1605 */
   1606static inline u8 nla_get_u8(const struct nlattr *nla)
   1607{
   1608	return *(u8 *) nla_data(nla);
   1609}
   1610
   1611/**
   1612 * nla_get_u64 - return payload of u64 attribute
   1613 * @nla: u64 netlink attribute
   1614 */
   1615static inline u64 nla_get_u64(const struct nlattr *nla)
   1616{
   1617	u64 tmp;
   1618
   1619	nla_memcpy(&tmp, nla, sizeof(tmp));
   1620
   1621	return tmp;
   1622}
   1623
   1624/**
   1625 * nla_get_be64 - return payload of __be64 attribute
   1626 * @nla: __be64 netlink attribute
   1627 */
   1628static inline __be64 nla_get_be64(const struct nlattr *nla)
   1629{
   1630	__be64 tmp;
   1631
   1632	nla_memcpy(&tmp, nla, sizeof(tmp));
   1633
   1634	return tmp;
   1635}
   1636
   1637/**
   1638 * nla_get_le64 - return payload of __le64 attribute
   1639 * @nla: __le64 netlink attribute
   1640 */
   1641static inline __le64 nla_get_le64(const struct nlattr *nla)
   1642{
   1643	return *(__le64 *) nla_data(nla);
   1644}
   1645
   1646/**
   1647 * nla_get_s32 - return payload of s32 attribute
   1648 * @nla: s32 netlink attribute
   1649 */
   1650static inline s32 nla_get_s32(const struct nlattr *nla)
   1651{
   1652	return *(s32 *) nla_data(nla);
   1653}
   1654
   1655/**
   1656 * nla_get_s16 - return payload of s16 attribute
   1657 * @nla: s16 netlink attribute
   1658 */
   1659static inline s16 nla_get_s16(const struct nlattr *nla)
   1660{
   1661	return *(s16 *) nla_data(nla);
   1662}
   1663
   1664/**
   1665 * nla_get_s8 - return payload of s8 attribute
   1666 * @nla: s8 netlink attribute
   1667 */
   1668static inline s8 nla_get_s8(const struct nlattr *nla)
   1669{
   1670	return *(s8 *) nla_data(nla);
   1671}
   1672
   1673/**
   1674 * nla_get_s64 - return payload of s64 attribute
   1675 * @nla: s64 netlink attribute
   1676 */
   1677static inline s64 nla_get_s64(const struct nlattr *nla)
   1678{
   1679	s64 tmp;
   1680
   1681	nla_memcpy(&tmp, nla, sizeof(tmp));
   1682
   1683	return tmp;
   1684}
   1685
   1686/**
   1687 * nla_get_flag - return payload of flag attribute
   1688 * @nla: flag netlink attribute
   1689 */
   1690static inline int nla_get_flag(const struct nlattr *nla)
   1691{
   1692	return !!nla;
   1693}
   1694
   1695/**
   1696 * nla_get_msecs - return payload of msecs attribute
   1697 * @nla: msecs netlink attribute
   1698 *
   1699 * Returns the number of milliseconds in jiffies.
   1700 */
   1701static inline unsigned long nla_get_msecs(const struct nlattr *nla)
   1702{
   1703	u64 msecs = nla_get_u64(nla);
   1704
   1705	return msecs_to_jiffies((unsigned long) msecs);
   1706}
   1707
   1708/**
   1709 * nla_get_in_addr - return payload of IPv4 address attribute
   1710 * @nla: IPv4 address netlink attribute
   1711 */
   1712static inline __be32 nla_get_in_addr(const struct nlattr *nla)
   1713{
   1714	return *(__be32 *) nla_data(nla);
   1715}
   1716
   1717/**
   1718 * nla_get_in6_addr - return payload of IPv6 address attribute
   1719 * @nla: IPv6 address netlink attribute
   1720 */
   1721static inline struct in6_addr nla_get_in6_addr(const struct nlattr *nla)
   1722{
   1723	struct in6_addr tmp;
   1724
   1725	nla_memcpy(&tmp, nla, sizeof(tmp));
   1726	return tmp;
   1727}
   1728
   1729/**
   1730 * nla_get_bitfield32 - return payload of 32 bitfield attribute
   1731 * @nla: nla_bitfield32 attribute
   1732 */
   1733static inline struct nla_bitfield32 nla_get_bitfield32(const struct nlattr *nla)
   1734{
   1735	struct nla_bitfield32 tmp;
   1736
   1737	nla_memcpy(&tmp, nla, sizeof(tmp));
   1738	return tmp;
   1739}
   1740
   1741/**
   1742 * nla_memdup - duplicate attribute memory (kmemdup)
   1743 * @src: netlink attribute to duplicate from
   1744 * @gfp: GFP mask
   1745 */
   1746static inline void *nla_memdup(const struct nlattr *src, gfp_t gfp)
   1747{
   1748	return kmemdup(nla_data(src), nla_len(src), gfp);
   1749}
   1750
   1751/**
   1752 * nla_nest_start_noflag - Start a new level of nested attributes
   1753 * @skb: socket buffer to add attributes to
   1754 * @attrtype: attribute type of container
   1755 *
   1756 * This function exists for backward compatibility to use in APIs which never
   1757 * marked their nest attributes with NLA_F_NESTED flag. New APIs should use
   1758 * nla_nest_start() which sets the flag.
   1759 *
   1760 * Returns the container attribute or NULL on error
   1761 */
   1762static inline struct nlattr *nla_nest_start_noflag(struct sk_buff *skb,
   1763						   int attrtype)
   1764{
   1765	struct nlattr *start = (struct nlattr *)skb_tail_pointer(skb);
   1766
   1767	if (nla_put(skb, attrtype, 0, NULL) < 0)
   1768		return NULL;
   1769
   1770	return start;
   1771}
   1772
   1773/**
   1774 * nla_nest_start - Start a new level of nested attributes, with NLA_F_NESTED
   1775 * @skb: socket buffer to add attributes to
   1776 * @attrtype: attribute type of container
   1777 *
   1778 * Unlike nla_nest_start_noflag(), mark the nest attribute with NLA_F_NESTED
   1779 * flag. This is the preferred function to use in new code.
   1780 *
   1781 * Returns the container attribute or NULL on error
   1782 */
   1783static inline struct nlattr *nla_nest_start(struct sk_buff *skb, int attrtype)
   1784{
   1785	return nla_nest_start_noflag(skb, attrtype | NLA_F_NESTED);
   1786}
   1787
   1788/**
   1789 * nla_nest_end - Finalize nesting of attributes
   1790 * @skb: socket buffer the attributes are stored in
   1791 * @start: container attribute
   1792 *
   1793 * Corrects the container attribute header to include the all
   1794 * appeneded attributes.
   1795 *
   1796 * Returns the total data length of the skb.
   1797 */
   1798static inline int nla_nest_end(struct sk_buff *skb, struct nlattr *start)
   1799{
   1800	start->nla_len = skb_tail_pointer(skb) - (unsigned char *)start;
   1801	return skb->len;
   1802}
   1803
   1804/**
   1805 * nla_nest_cancel - Cancel nesting of attributes
   1806 * @skb: socket buffer the message is stored in
   1807 * @start: container attribute
   1808 *
   1809 * Removes the container attribute and including all nested
   1810 * attributes. Returns -EMSGSIZE
   1811 */
   1812static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start)
   1813{
   1814	nlmsg_trim(skb, start);
   1815}
   1816
   1817/**
   1818 * __nla_validate_nested - Validate a stream of nested attributes
   1819 * @start: container attribute
   1820 * @maxtype: maximum attribute type to be expected
   1821 * @policy: validation policy
   1822 * @validate: validation strictness
   1823 * @extack: extended ACK report struct
   1824 *
   1825 * Validates all attributes in the nested attribute stream against the
   1826 * specified policy. Attributes with a type exceeding maxtype will be
   1827 * ignored. See documenation of struct nla_policy for more details.
   1828 *
   1829 * Returns 0 on success or a negative error code.
   1830 */
   1831static inline int __nla_validate_nested(const struct nlattr *start, int maxtype,
   1832					const struct nla_policy *policy,
   1833					unsigned int validate,
   1834					struct netlink_ext_ack *extack)
   1835{
   1836	return __nla_validate(nla_data(start), nla_len(start), maxtype, policy,
   1837			      validate, extack);
   1838}
   1839
   1840static inline int
   1841nla_validate_nested(const struct nlattr *start, int maxtype,
   1842		    const struct nla_policy *policy,
   1843		    struct netlink_ext_ack *extack)
   1844{
   1845	return __nla_validate_nested(start, maxtype, policy,
   1846				     NL_VALIDATE_STRICT, extack);
   1847}
   1848
   1849static inline int
   1850nla_validate_nested_deprecated(const struct nlattr *start, int maxtype,
   1851			       const struct nla_policy *policy,
   1852			       struct netlink_ext_ack *extack)
   1853{
   1854	return __nla_validate_nested(start, maxtype, policy,
   1855				     NL_VALIDATE_LIBERAL, extack);
   1856}
   1857
   1858/**
   1859 * nla_need_padding_for_64bit - test 64-bit alignment of the next attribute
   1860 * @skb: socket buffer the message is stored in
   1861 *
   1862 * Return true if padding is needed to align the next attribute (nla_data()) to
   1863 * a 64-bit aligned area.
   1864 */
   1865static inline bool nla_need_padding_for_64bit(struct sk_buff *skb)
   1866{
   1867#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
   1868	/* The nlattr header is 4 bytes in size, that's why we test
   1869	 * if the skb->data _is_ aligned.  A NOP attribute, plus
   1870	 * nlattr header for next attribute, will make nla_data()
   1871	 * 8-byte aligned.
   1872	 */
   1873	if (IS_ALIGNED((unsigned long)skb_tail_pointer(skb), 8))
   1874		return true;
   1875#endif
   1876	return false;
   1877}
   1878
   1879/**
   1880 * nla_align_64bit - 64-bit align the nla_data() of next attribute
   1881 * @skb: socket buffer the message is stored in
   1882 * @padattr: attribute type for the padding
   1883 *
   1884 * Conditionally emit a padding netlink attribute in order to make
   1885 * the next attribute we emit have a 64-bit aligned nla_data() area.
   1886 * This will only be done in architectures which do not have
   1887 * CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS defined.
   1888 *
   1889 * Returns zero on success or a negative error code.
   1890 */
   1891static inline int nla_align_64bit(struct sk_buff *skb, int padattr)
   1892{
   1893	if (nla_need_padding_for_64bit(skb) &&
   1894	    !nla_reserve(skb, padattr, 0))
   1895		return -EMSGSIZE;
   1896
   1897	return 0;
   1898}
   1899
   1900/**
   1901 * nla_total_size_64bit - total length of attribute including padding
   1902 * @payload: length of payload
   1903 */
   1904static inline int nla_total_size_64bit(int payload)
   1905{
   1906	return NLA_ALIGN(nla_attr_size(payload))
   1907#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
   1908		+ NLA_ALIGN(nla_attr_size(0))
   1909#endif
   1910		;
   1911}
   1912
   1913/**
   1914 * nla_for_each_attr - iterate over a stream of attributes
   1915 * @pos: loop counter, set to current attribute
   1916 * @head: head of attribute stream
   1917 * @len: length of attribute stream
   1918 * @rem: initialized to len, holds bytes currently remaining in stream
   1919 */
   1920#define nla_for_each_attr(pos, head, len, rem) \
   1921	for (pos = head, rem = len; \
   1922	     nla_ok(pos, rem); \
   1923	     pos = nla_next(pos, &(rem)))
   1924
   1925/**
   1926 * nla_for_each_nested - iterate over nested attributes
   1927 * @pos: loop counter, set to current attribute
   1928 * @nla: attribute containing the nested attributes
   1929 * @rem: initialized to len, holds bytes currently remaining in stream
   1930 */
   1931#define nla_for_each_nested(pos, nla, rem) \
   1932	nla_for_each_attr(pos, nla_data(nla), nla_len(nla), rem)
   1933
   1934/**
   1935 * nla_is_last - Test if attribute is last in stream
   1936 * @nla: attribute to test
   1937 * @rem: bytes remaining in stream
   1938 */
   1939static inline bool nla_is_last(const struct nlattr *nla, int rem)
   1940{
   1941	return nla->nla_len == rem;
   1942}
   1943
   1944void nla_get_range_unsigned(const struct nla_policy *pt,
   1945			    struct netlink_range_validation *range);
   1946void nla_get_range_signed(const struct nla_policy *pt,
   1947			  struct netlink_range_validation_signed *range);
   1948
   1949struct netlink_policy_dump_state;
   1950
   1951int netlink_policy_dump_add_policy(struct netlink_policy_dump_state **pstate,
   1952				   const struct nla_policy *policy,
   1953				   unsigned int maxtype);
   1954int netlink_policy_dump_get_policy_idx(struct netlink_policy_dump_state *state,
   1955				       const struct nla_policy *policy,
   1956				       unsigned int maxtype);
   1957bool netlink_policy_dump_loop(struct netlink_policy_dump_state *state);
   1958int netlink_policy_dump_write(struct sk_buff *skb,
   1959			      struct netlink_policy_dump_state *state);
   1960int netlink_policy_dump_attr_size_estimate(const struct nla_policy *pt);
   1961int netlink_policy_dump_write_attr(struct sk_buff *skb,
   1962				   const struct nla_policy *pt,
   1963				   int nestattr);
   1964void netlink_policy_dump_free(struct netlink_policy_dump_state *state);
   1965
   1966#endif