|
Home About Us A-Z Index Search * Contact Us Register Login Press ShopThe Open Brand -- Problem Reporting and Interpretations System |
Problem Report 1668 Details
Show help | Quick Search | Submit a Test Suite Support Request | Click here to view your privileges
This page provides all information on Problem Report 1668.
Report 1668 Actions
Problem Report Number 1668 Submitter's Classification Test Suite problem State Resolved Resolution Rejected (REJ) Problem Resolution ID REJ.X.0472 Raised 2000-08-11 08:00 Updated 2003-03-13 08:00 Published null Product Standard Internationalised System Calls and Libraries Extended V2 (UNIX 98) Certification Program The Open Brand certification program Test Suite VSU version 5.1.1 Test Identification CAPI.os/ioprim/writev 76,77 Problem Summary PG4U.00175 The tests receive a SIGXFSZ because the maximum file size for files created in VSU_LFS_DIR is not always >= 2^32 as required by the test suite. Problem Text
This failure also exists in the same test in VSU 5.0.4.
We had several discussions with the consultants about this and have not a
reached a conclusion, below is a summary of our arguments.
These tests do the following:
1) in an executable with a 32 bit off_t, create a file
2) exec an 64 bit off_t executable and pass the file descriptor
created above.
3) in the 64 bit off_t executable, lseek to the 32 bit maximum offset.
4) in the 64 bit off_t executable, attempt to write 4 bytes using
writev(). This write should write past the maximum 32 bit offset.
writev() should return -1 and errno corresponding to EFBIG,
However, since the write causes the 32 bit file size limit to be exceeded,
our implementation sends a SIGXFSZ(signal 25). Since t76lrgoff* and t77lrgoff*
do not have a signal handler to catch this, they abort instead returning back
to the small off_t program. Adding a signal handler to catch SIGXFSZ in the
large off_t program, shows that our writev returns -1 and EFBIG as required
by the XPG spec.
the spec states the following:
"RLIMIT_FSIZE This is the maximum size of file in bytes that may be created
by a process. If a write or truncate operation would cause this
limit to exceed, SIGXFSZ is generated for the thread. If the
thread is blocking, or the process is catching or ignoring
SIGXFSZ, continued attempts to increase the size of a file from
end-of-file to beyond the limit will fail with errno set to
[EFBIG]."
As these testcases do a write that exceeds the maximum file size for a small
off_t file and the tests do not ignore or catch SIGXFSZ, our implementation
generates the SIGXFSZ as required.
Also note that the test output has the following statement.
TEST: Execute a program compiled in XBS5_ILP32_OFF32(32-bit off_t)
environment that:
opens a regular file
execs a program compiled in XBS5_ILP32_OFFBIG(64-bit off_t) environment,
The file in question is created in a 32-bit off_t program and is a regular
file. On our implementation the file size limit for this type of file is 2GB.
Just creating a file on a LFS enabled filesystem/directory is not
enough to make the file created LFS enabled. The file type is set at creation
time and does not change just because the file is being accessed by a 64 bit
off_t (LFS enabled) program.Test Output
************************************************************************
/tset/CAPI.os/ioprim/writev/T.writev 76 Unresolved
Test Description:
Base Conditional Deviance
If the implementation allows creation of a file description with an
offset maximum less than the largest size it supports for an off_t:
EFBIG in errno and return -1 on a call to ssize_t writev(int fildes,
const struct iovec *iov, int iovcnt) when the file is a regular file,
nbyte is greater than zero, and the starting position is equal to the
offset maximum established in the open file description associated
with fildes.
Test Information:
PREP: Check for existence of programming environments
PREP: Obtain off_t size in XBS5_ILP32_OFF32 environment
PREP: Obtain off_t size in XBS5_ILP32_OFFBIG environment
INFO: Execution environment for XBS5_LP64_OFF64 not supported
INFO: Execution environment for XBS5_LPBIG_OFFBIG not supported
TEST: Execute a program compiled in XBS5_ILP32_OFF32(32-bit off_t)
environment that:
opens a regular file
execs a program compiled in XBS5_ILP32_OFFBIG(64-bit off_t)
environment,
passing it the open file descriptor
this program:
sets the offset equal to the value that can be
represented in a 32-bit off_t,
verifies writev returns -1 and sets errno to EFBIG
ERROR: In 32-bit program: ERROR: Child terminated due to signal 25
************************************************************************
************************************************************************
/tset/CAPI.os/ioprim/writev/T.writev 77 Unresolved
Test Description:
Base Conditional Deviance
If the implementation allows creation of a file description with an
offset maximum less than the largest size it supports for an off_t:
EFBIG in errno and return -1 on a call to ssize_t writev(int fildes,
const struct iovec *iov, int iovcnt) when the file is a regular file,
nbyte is greater than zero, and the starting position is greater than
the offset maximum established in the open file description associated
with fildes.
Test Information:
PREP: Check for existence of programming environments
PREP: Obtain off_t size in XBS5_ILP32_OFF32 environment
PREP: Obtain off_t size in XBS5_ILP32_OFFBIG environment
INFO: Execution environment for XBS5_LP64_OFF64 not supported
INFO: Execution environment for XBS5_LPBIG_OFFBIG not supported
TEST: Execute a program compiled in XBS5_ILP32_OFF32(32-bit off_t)
environment that:
opens a regular file
execs a program compiled in XBS5_ILP32_OFFBIG(64-bit off_t)
environment,
passing it the open file descriptor
this program:
sets the offset to a value greater than what can be
represented in 32-bit off_t,
verifies writev returns -1 and sets errno to EFBIG
ERROR: In 32-bit program: ERROR: Child terminated due to signal 25
************************************************************************Review Information
Review Type TSMA Review Start Date null Completed null Status Complete Review Recommendation No Resolution Given Review Response
The per-process file size limit (set using RLIMIT_FSIZE) is not relevant
to this issue. A version of the test that has been modified to set the
limit to RLIM_INFINITY has been tried by the submitter and the test
still fails. Therefore the issue relates only to the maximum file size
imposed by the system.
The test suite expects the maximum file size for regular files created
in the VSU_LFS_DIR directory to be greater than 2^32 bytes. This is a
documented requirement on the VSU_LFS_DIR parameter, and writev tests
76 and 77 depend on it. It appears that on the submitter's system,
this condition is only satisfied if the file is created by a 64-bit
executable. When the tests create a file there from a 32-bit
executable, the limit is being set to 2^31 bytes, and so the test
receives a SIGXFSZ when it tries to write past that limit.
The question is whether it is valid for the test suite to assume that
regular files created in a particular directory (e.g. the one specified
by VSU_LFS_DIR) will either always have a maximum size that is at least
2^32 bytes or always have a maximum size that is less than 2^32 bytes.
The answer can be determined from the required behaviour of a call to
pathconf(VSU_LFS_DIR, _PC_FILESIZEBITS). Specifically, the note in the
description of pathconf:
"If path or fildes refers to a directory, the value returned
applies to filenames within the directory."
and the definition of FILESIZEBITS in <limits.h>:
"Minimum number of bits needed to represent, as a signed integer
value, the maximum size of a regular file allowed in the specified
directory"
clearly show that on a UNIX98-compliant system, the minimum number of
bits needed to represent the maximum size of regular files in one
particular directory must be the same for all of the files in that
directory. Therefore the assumption by the test suite concerning
VSU_LFS_DIR is valid, and the writev test failures are due to a
non-compliance of the system.
It is recommended that this request is refused.
Review Type SA Review Start Date null Completed null Status Complete Review Resolution Rejected (REJ) Review Conclusion
This request is refused.
Problem Reporting System Options:
- View Report 1668
- List All PRs
- Search Reports
- Email the System Administrator
- View the The Open Brand Interpretations Database User Manual
Contact the Certification Authority