2015-01-22 4 views
0

Daer all. Я столкнулся с проблемой во время тестирования Android CTS (4.4 R3).Что означает «Нет данных (61)» во время системного вызова getxattr

весь журнал ошибок, как показано ниже:

01-22 17:19:44.844 D/  (22802): isPermittedCapBitSet():  getxattr("/system/bin/run-as") call failed: return -1 (error: No data available (61)) 
01-22 17:19:44.844 I/TestRunner(22802): failed: testRunAsHasCorrectCapabilities(android.permission.cts.FileSystemPermissionTest) 
01-22 17:19:44.844 I/TestRunner(22802): ----- begin exception ----- 
01-22 17:19:44.844 I/TestRunner(22802): 
01-22 17:19:44.844 I/TestRunner(22802): junit.framework.AssertionFailedError 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.Assert.fail(Assert.java:48) 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.Assert.assertTrue(Assert.java:20) 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.Assert.assertTrue(Assert.java:27) 
01-22 17:19:44.844 I/TestRunner(22802):   at android.permission.cts.FileSystemPermissionTest.testRunAsHasCorrectCapabilities(FileSystemPermissionTest.java:828) 
01-22 17:19:44.844 I/TestRunner(22802):   at java.lang.reflect.Method.invokeNative(Native Method) 
01-22 17:19:44.844 I/TestRunner(22802):   at java.lang.reflect.Method.invoke(Method.java:515) 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.TestCase.runTest(TestCase.java:168) 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.TestCase.runBare(TestCase.java:134) 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.TestResult$1.protect(TestResult.java:115) 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.TestResult.runProtected(TestResult.java:133) 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.TestResult.run(TestResult.java:118) 
01-22 17:19:44.844 I/TestRunner(22802):   at junit.framework.TestCase.run(TestCase.java:124) 
01-22 17:19:44.844 I/TestRunner(22802):   at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) 
01-22 17:19:44.844 I/TestRunner(22802):   at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) 
01-22 17:19:44.844 I/TestRunner(22802):   at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) 
01-22 17:19:44.844 I/TestRunner(22802):   at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701) 
01-22 17:19:44.844 I/TestRunner(22802): ----- end exceptbinder: release 22792:22801 transaction 150222 in, still active 

Я проследил, что функция вызывает эти ошибки

/cts/tests/tests/permission/jni/android_permission_cts_FileUtils.cpp

95 static jboolean isPermittedCapBitSet(JNIEnv* env, jstring path, size_t capId) 
96 { 
97  const char* pathStr = env->GetStringUTFChars(path, NULL); 
98  jboolean ret = false; 
99 
100  struct vfs_cap_data capData; 
101  memset(&capData, 0, sizeof(capData)); 
102 
103  ssize_t result = getxattr(pathStr, XATTR_NAME_CAPS, &capData, 
104        sizeof(capData)); 
105  if (result > 0) { 
106  ret = (capData.data[CAP_TO_INDEX(capId)].permitted & 
107    CAP_TO_MASK(capId)) != 0; 
108  ALOGD("isPermittedCapBitSet(): getxattr(\"%s\") call succeeded, " 
109    "cap bit %u %s", 
110    pathStr, capId, ret ? "set" : "unset"); 
111  } else { 
112  ALOGD("isPermittedCapBitSet(): getxattr(\"%s\") call failed: " 
113    "return %d (error: %s (%d))\n", 
114    pathStr, result, strerror(errno), errno); 
115  } 
116 
117  env->ReleaseStringUTFChars(path, pathStr); 
118  return ret; 
119 } 
120 

Ошибка, вызванная getxattr().

Я не знаю, что мне делать. Я уже проверил/system/bin/run-as. Он существует и имеет разрешение на подключение и право собственности

[email protected]:/ # ls -al /system/bin/run-as          
-rwxr-x--- root  shell  9500 2015-01-21 14:54 run-as 

Пожалуйста, дайте мне учить, что я должен проверить? Thanks

ответ

0

Я думаю, вам может понадобиться перекомпилировать ваше ядро ​​с включенным eTReited ATTRibutes (xattr). Для файловой системы ext3, значение конфигурации в .config является:

CONFIG_EXT3_FS_XATTR

Но в вашей Linux исходного дерева, тип

make menuconfig

и использовать этот интерфейс для включения расширенных атрибутов для файла системы (ы), которые вы используете. Затем перекомпилируйте ваше ядро ​​после этого.