Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android L | libusb_init returns LIBUSB_ERROR_OTHER (-99)

I trying to use libusb on not rooted Nexus 5 as advised in this approach (by transferring usb file descriptor from java to native side).

My application ask permission via UsbManager.requestPermission and then run native method that call libusb_init to create libusb_context.

But libusb_init returns LIBUSB_ERROR_OTHER code (-99). After digging in the code I see why this happening. libusb reports 'could not find usbfs' because opendir("/dev/bus/usb") returns 0.

Also from adb shell I can't perform ls /dev, strange because I have rights (on Huawei U8950-1 with the same rights I can do this):

drwxr-xr-x root root 2014-09-04 10:26 dev

Looks like approach described below work not for all android devices. Can someone explain why?

like image 446
CAMOBAP Avatar asked Sep 04 '14 09:09

CAMOBAP


2 Answers

There is already a fix in this libusb fork:

https://github.com/martinmarinov/rtl_tcp_andro-

Now, not only you will need to pass the file descriptor, you will need to pass the device file path as well via UsbDevice.getDeviceName().

like image 161
androdroid Avatar answered Nov 14 '22 06:11

androdroid


Looks like Android L have an additional restriction about accessing to /dev deirectory. I have no more ideas about this

Update

Security Enhancements in Android 5.0

...

Android sandbox reinforced with SELinux. Android now requires SELinux in enforcing mode for all domains. SELinux is a mandatory access control (MAC) system in the Linux kernel used to augment the existing [discretionary access control (DAC) security] model](http://en.wikipedia.org/wiki/Discretionary_access_control). This new layer provides additional protection against potential security vulnerabilities.

...

Workarounds

  1. Install SELinuxModeChanger and change SELinux mode to permissive
  2. https://github.com/Gritzman/libusb
like image 42
CAMOBAP Avatar answered Nov 14 '22 05:11

CAMOBAP