On Mon, 15 Nov 2021 09:59:44 GMT, David Holmes <dhol...@openjdk.org> wrote:

>> jmm_GetDiagnosticCommandArgumentsInfo and jmm_GetDiagnosticCommandInfo are 
>> used to query the hotspot about diagnostic commands. They provide output 
>> arrays for the information:
>> 
>> 
>> void jmm_GetDiagnosticCommandArgumentsInfo(JNIEnv *env,
>>           jstring command, dcmdArgInfo* infoArray)
>> 
>> 
>> but array size is implicitly assumed to be known to both caller and callee. 
>> Caller and callee negotiate those sizes in prior steps, but things can go 
>> wrong. E.g. I recently hunted a bug where `DCmd::number_arguments()` was off 
>> - did not reflect the real number of its jcmd parameters - which led to a 
>> hidden memory overwriter.
>> 
>> Thankfully, JDK-8264565 rewrote the dcmd framework to deal with this 
>> particular issue (The VM I analyzed was older). Still, it would be good if 
>> we had additional safety measures here.
>> 
>> -------------
>> 
>> Testing:
>> - manual tests with artificially induced error in one dcmd for debug, release
>> - GHAs (which include tier1 serviceability jcmd tests which use JMX and 
>> exercise these APIs)
>
> src/hotspot/share/services/management.cpp line 1968:
> 
>> 1966: 
>> 1967: JVM_ENTRY(void, jmm_GetDiagnosticCommandInfo(JNIEnv *env, jobjectArray 
>> cmds,
>> 1968:           dcmdInfo* infoArray, jint count))
> 
> I do not see the point of the change in this case. This doesn't check for a 
> mismatch between an "external" and "internal" value but between two external 
> values. If you don't trust the caller to size infoArray correctly then how 
> can you trust them to pass in the right "count" ?

Well, it warns in case of programming errors. I agree, that programming error 
is very unlikely since the caller has all the information he needs. And he 
could pass in the wrong count. 

Idk. Mostly I changed this interface to follow the established pattern of 
always passing in an explicit output buffer size. And to keep it symmetric 
to``jmm_GetDiagnosticCommandArgumentsInfo` and `jmm_GetGCExtAttributeInfo`. If 
you object, I'll remove this part.

-------------

PR: https://git.openjdk.java.net/jdk/pull/6363

Reply via email to