Introduction
We would like to advise you of a set of situations that
Hewlett-Packard has identified with MPE/iX software which, in very rare
circumstances, could lead to data corruption on HP e3000 systems running MPE/iX
Releases 6.5, 7.0, and 7.5. Hewlett-Packard has software patches for these
releases ready to correct these situations, MPENX11 and MILNX10, available at
the HP ITRC (http://itrc.hp.com/) or via your HP Support Representative. Though
Hewlett-Packard believes very few, if any, customers are at risk, HP strongly
recommends that all customers take the following corrective actions:
• Install MPENX11 and MILNX10 at your earliest possible convenience (see the
patch descriptions below) • Your non-HP applications may be impacted: examine
the applications running on your systems to determine if they meet the
criteria to require a recompile (see the notes on patch MILNX10 below).
November 2nd, 2007 Update: FAQ now available here.
Patch MPENX11 addresses the following issues with MPE/iX:
1) SORT.PUB.SYS and programmatic calls to HPSORTOUTPUT: Customers on MPE/iX
Release 6.5, 7.0 or 7.5 who sort 4GB or more of data are at risk. When either
interface is used to sort more than 4GB of data, the returned record length
could in rare instances be corrupted. If the record length returned is less than
it should be then data could be lost.
2) MPE/iX OS millicode handling of long pointer access to large files: When the
OS copies data from a long pointer location only one byte from a range is moved
if, and only if that range starts six, five, four, three or two bytes from the
end of a four gigabyte space and the length of the move transfers all remaining
bytes of the space. No other source address or transfer length combinations are
affected nor are transfers to such addresses. See the section
What is the issue for more information.
Patch MILNX10 addresses potential issues with non-HP Software:
It is possible for non-HP Software to have an issue similar to the MPE/iX OS
millicode issue described above and thus be at risk of corrupting data.
Addressing this issue may require that non-HP Software be recompiled after
installation of MILNX10.
Recompilation is not required for programs reading data exclusively through
MPE/iX File System intrinsics like FREAD, FREADDIR or HP compiler library file
access routines such as C/iX read(), Pascal/iX read(), COBOL READ, as long as
patch MPENX11 is installed. A recompile may be required if customers and ISVs
have written code to read data from files four gigabytes and larger using
Large
Mapped pointers, AND used move_fast or code statements that result in a call to
$$lr_unk_unk_long or $$lr_na_unk_long. Then, as in the OS issue above, if data
is moved starting at locations six or fewer bytes from the end of a four
gigabyte boundary, millicode could silently move less than the requested amount
of data. HP recommends that customers and ISVs rebuild any applications which
read data from large files via long pointers to include the new version of the
$$lr_unk_unk_long and $$lr_na_unk_long routines via the new MILLI.LIB.SYS
delivered in MILNX10.
Additional information about these issues can be found in the following
sections.
The impacted code involves the “millicode” routines $$lr_unk_unk_long,
which implement the PASCAL predefined function “move_fast” and
$$lr_na_unk_long. These millicode routines are also used by HP's
Pascal and C compilers to implement data movement operations for addresses
referenced by Long Pointers. The
following table describes the five combinations of long pointer source address
and move length that exhibit the issue.
|
Source
value (in hex) |
Length
value |
Destination Alignment |
|
$SID.fffffffa |
6 |
any |
|
$SID.fffffffb |
5 |
any |
|
$SID.fffffffc |
4 |
non-word
aligned |
|
$SID.fffffffd |
3 |
any |
|
$SID.fffffffe |
2 |
any |
When these combinations of parameters are
passed, the impacted version of the millicode will move only one byte of the range. No
other source address, destination address, or transfer length combinations are affected.
Software Supplied by HP
Patch MPENX11 addresses these issues for all HP e3000 FOS and
SUBSYS software.
Software written for your own use
The good news for your own applications is that with MPENX11 programs which
simply call FREAD, FREADDIR or use a language's specific equivalent functions
like COBOL READ, Pascal/iX read() and C/iX read() are not exposed to this issue.
To be at risk a programmer must have taken some very specific actions.
These are:
1) You must open Large Files -- If you don't
use MPE Files which are capable of containing more than 4GB minus 64KB of data then you
won't have a issue. See
Looking for Large Files on
your system for more information.
2) You must be using long pointers to access data in a file 4GB minus 64KB or larger.
To use a long pointer in a user mode application, it must have been written in
C/iX or Pascal/iX AND have called HPFOPEN with a unique itemnum. Details:
a) The only HP supplied compilers which support long
pointers are Pascal/iX and C/iX. Programs written in other HP
languages such as COBOL and Fortran cannot directly create or access long pointers.
See Looking for Long Pointers in
Program Source section for additional information in recognizing long
pointers in your code.
b) To obtain a long pointer to a large file, user mode code must call HPFOPEN using itemnum 87,
the "Large Mapped Access" option. Please refer to the MPE/iX Intrinsics manual
at:
http://docs.hp.com/en/32650-90905/ch07s29.html for more information
about Large Mapped Access.
3) You must then move data in these files using Pascal/iX move_fast() or your own byte
copy routines which result in calls to $$lr_unk_unk_long or $$lr_na_unk_long in conjunction with the five
address & length combinations shown above in "What
is the issue?". Calls to other Pascal/iX "move" functions or
to HP intrinsics such as HPFMOVEDATA, HPFMOVEDATALTOR or HPFMOVEDATARTOL are all safe as long as you've
installed MPENX11.
Regardless of the current state of your applications HP recommends that all
customers install MPENX11 and MILNX10.
The following sections provide further details to assist customers and
ISVs in
assessing their software's susceptibility to these issues.
Large Files are
defined as files built with a file limit
allowing more than 4GB minus 64KB of data to be stored. In assessing your risk we
advise you to take the following steps.
1) You can look for Large Files that are currently on your system in a
number of ways. See
http://docs.hp.com/en/30216-90291/ch03s01.html
for details about changes to HP intrinsics which allow programmers to gather
information about Large Files. HP has written a tool called FILECHEK that
will look at all PERMANENT files on your system and determine if they are
susceptible to the issues.
 |
 |
 |
 |
 |
CAUTION: Simply running this tool is not
sufficient to determine if your applications and files are susceptible to
this issue. This tool can only detect files currently on your system
which exist in the MPE/iX PERMANENT domain. This program does not
detect files built in a JOB or SESSION's TEMPORARY domain. |
 |
 |
 |
 |
For more information on FILECHEK click here.
2) You should monitor your system for Large Files usage including those built for
temporary use by turning on MPE/iX System Logging type 105 (NM File Close) records.
Type 305 records will be created whenever any Large File is closed. Type
105 and type 205 records will also be generated but can be ignored as they do
not indicate the presence of a Large File. See Chapter 6 of the "System
Startup, Configuration, and Shutdown Reference Manual"
http://docs.hp.com/en/32650-90907/ch06.html
for more information about MPE/iX System Logging.
 |
 |
 |
 |
 |
CAUTION: Enabling the logging of NM File Close
records may cause System Log files to be filled and created at a faster than
normal rate -- care should be taken that adequate disk space is maintained on
LDEV 1 or serious issues can result. |
 |
 |
 |
 |
If you do find large files or see type
305 records in your system logs you will need to determine the applications
which are using these files and investigate their susceptibility these
issues; see "Looking for Long
Pointers in Program Source" for information on evaluating your
application code. Remember patch MPENX11 addresses these issues for all HP
e3000 FOS and SUBSYS software.
You should scan the source code of your applications for possible long pointer usage to
determine your susceptibility to these issues.
The only HP supplied compilers which allow "long pointer"
usage are C/iX and Pascal/iX. COBOL, Fortran and other HP
supplied languages do not allow long pointer usage; programs and library
functions written in those languages require no direct changes. To obtain a long pointer to a large file, user mode code must call HPFOPEN using itemnum
87, the "Large Mapped Access" option. HP recommends that any
application written in C/iX or Pascal/iX making a call to HPFOPEN with itemnum
87 be recompiled and relinked after the installation of MILNX10 in order to
ensure the new millicode routines are used.
Here are two code
fragments which illustrate how a long pointer obtained from HPFOPEN itemnum 87
might be declared in C/iX and Pascal/iX:
C/iX
/* long pointers are declared with "^" rather than "*" */
char ^long_file_data_ptr;
Pascal/iX
. . .
{ long pointers are declared with $extaddr$ compiler directive }
long_file_data_ptr : ^ $extaddr$ array [1..recsize] of char;
{ globalanyptr type is a long pointer }
global_file_data_ptr : globalanyptr;
{ anyptr type is a long pointer, could have an issue later }
any_file_data_ptr : anyptr;
Remember that simply having a long pointer declared does
not automatically mean you are susceptible to these issues. These
pointers must be used to move data from a large file via calls to move_fast() or
other compiler statement which resolve to $$lr_unk_unk_long or $lr_na_unk_long
order to be susceptible.
In summary, patches MPENX11 and MILNX10 address these issues for all HP
e3000 FOS and SUBSYS software. In house applications developed in C/iX or
Pascal/iX will require addition analysis to determine if they should be
recompiled (as described above in "What to look for").
Questions about other applications should be directed to the software support
provider for that application. If you have questions or require help, please
contact your local HP support representative or sales office.
|