diff options
author | Thomas Graf <tgraf@suug.ch> | 2006-08-26 23:11:47 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-22 18:18:24 -0400 |
commit | a5531a5d852008be40811496029012f4ad3093d1 (patch) | |
tree | f59a1b240753ef4f0a672f256fc01d8a965793d1 /include | |
parent | e3b4eadbea77ecb3c3a74d1bc81b392f454c7f2e (diff) |
[NETLINK]: Improve string attribute validation
Introduces a new attribute type NLA_NUL_STRING to support NUL
terminated strings. Attributes of this kind require to carry
a terminating NUL within the maximum specified in the policy.
The `old' NLA_STRING which is not required to be NUL terminated
is extended to provide means to specify a maximum length of the
string.
Aims at easing the pain with using nla_strlcpy() on temporary
buffers.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/netlink.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/include/net/netlink.h b/include/net/netlink.h index bcb27e3a312e..11dc2e7f679a 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
@@ -167,6 +167,7 @@ enum { | |||
167 | NLA_FLAG, | 167 | NLA_FLAG, |
168 | NLA_MSECS, | 168 | NLA_MSECS, |
169 | NLA_NESTED, | 169 | NLA_NESTED, |
170 | NLA_NUL_STRING, | ||
170 | __NLA_TYPE_MAX, | 171 | __NLA_TYPE_MAX, |
171 | }; | 172 | }; |
172 | 173 | ||
@@ -175,21 +176,27 @@ enum { | |||
175 | /** | 176 | /** |
176 | * struct nla_policy - attribute validation policy | 177 | * struct nla_policy - attribute validation policy |
177 | * @type: Type of attribute or NLA_UNSPEC | 178 | * @type: Type of attribute or NLA_UNSPEC |
178 | * @minlen: Minimal length of payload required to be available | 179 | * @len: Type specific length of payload |
179 | * | 180 | * |
180 | * Policies are defined as arrays of this struct, the array must be | 181 | * Policies are defined as arrays of this struct, the array must be |
181 | * accessible by attribute type up to the highest identifier to be expected. | 182 | * accessible by attribute type up to the highest identifier to be expected. |
182 | * | 183 | * |
184 | * Meaning of `len' field: | ||
185 | * NLA_STRING Maximum length of string | ||
186 | * NLA_NUL_STRING Maximum length of string (excluding NUL) | ||
187 | * NLA_FLAG Unused | ||
188 | * All other Exact length of attribute payload | ||
189 | * | ||
183 | * Example: | 190 | * Example: |
184 | * static struct nla_policy my_policy[ATTR_MAX+1] __read_mostly = { | 191 | * static struct nla_policy my_policy[ATTR_MAX+1] __read_mostly = { |
185 | * [ATTR_FOO] = { .type = NLA_U16 }, | 192 | * [ATTR_FOO] = { .type = NLA_U16 }, |
186 | * [ATTR_BAR] = { .type = NLA_STRING }, | 193 | * [ATTR_BAR] = { .type = NLA_STRING, len = BARSIZ }, |
187 | * [ATTR_BAZ] = { .minlen = sizeof(struct mystruct) }, | 194 | * [ATTR_BAZ] = { .len = sizeof(struct mystruct) }, |
188 | * }; | 195 | * }; |
189 | */ | 196 | */ |
190 | struct nla_policy { | 197 | struct nla_policy { |
191 | u16 type; | 198 | u16 type; |
192 | u16 minlen; | 199 | u16 len; |
193 | }; | 200 | }; |
194 | 201 | ||
195 | /** | 202 | /** |