[ibis-quality] BUG248

  • From: "Wolff Randy" <dmarc-noreply@xxxxxxxxxxxxx> ("randy.wolff")
  • To: "ibis-quality@xxxxxxxxxxxxx" <ibis-quality@xxxxxxxxxxxxx>
  • Date: Mon, 1 Apr 2024 20:00:43 +0000

BUG248 draft1 and supporting documents for final discussion in the IBIS Quality 
task group tomorrow.

Randy

From: Mirmak, Michael <michael.mirmak@xxxxxxxxx>
Sent: Tuesday, March 19, 2024 3:04 PM
To: info@xxxxxxxx
Cc: Wolff, Randy (DI SW EBS PST AV) <randy.wolff@xxxxxxxxxxx>; 
lance.wang@xxxxxxxx
Subject: BUG Report - Crash Caused by iassert macro and abort()

Please find enclosed a BUG report against ibischk7, version 7.2.1.

The enclosed .ami file contains non-7-bit ASCII characters and so cannot be 
included in the .txt file form.

The image file enclosed shows the Microsoft Visual C++ Runtime Library error 
message generated when ibischk7_64.exe crashes due to the abort() call.

Comments and questions are welcome.  Thank you!

Michael Mirmak
Signal Integrity Technical Lead
Data Center Platform Applications Engineering
Intel Corporation
FM5-239 1900 Prairie City Rd.  Folsom, CA 95630 USA
michael.mirmak@xxxxxxxxx<mailto:michael.mirmak@xxxxxxxxx>
(916) 356-4261 (direct)

Attachment: crash-59fde231108c8156c7285a9eec94fc4661b61dc7.ami
Description: crash-59fde231108c8156c7285a9eec94fc4661b61dc7.ami

Attachment: crash-message-windows.jpg
Description: crash-message-windows.jpg

******************************************************************************
********************* IBIS GOLDEN PARSER BUG REPORT FORM *********************
******************************************************************************

INSTRUCTIONS

To report a bug in the IBIS golden parser.  Please fill out the top part
of the following form and send the complete form to info@xxxxxxxx.

A list of reported bugs is maintained at http://ibis.org/bugs/ibischk/ ;.

******************************************************************************

PARSER VERSION NUMBER: 7.2.1

PLATFORM (SPARC, HP700, PC, etc.): PC

OS AND VERSION: Microsoft Windows 11 Enterprise 22H2, Build 22621.3296

REPORTED BY: Michael Mirmak, Intel Corporation

DATE: March 19, 2024

DESCRIPTION OF BUG:

Executing the following command on the enclosed .ami file results in a crash of 
ibischk7_64:

        ibischk7_64.exe -ami crash-59fde231108c8156c7285a9eec94fc4661b61dc7.ami

The generated output is shown at the bottom of this section.  A Microsoft 
Visual C++ error 
message dialog box is also generated by the crash.

Without modification of the source code, any software which incorporates
ibischk7 as a library will itself be forced to crash as a result of this error.

This behavior is caused by the file cmn.c, line 610, in which the macro 
"iassert" is called:

        iassert(*pv != NULL);
 
The "iassert" macro is itself defined in the file ibis_chk.h, on line 269:

        #define iassert(ex) if (!(ex)) {fprintf(stdout,"%s:%d:assertion 
failed.\n",__FILE__,__LINE__);fflush(stdout);abort();}

The "abort()" call at the end of the macro causes abnormal termination of the 
program.

Note that this issue was discovered as the result of "fuzzing testing", a 
recent software testing
technique where command-line, UI, and library inputs are deliberately subject 
to incorrectly typed, 
overly-long, or incorrectly formatted data to test software error-handling 
routines.  Fuzzing
testing is becoming increasingly popular for automatic security analysis of 
software.

The enclosed .ami file generates the following output:

IBISCHK7 V7.2.1
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal non-7-bit ASCII character (code b5).  - To 
fix, save file in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal NUL character (code 0).  - To fix, save file 
in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal NUL character (code 0).  - To fix, save file 
in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal NUL character (code 0).  - To fix, save file 
in MS_DOS format and remove .txt extension.
ERROR (line    1) - Found illegal NUL character (code 0).  - To fix, save file 
in MS_DOS format and remove .txt extension.
ERROR - Parsing aborted
..\..\cmn.c:610:assertion failed.

**********************

The following feedback from a parser code user is relevant for a fix:

We build and deliver ibischk without IASSERT defined, so we do not use the 
iassert() macro.  It’s been this way for quite a while, 
though I don’t know for sure that we’ve never used iassert().  The macro 
appears in many places, but only seems to be intended to 
help the developer catch bug conditions during development.  It might be 
reasonable to leave it enabled in production code just in 
case the information it gives can help diagnose problems.

If (and only if) I build ibischk for (Tool A) with IASSERT defined, the test 
case .ami file does cause (Tool A) to crash.  But the 
iassert() instance that triggers abort() in this case is not catching a real 
problem.  Here’s the code:

void
CMN_freeSetNull(void **pv)
{
   iassert(*pv != NULL);

#ifdef ITRACE
   printf("%s:memptr:%lu:free\n",__FILE__,(UL)(*pv));
#endif

   free(*pv);
   *pv = 0;
}

There’s nothing illegal about calling the C runtime function free() with a 
NULL pointer.  During development, we might turn on the 
ITRACE behavior, which requires that *pv != NULL.  But outside of development, 
no problem.

We can rethink our build policy of leaving IASSERT undefined â€“ it’s not a 
bad idea to have the iassert() macro enabled.  But first, 
I think the parser code should move the call to iassert() above inside the 
#ifdef ITRACE / #endif block.  Then, to make iassert() 
more friendly towards integration within a parent application, I would look 
into making it throw an exception instead of calling 
abort().

INSERT IBIS FILE DEMONSTRATING THE BUG:

Supporting files are found in the 
https://ibis.org/bugs/ibischk/supporting_files directory:

- crash-59fde231108c8156c7285a9eec94fc4661b61dc7.ami (this file contains 
non-7-bit ASCII characters and so cannot be included in this form)
- crash-message-windows.jpg (this shows the Microsoft Visual C++ Runtime 
Library error message generated when ibischk7 aborts)

******************************************************************************
******************** BELOW FOR ADMINISTRATION AND TRACKING *******************
******************************************************************************

BUG NUMBER: 248

SEVERITY: [FATAL, SEVERE, MODERATE, ANNOYING, ENHANCEMENT]  [FATAL]

PRIORITY: [HIGH, MEDIUM, LOW]                               [MEDIUM]

STATUS: [OPEN, CLOSED, WILL NOT FIX, NOT A BUG]             [OPEN]

FIXED VERSION:

FIXED DATE:

NOTES ON BUG FIX:


******************************************************************************
******************************************************************************

Other related posts:

  • » [ibis-quality] BUG248 - Wolff Randy