HomeAbout Us A-Z IndexSearch * Contact Us Register LoginPress Shop

The Open Brand -- Problem Reporting and Interpretations System


Problem Report 1668 Details

Help 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:

     

    Back   


Contact the Certification Authority