getxattr系统调用期间"No data available(61)"的含义是什么



>Daer all.我在尝试安卓 CTS(4.4 R3)时遇到问题。

整个错误日志如下所示:

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。它存在并具有连接权限和所有权

root@123:/ # ls -al /system/bin/run-as                                     
-rwxr-x--- root     shell        9500 2015-01-21 14:54 run-as

请让我教我应该检查什么?谢谢

我认为您可能需要在启用扩展 ATTRibutes (xattr) 的情况下重新编译您的内核。对于 ext3 文件系统,.config 中的配置值为:

CONFIG_EXT3_FS_XATTR

但是,在 Linux 源代码树中,键入

make menuconfig

并使用该接口为您正在使用的文件系统启用扩展属性。然后重新编译你的内核。

相关内容

最新更新