...
Code Block | ||
---|---|---|
| ||
public final class NativeMethodWrapper { // Private native method private native void nativeOperation(byte[] data, int offset, int len); // Wrapper method performs SecurityManager and input validation checks public void doOperation(byte[] data, int offset, int len) { // Permission needed to invoke native method securityManagerCheck(); if (data == null) { throw new NullPointerException(); } // Copy mutable input data = data.clone(); // Validate input if ((offset < 0) || (len < 0) || (offset > (data.length - len))) { throw new IllegalArgumentException(); } nativeOperation(data, offset, len); } static { // Load native library in static initializer of class System.loadLibrary("NativeMethodLib"); } } |
Exceptions
JN100-J-EX0: Native methods that do not require security manager checks, validation of arguments or return values, or defensive copying of mutable inputs (for example, the standard C function int rand(void)
) do not need to be wrapped.
...
Automated detection is not feasible in the fully general case. However, an approach similar to Design Fragments [Fairbanks 2007] could assist both programmers and static analysis tools.
Tool | Version | Checker | Description |
---|---|---|---|
Parasoft Jtest | 9.5 | SECURITY.IBA.NATIW | Implemented |
Related Guidelines
CWE-111, Direct Use of Unsafe JNI | |
Guideline 5-3 / INPUT-3: Define wrappers around native methods |
...