Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
* 'for-linus' of ssh://master.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs: 9p: fix error path during early mount 9p: make cryptic unknown error from server less scary 9p: fix flags length in net 9p: Correct fidpool creation failure in p9_client_create 9p: use struct mutex instead of struct semaphore 9p: propagate parse_option changes to client and transports fs/9p/v9fs.c (v9fs_parse_options): Handle kstrdup and match_strdup failure. 9p: Documentation updates add match_strlcpy() us it to make v9fs make uname and remotename parsing more robust
This commit is contained in:
32
lib/parser.c
32
lib/parser.c
@@ -182,18 +182,25 @@ int match_hex(substring_t *s, int *result)
|
||||
}
|
||||
|
||||
/**
|
||||
* match_strcpy: - copies the characters from a substring_t to a string
|
||||
* @to: string to copy characters to.
|
||||
* @s: &substring_t to copy
|
||||
* match_strlcpy: - Copy the characters from a substring_t to a sized buffer
|
||||
* @dest: where to copy to
|
||||
* @src: &substring_t to copy
|
||||
* @size: size of destination buffer
|
||||
*
|
||||
* Description: Copies the set of characters represented by the given
|
||||
* &substring_t @s to the c-style string @to. Caller guarantees that @to is
|
||||
* large enough to hold the characters of @s.
|
||||
* Description: Copy the characters in &substring_t @src to the
|
||||
* c-style string @dest. Copy no more than @size - 1 characters, plus
|
||||
* the terminating NUL. Return length of @src.
|
||||
*/
|
||||
void match_strcpy(char *to, const substring_t *s)
|
||||
size_t match_strlcpy(char *dest, const substring_t *src, size_t size)
|
||||
{
|
||||
memcpy(to, s->from, s->to - s->from);
|
||||
to[s->to - s->from] = '\0';
|
||||
size_t ret = src->to - src->from;
|
||||
|
||||
if (size) {
|
||||
size_t len = ret >= size ? size - 1 : ret;
|
||||
memcpy(dest, src->from, len);
|
||||
dest[len] = '\0';
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -206,9 +213,10 @@ void match_strcpy(char *to, const substring_t *s)
|
||||
*/
|
||||
char *match_strdup(const substring_t *s)
|
||||
{
|
||||
char *p = kmalloc(s->to - s->from + 1, GFP_KERNEL);
|
||||
size_t sz = s->to - s->from + 1;
|
||||
char *p = kmalloc(sz, GFP_KERNEL);
|
||||
if (p)
|
||||
match_strcpy(p, s);
|
||||
match_strlcpy(p, s, sz);
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -216,5 +224,5 @@ EXPORT_SYMBOL(match_token);
|
||||
EXPORT_SYMBOL(match_int);
|
||||
EXPORT_SYMBOL(match_octal);
|
||||
EXPORT_SYMBOL(match_hex);
|
||||
EXPORT_SYMBOL(match_strcpy);
|
||||
EXPORT_SYMBOL(match_strlcpy);
|
||||
EXPORT_SYMBOL(match_strdup);
|
||||
|
Reference in New Issue
Block a user