<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:12.0pt;
font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
span.EmailStyle18
{mso-style-type:personal-reply;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:11.0pt;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="en-DE" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">Regarding calloc – checking ,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">jdk.incubator.vector/unix/native/libsleef<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">seems to have quite a lot of callocs without a NULL check afterwards , but afaik it is 3rd party coding so we will probably not touch it.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">For sunFont.c I see no direct handling after calloc in the C code :<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-67- */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-68-JNIEXPORT jlong JNICALL Java_sun_font_NullFontScaler_getGlyphImage<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-69- (JNIEnv *env, jobject scaler, jlong pContext, jint glyphCode) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c:70: void *nullscaler = calloc(1, sizeof(GlyphInfo));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-71- return ptr_to_jlong(nullscaler);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-72-}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-73-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">--<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-303-JNIEXPORT jlong JNICALL<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-304-Java_sun_font_StrikeCache_getInvisibleGlyphPtr(JNIEnv *env, jclass cls) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-305-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c:306: GlyphInfo *info = (GlyphInfo*) calloc(1, sizeof(GlyphInfo));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-307- return (jlong)(uintptr_t)info; /* invisible glyph */<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.desktop/share/native/libfontmanager/sunFont.c-308-}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">(but in the Java coding calling this, we seem to have some special checks for 0, so maybe it is fine)
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">Here
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.base/windows/native/libjli/java_md.c:951: appArgIdx = calloc(argc, sizeof(int));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.base/windows/native/libjli/java_md.c-952- for (i = idx, j = 0; i < stdargc; i++) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.base/windows/native/libjli/java_md.c-953- if (isTool) { // filter -J used by tools to pass JVM options<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">java.base/windows/native/libjli/java_md.c-954- arg = stdargs[i].arg;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">we seem to miss a check, should I open a JBS issue ?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US">Best regards, Matthias<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="en-DE" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Thomas Stüfe <thomas.stuefe@gmail.com>
<br>
<b>Sent:</b> Friday, 11 July 2025 18:19<br>
<b>To:</b> Baesken, Matthias <matthias.baesken@sap.com><br>
<b>Cc:</b> build-dev@openjdk.org<br>
<b>Subject:</b> Re: malloc/calloc return value NULL check<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Absolutely, yes. <o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The larger the allocated size, the more important. Linux kernel, by default, only protects a small area against NULL accesses; depending on distro, 4KB or 64 (?) KB. And the JVM, at various places, allocates in low-area ranges. So accessing
NULL+<large offset> can actually land you at a valid unrelated address instead of faulting.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">/Thomas<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Fri, Jul 11, 2025 at 2:57<span style="font-family:"Arial",sans-serif"> </span>PM Baesken, Matthias <<a href="mailto:matthias.baesken@sap.com">matthias.baesken@sap.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">Hi, when playing around with the GCC static analyzer (
<a href="https://developers.redhat.com/articles/2022/04/12/state-static-analysis-gcc-12-compiler" target="_blank">
https://developers.redhat.com/articles/2022/04/12/state-static-analysis-gcc-12-compiler</a> ) I noticed</span><span lang="en-DE"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">a lot of complaints about missing NULL checks of malloc/calloc return values in the code base.</span><span lang="en-DE"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US"> </span><span lang="en-DE"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">While we check these return values for NULL at a lot of places in the codebase, it is not done always.</span><span lang="en-DE"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">Should we do it always (except 3<sup>rd</sup> party code probably where we do not want to have large diffs to upstream) ?</span><span lang="en-DE"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US"> </span><span lang="en-DE"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">Or is it considered not important enough to do it always?</span><span lang="en-DE"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US"> </span><span lang="en-DE"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">Best regards, Matthias</span><span lang="en-DE"><o:p></o:p></span></p>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</body>
</html>