Commit 17309a6a authored by Tao Ren's avatar Tao Ren Committed by Felipe Balbi

usb: gadget: add "usb_validate_langid" function

The USB LANGID validation code in "check_user_usb_string" function is
moved to "usb_validate_langid" function which can be used by other usb
gadget drivers.
Signed-off-by: default avatarTao Ren <rentao.bupt@gmail.com>
Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
parent 5cc0710f
...@@ -13,8 +13,6 @@ ...@@ -13,8 +13,6 @@
int check_user_usb_string(const char *name, int check_user_usb_string(const char *name,
struct usb_gadget_strings *stringtab_dev) struct usb_gadget_strings *stringtab_dev)
{ {
unsigned primary_lang;
unsigned sub_lang;
u16 num; u16 num;
int ret; int ret;
...@@ -22,17 +20,7 @@ int check_user_usb_string(const char *name, ...@@ -22,17 +20,7 @@ int check_user_usb_string(const char *name,
if (ret) if (ret)
return ret; return ret;
primary_lang = num & 0x3ff; if (!usb_validate_langid(num))
sub_lang = num >> 10;
/* simple sanity check for valid langid */
switch (primary_lang) {
case 0:
case 0x62 ... 0xfe:
case 0x100 ... 0x3ff:
return -EINVAL;
}
if (!sub_lang)
return -EINVAL; return -EINVAL;
stringtab_dev->language = num; stringtab_dev->language = num;
......
...@@ -65,3 +65,27 @@ usb_gadget_get_string (const struct usb_gadget_strings *table, int id, u8 *buf) ...@@ -65,3 +65,27 @@ usb_gadget_get_string (const struct usb_gadget_strings *table, int id, u8 *buf)
return buf [0]; return buf [0];
} }
EXPORT_SYMBOL_GPL(usb_gadget_get_string); EXPORT_SYMBOL_GPL(usb_gadget_get_string);
/**
* usb_validate_langid - validate usb language identifiers
* @lang: usb language identifier
*
* Returns true for valid language identifier, otherwise false.
*/
bool usb_validate_langid(u16 langid)
{
u16 primary_lang = langid & 0x3ff; /* bit [9:0] */
u16 sub_lang = langid >> 10; /* bit [15:10] */
switch (primary_lang) {
case 0:
case 0x62 ... 0xfe:
case 0x100 ... 0x3ff:
return false;
}
if (!sub_lang)
return false;
return true;
}
EXPORT_SYMBOL_GPL(usb_validate_langid);
...@@ -773,6 +773,9 @@ struct usb_gadget_string_container { ...@@ -773,6 +773,9 @@ struct usb_gadget_string_container {
/* put descriptor for string with that id into buf (buflen >= 256) */ /* put descriptor for string with that id into buf (buflen >= 256) */
int usb_gadget_get_string(const struct usb_gadget_strings *table, int id, u8 *buf); int usb_gadget_get_string(const struct usb_gadget_strings *table, int id, u8 *buf);
/* check if the given language identifier is valid */
bool usb_validate_langid(u16 langid);
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
/* utility to simplify managing config descriptors */ /* utility to simplify managing config descriptors */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment