HDFS-5195. Prevent passing null pointer to mlock and munlock. Contributed by Chris Nauroth.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-4949@1523093 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Chris Nauroth 2013-09-13 20:47:15 +00:00
parent 2f8297215f
commit 1a1f49fa4f
3 changed files with 19 additions and 3 deletions

View File

@ -363,6 +363,15 @@ Java_org_apache_hadoop_io_nativeio_NativeIO_00024POSIX_sync_1file_1range(
#endif #endif
} }
#define CHECK_DIRECT_BUFFER_ADDRESS(buf) \
{ \
if (!buf) { \
THROW(env, "java/lang/UnsupportedOperationException", \
"JNI access to direct buffers not available"); \
return; \
} \
}
/** /**
* public static native void mlock_native( * public static native void mlock_native(
* ByteBuffer buffer, long offset); * ByteBuffer buffer, long offset);
@ -379,6 +388,7 @@ Java_org_apache_hadoop_io_nativeio_NativeIO_00024POSIX_mlock_1native(
PASS_EXCEPTIONS(env); PASS_EXCEPTIONS(env);
if (mlock(buf, len)) { if (mlock(buf, len)) {
CHECK_DIRECT_BUFFER_ADDRESS(buf);
throw_ioe(env, errno); throw_ioe(env, errno);
} }
} }
@ -399,6 +409,7 @@ Java_org_apache_hadoop_io_nativeio_NativeIO_00024POSIX_munlock_1native(
PASS_EXCEPTIONS(env); PASS_EXCEPTIONS(env);
if (munlock(buf, len)) { if (munlock(buf, len)) {
CHECK_DIRECT_BUFFER_ADDRESS(buf);
throw_ioe(env, errno); throw_ioe(env, errno);
} }
} }

View File

@ -545,9 +545,12 @@ public void testMlock() throws Exception {
bufSum += buf[i]; bufSum += buf[i];
} }
FileOutputStream fos = new FileOutputStream(TEST_FILE); FileOutputStream fos = new FileOutputStream(TEST_FILE);
fos.write(buf); try {
fos.getChannel().force(true); fos.write(buf);
fos.close(); fos.getChannel().force(true);
} finally {
fos.close();
}
FileInputStream fis = null; FileInputStream fis = null;
FileChannel channel = null; FileChannel channel = null;

View File

@ -42,3 +42,5 @@ HDFS-4949 (Unreleased)
HDFS-5198. NameNodeRpcServer must not send back DNA_FINALIZE in reply to a HDFS-5198. NameNodeRpcServer must not send back DNA_FINALIZE in reply to a
cache report. (Contributed by Colin Patrick McCabe) cache report. (Contributed by Colin Patrick McCabe)
HDFS-5195. Prevent passing null pointer to mlock and munlock. (cnauroth)