netlink: Introduce nla_strdup()
This is similar to strdup() for netlink string attributes. Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:

committed by
Pablo Neira Ayuso

parent
6e692678d7
commit
2cf0c8b3e6
24
lib/nlattr.c
24
lib/nlattr.c
@@ -271,6 +271,30 @@ size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize)
|
||||
}
|
||||
EXPORT_SYMBOL(nla_strlcpy);
|
||||
|
||||
/**
|
||||
* nla_strdup - Copy string attribute payload into a newly allocated buffer
|
||||
* @nla: attribute to copy the string from
|
||||
* @flags: the type of memory to allocate (see kmalloc).
|
||||
*
|
||||
* Returns a pointer to the allocated buffer or NULL on error.
|
||||
*/
|
||||
char *nla_strdup(const struct nlattr *nla, gfp_t flags)
|
||||
{
|
||||
size_t srclen = nla_len(nla);
|
||||
char *src = nla_data(nla), *dst;
|
||||
|
||||
if (srclen > 0 && src[srclen - 1] == '\0')
|
||||
srclen--;
|
||||
|
||||
dst = kmalloc(srclen + 1, flags);
|
||||
if (dst != NULL) {
|
||||
memcpy(dst, src, srclen);
|
||||
dst[srclen] = '\0';
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
EXPORT_SYMBOL(nla_strdup);
|
||||
|
||||
/**
|
||||
* nla_memcpy - Copy a netlink attribute into another memory area
|
||||
* @dest: where to copy to memcpy
|
||||
|
Reference in New Issue
Block a user