1
0
Fork 0
mirror of https://github.com/linux-usb-gadgets/libusbgx.git synced 2025-07-26 04:15:05 +03:00
Commit graph

230 commits

Author SHA1 Message Date
Philippe De Swert
9372e6aef5 libusbgx: Fix buffer overrun issue. CID#56128
Avoid calling usbg_read_string() with a 40 byte long buffer, which in turn is filled in
by usbg_read_buf() which uses a maximum of 256 bytes (USBG_MAX_STR_LENGTH). This adjusts
the buffer to be the right size.

Signed-off-by: Philippe De Swert <philippe.deswert@jollamobile.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:39:02 +01:00
Philippe De Swert
6c199393e4 libusbgx: Fix readlink/buffer overrun issue. CID#56130, CID#56129
Readlink() can return the total length of the buffer (here 4096/USBG_MAX_PATH_LENGTH),
so we do not want to dereference target[4096] as that would give an off by one error.

Signed-off-by: Philippe De Swert <philippe.deswert@jollamobile.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:38:54 +01:00
Krzysztof Opasiak
bc1bf2e15a libusbgx: Use config ID and label instead of config name.
Naming convention of Config FS should not be exposed
to user of library. All API functions should use
configuration ID (configuration number) as unique
identificator and configuration label as human
readable description.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:38:48 +01:00
Krzysztof Opasiak
432ce82423 libusbgx: Replace usage of function name with type and instance.
User of library should not use directly function name but
only type of the function and name of instance. Using this
will separate user for naming convention on Config FS.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:38:42 +01:00
Krzysztof Opasiak
6dd1cb67b1 libusbgx: Add checking for legal function type.
Function type provided by user to functions should
be checked before usage to avoid errors.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:38:36 +01:00
Krzysztof Opasiak
5772a68489 libusbgx: Fix wrong malloc sizes in allocate functions.
Functions usbg_allocate_function() and usbg_allocate_binding()
had allocated sizeof(usbg_config) instead of usbg_function
and usbg_binding.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:38:26 +01:00
Krzysztof Opasiak
c39fbd4931 libusbgx: Fix missing read of bcdDevice.
Value of bcdDevice has been never read from Config FS
and this field was leaved uninitialized. Change
usbg_parse_gadget_attrs() to read also from this file.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:38:03 +01:00
Krzysztof Opasiak
27d0fba594 libusbgx: Replace sprintf with snprintf.
Usage of sprintf() may be dangerous in some cases
so use snprintf() to avoid writing after allocated
memory.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:22 +01:00
Krzysztof Opasiak
e9596174be libusbgx: Remove fixed-size buffers from usbg_binding.
Path and name length should not be placed in constant
size buffer but in allocated memory.

Handle overflows of snprintf in related funcitons.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:22 +01:00
Krzysztof Opasiak
b2e044950a libusbgx: Remove fixed-size buffers from usbg_function.
Path and name length should not be placed in constant
size buffer but in allocated memory.

Handle overflows of snprintf in related funcitons.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:22 +01:00
Krzysztof Opasiak
daab2bb78e libusbgx: Remove fixed-size buffers from usbg_config.
Path and name length should not be placed in constant
size buffer but in allocated memory.

Use PATH_MAX macro from limits.h as default size for
USBG_MAX_PATH_LENGTH.

Handle overflows of snprintf in related funcitons.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:22 +01:00
Krzysztof Opasiak
44fe6160f0 libusbgx: Remove fixed-size buffers from usbg_gadget.
Path and name length should not be placed in constant
size buffer but in allocated memory.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:22 +01:00
Krzysztof Opasiak
56aaff8854 libusbgx: Remove fixed-size buffer from usbg_state.
Path length should not be placed in constant size buffer
but in allocated memory.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:22 +01:00
Krzysztof Opasiak
1392c6b541 libusbgx: Fix wrong target size.
Variable target is a place for path to USB function
so it should have size USBG_MAX_PATH_LENGTH not
USBG_MAX_STR_LENGTH size.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
63f3bf5c57 libusbgx: Update examples to use returned error codes.
Examples provided with the library should use returned
error codes and provide information to user.

Remove todo baceuse it has been already done.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
e87571f9dd libusbgx: Add functions for getting error strings.
Add usbg_error_name() to get error name as a string.

Add usbg_strerror() to get brief error description in English.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
95aaf62620 libusbgx: Return error code instead of -1.
Change usbg_add_config_function() to return usbg_error
instead of returning 0 or -1.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
ea0d2a0db6 libusbgx: Change usbg_get_function_attrs() to return error code.
usbg_get_function_attrs() may fail due to many reasons
so it should notify the user about exact reason of failure
instead of returning only NULL pointer.

Add also USBG_ERROR_NOT_SUPPORTED to usbg_set_function_attrs().

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
6d79d8d95f libusbgx: Return error code instead of NULL pointer - config.
Change usbg_get_config_strs() and usbg_get_config_attrs()
to return usbg_error instead of NULL pointer.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
e8c0307c4c libusbgx: Return error code instead of NULL pointer.
Change usbg_get_gadget_strs() and usbg_get_gadget_attrs()
to return usbg_error instead of NULL pointer.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
623064f2ab libusbgx: Add return value to usbg_enable/disable_gadget().
Enabling and disabling gadget may fail due to many reasons
so those functions should notify user about it.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
709c04fab9 libusbgx: Add return value to config related functions.
Each usbg_set_config_*() may fail so it should have
a return value to notify user about reason of failure.

To be consistent with rest of API usbg_create_config()
should also return error code to notify user about reasons
of failure instead of binary information (NULL or not).

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
5ab3f47865 libusbgx: Add return value to usb function related functions.
Each usbg_set_*() may fail so it should have a return value
to notify user about reason of failure.

To be consistent with rest of API usbg_create_function()
should also return error code to notify user about reasons
of failure instead of binary information (NULL or not).

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
809f747690 libusbgx: Add return value to usbg_set_gadget_*() functions.
Setting each of attribute may fail due to a lot of reasons
so those functions should report this failure to a user.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
b1aa35521a libusbgx: Add return value to gadget creation functions.
Functions related to gadget creation should return error codes
instead of pointer.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
97e39942bb libusbgx: Add parenthesis to INSERT_TAILQ_STRING_ORDER macro.
Surround each pointer in macro with parenthesis to avid
errors related to operator precedence.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
63a687e913 libusbgx: Return usbg_error instead of char* in usbg_get_*_name().
API should be consistent and use error codes to determine what
type of error occurred instead of returning NULL only.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
1811d48921 libusbgx: Return usbg_error instead of -1 in usbg_*_len().
Functions which provides user length of some internal
strings should return usbg_error instead of -1.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
97c6c58b87 libusbgx: Add error handling to usbg_init() and related functions.
Assumption that all malloc() and read()/write() finish correctly
is too bold. Errors should be handled and propagated to upper
layers of library and returned to user.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
6b58987082 libusbgx: Fix wrong binding parsing.
usbg_parse_bindings() function has done parsing incorrectly
and in inefficent way. Changes made in this function provide
better performance and fix wrong linking issue when having
two instances of the same function.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
570911240d libusbgx: Add internal free functions for each library structure.
Library should have internal API for freing structures instead of
copy pasting same code in different places.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
ac719ea133 libusbgx: Refresh function attributes while each get.
Function attributes may be changed by kernel or other
user so they should not be cached in library structures.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
ede62b9192 libusbgx: Refresh config strings while each get.
Config strings should not be cached in library.
Removing internal strings structure allowed to add
full support for multilingual strings.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
18e5f7f551 libusbgx: Refresh config attributes while each get.
Config attributes may be changed by kernel or other
user so they should not be cached in library structures.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
e2fd412088 libusbgx: Refresh gadget strings while each get.
Gadget strings should not be cached in library.
Removing internal strings structure allowed to add
full support for multilingual strings.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
59294827e2 libusbgx: Refresh gadget attributes while each get.
Gadget attributes may be changed by kernel or other
user so they should not be cached in library structures.

Signed-of-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
2631010de5 libusbgx: Remove unused variables to make compiler happy.
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
3bd78a504e libusbgx: Rename all public structures to usbg convention.
Switch form struct * to typedef usbg_* to provide convenient
API for user.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
44b21b0ae6 libusbgx: Hide definition of binding structure.
Hide definition of binding structure to avoid direct
access to its fields. Rename it to usbg_binding.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
1025541129 libusbgx: Hide definition of function structure.
Hide definition of function structure to avoid direct
access to its fields. Rename it to usbg_function.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:21 +01:00
Krzysztof Opasiak
9b886d172f libusbgx: Hide definition of config structure.
Hide definition of config structure to avoid direct
access to its fields. Rename it to usbg_confg.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
233bdd6575 libusbgx: Hide definition of gadget structure.
Remove definition of gadget structure to avoid direct
access to its fields. Rename that structure to usbg_gadget.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
0f4c36efc3 libusbgx: Hide definition of state structure.
Hide definition of state structure to avoid direct
access to its fields. Rename it to usbg_state.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
2469999f2a libusbgx: Add getter for binding name and target.
Add usbg_get_binding_target() to avoid direct binding
structure members access. Add also usbg_get_binding_name_len()
and usbg_get_binding_name() to allow getting binding name.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
8642661469 libusbgx: Add getter for function name.
Add usbg_get_function_name() and usbg_get_function_name_len()
to avoid direct function structure members access.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
42c6bc3e56 libusbgx: Add functions for get/set function attributes.
Add usbg_get_function_attrs() and usbg_get_function_type()
to aviod direct access to function structure members.

Add usbg_set_function_attrs() to allow set all function\
attributes with one call.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
894741889e libusbgx: Remove function_names from header file.
function_names table is for internal usage only.
User should use function_types enum.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
8d9732e300 libusbgx: Add getter for config name.
Add usbg_get_config_name() and usbg_get_config_name_len()
to avoid direct config structure members access.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
b44baf9d2e libusbgx: Add set/get config attrs/strings functions.
Add usbg_set_config_attrs() function to allow setting
all attributes with one call. Add also getter for attrs
to avoid direct accessing of configuration fields.

Add usbg_set_config_strs() to be consistent with gadget
API.

Change usbg_create_config() to allow configuration creation
and attribute setting with one call.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00
Krzysztof Opasiak
7c85291a51 libusbgx: Separate config attrs and strs form configuration.
Configuration, its attributes and strings are all logically
independent so should be placed in separate structures.

Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
[Port from libusbg and update description]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
2015-12-22 20:35:20 +01:00