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

The Open Brand -- Problem Reporting and Interpretations System


Problem Report 1586 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 1586.


Report 1586 Actions


    Problem Report Number 1586
    Submitter's Classification Specification problem
    State Resolved
    Resolution Permanent Interpretation (PIN)
    Problem Resolution ID PIN.X.0143
    Raised 1995-11-06 08:00
    Updated 2003-03-13 08:00
    Published 1995-11-09 08:00
    Product Standard Internationalised System Calls and Libraries Extended (UNIX 95)
    Certification Program The Open Brand certification program
    Test Suite VSU version 4.0.2
    Test Identification CAPI.os/procenv/setrlimit 4 10 11 18 19 20 21
    Specification System Interfaces and Libraries Issue 4 Version 2
    Location in Spec See Problem Text
    Linked Problem Reports PIN4U.00002, (in, old, system)
    Problem Summary PIN4U.00009 The test may fail on implementations where default processes can not raise their stack or data limits.
    Problem Text
    The test may fail on implementations where default processes can not
    raise their stack or data limits.

    setrlimit test 4, 10, 11, 18, 19, 20, 21 fails because test assumes that
    as long as the current limit is not RLIMIT_INFINITY, then the setrlimit
    call can always raise the soft and hard limits by 1. On our system, the
    setrlimit call fails (for RLIMIT_DATA and RLIMIT_STACK) and the errno is
    set to EINVAL. The following tests also fail for the same reason:

    execl() Test 5, 8
    execle() Test 5, 8
    execlp() Test 5, 8
    execlv() Test 5, 8
    execlve() Test 5, 8
    execlvp() Test 5, 8
    execlvp() Test 5, 8

    The getrlimit spec states:

    Specifying RLIM_INFINITY as any resource limit value on a
    successful call to setrlimit() inhibits enforcement of that
    resource.

    The key phrase here seems to us to be "sucessful call". If an
    implementation places some physical limit on a resource then
    a call to getrlimit(RLIM_INFINITY) for that resource should
    fail since enforcement of resource limits can not be inhibited
    in that case.

    Although the spec mandates no specific error message in this
    situation, Section 2.3 of the spec states

    Implementations may support additional errors not
    included in this list, may generate errors included in
    this list under circumstances other than those
    described here, or may contain extensions or
    limitations that prevent some errors from occurring.

    This implies the error number returned in this case is implementation
    defined. This is the gray area in the spec and wd recommend for a
    permanent interpretation.

    Reference doc: PIN4U.00002
    Test Output
    TEST CASE: setrlimit

    TEST PURPOSE #4
    If the implementation does not inhibit enforcement of
    limits for a resource:
    A call to int setrlimit(int resource, const struct
    rlimit *rlp) shall allow both soft and hard limits to
    be set in a single call.
    PREP: Obtain the limits for RLIMIT_CORE
    INFO: Limits for RLIMIT_CORE are not enforced on this system
    PREP: Obtain the limits for RLIMIT_CPU
    INFO: Limits for RLIMIT_CPU are not enforced on this system
    PREP: Obtain the limits for RLIMIT_DATA
    TEST: Call to setrlimit(RLIMIT_DATA, rlp) allows
    a process to change its soft and hard limits
    in the same call
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    4 FAIL

    TEST PURPOSE #10
    If the implementation does not inhibit enforcement of
    limits for the resource RLIMIT_DATA:
    A call to int setrlimit(int resource, const struct
    rlimit *rlp) when resource is RLIMIT_DATA shall set
    the soft and hard limits for the maximum size of the
    data segment in bytes for the calling process from the
    structure pointed to by rlp.
    PREP: Check if the limits are enforced
    TEST: Call to setrlimit() shall set
    the soft and hard limits for RLIMIT_DATA
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    10 FAIL

    TEST PURPOSE #11
    If the implementation does not inhibit enforcement of
    limits for the resource RLIMIT_DATA:
    When the data segment size of the calling process
    exceeds the limit set by a call to int setrlimit(int
    resource, const struct rlimit *rlp) for resource
    RLIMIT_DATA brk(), malloc(), and sbrk() shall fail and
    set errno to ENOMEM.
    PREP: Check if the limits are enforced
    PREP: Obtain the system page size by call to
    sysconf(_SC_PAGESIZE)
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    11 UNRESOLVED

    TEST PURPOSE #18
    If the implementation does not inhibit enforcement of
    limits for the resource RLIMIT_STACK:
    A call to int setrlimit(int resource, const struct
    rlimit *rlp) when resource is RLIMIT_STACK shall set
    the soft and hard limits for the maximum size of the
    stack in bytes of the calling process from the
    structure pointed to by rlp.
    PREP: Check if the limits are enforced
    TEST: Call to setrlimit(RLIMIT_STACK, rlp) shall
    set the soft and hard limits for the maximum
    size of the stack
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    18 FAIL

    TEST PURPOSE #19
    If the implementation does not inhibit enforcement of
    limits for the resource RLIMIT_STACK:
    When the size of the stack for the calling process
    would exceed the limit set by a call to int
    setrlimit(int resource, const struct rlimit *rlp) for
    resource RLIMIT_STACK the implementation shall not
    automatically grow the stack.
    PREP: Save the current stack limits
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    19 UNRESOLVED

    TEST PURPOSE #20
    If the implementation does not inhibit enforcement of
    limits for the resource RLIMIT_STACK:
    When the size of the stack for the calling process
    exceeds the limit set by a call to int setrlimit(int
    resource, const struct rlimit *rlp) for resource
    RLIMIT_STACK the process shall receive a SIGSEGV
    signal.
    PREP: Save the current stack limits
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    20 UNRESOLVED

    TEST PURPOSE #21
    If the implementation does not inhibit enforcement of
    limits for the resource RLIMIT_STACK:
    When the size of the stack for the calling process
    exceeds the limit set by a call to int setrlimit(int
    resource, const struct rlimit *rlp) for resource
    RLIMIT_STACK and the process is blocking or ignoring
    SIGSEGV, or is catching SIGSEGV and has not made
    arrangements to use an alternate stack, the
    disposition of SIGSEGV shall be set to SIG_DFL before
    it is generated.
    PREP: Obtain the current stack limits
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    21 UNRESOLVED

    TEST CASE: execl

    TEST PURPOSE #5
    On a successful call to int execl(const char *path,
    const char *arg0, .../*, (char *)0 */) the new process
    shall inherit its RLIMIT_DATA resource limits from the
    calling process image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_DATA
    PREP: Fork child
    PREP: Wait for child
    ERROR: Child status = 0x100
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_DATA to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    5 UNRESOLVED

    TEST PURPOSE #8
    On a successful call to int execl(const char *path,
    const char *arg0, .../*, (char *)0 */) the new process
    shall inherit its RLIMIT_STACK resource limits from
    the calling process image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_STACK
    PREP: Fork child
    PREP: Wait for child
    ERROR: Child status = 0x100
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_STACK to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    8 UNRESOLVED




    TEST CASE: execle

    TEST PURPOSE #5
    On a successful call to int execle(const char *path,
    const char *arg0, ... /*, (char *0), char *const
    envp[]*/) the new process shall inherit its
    RLIMIT_DATA resource limits from the calling process
    image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_DATA
    PREP: Fork child
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_DATA to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    PREP: Wait for child
    ERROR: Child status = 0x100
    5 UNRESOLVED

    TEST PURPOSE #8
    On a successful call to int execle(const char *path,
    const char *arg0, ... /*, (char *0), char *const
    envp[]*/) the new process shall inherit its
    RLIMIT_STACK resource limits from the calling process
    image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_STACK
    PREP: Fork child
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_STACK to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    PREP: Wait for child
    ERROR: Child status = 0x100
    8 UNRESOLVED




    TEST CASE: execlp

    TEST PURPOSE #5
    On a successful call to int execlp(const char *file,
    const char *arg0, ... /*, (char *0)*/) the new process
    shall inherit its RLIMIT_DATA resource limits from the
    calling process image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_DATA
    PREP: Fork child
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_DATA to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    PREP: Wait for child
    ERROR: Child status = 0x100
    5 UNRESOLVED

    TEST PURPOSE #8
    On a successful call to int execlp(const char *file,
    const char *arg0, ... /*, (char *0)*/) the new process
    shall inherit its RLIMIT_STACK resource limits from
    the calling process image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_STACK
    PREP: Fork child
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_STACK to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    PREP: Wait for child
    ERROR: Child status = 0x100
    8 UNRESOLVED




    TEST CASE: execv

    TEST PURPOSE #5
    On a successful call to int execv(const char *path,
    char *const argv[]) the new process shall inherit its
    RLIMIT_DATA resource limits from the calling process
    image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_DATA
    PREP: Fork child
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_DATA to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    PREP: Wait for child
    ERROR: Child status = 0x100
    5 UNRESOLVED

    TEST PURPOSE #8
    On a successful call to int execv(const char *path,
    char *const argv[]) the new process shall inherit its
    RLIMIT_STACK resource limits from the calling process
    image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_STACK
    PREP: Fork child
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_STACK to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    PREP: Wait for child
    ERROR: Child status = 0x100
    8 UNRESOLVED




    TEST CASE: execve

    TEST PURPOSE #5
    On a successful call to int execve(const char *path,
    char *const argv[], char *const envp[]) the new
    process shall inherit its RLIMIT_DATA resource limits
    from the calling process image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_DATA
    PREP: Fork child
    PREP: Wait for child
    ERROR: Child status = 0x100
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_DATA to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    5 UNRESOLVED

    TEST PURPOSE #8
    On a successful call to int execve(const char *path,
    char *const argv[], char *const envp[]) the new
    process shall inherit its RLIMIT_STACK resource limits
    from the calling process image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_STACK
    PREP: Fork child
    PREP: Wait for child
    ERROR: Child status = 0x100
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_STACK to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    8 UNRESOLVED




    TEST CASE: execvp

    TEST PURPOSE #5
    On a successful call to int execvp(const char *file,
    char *const argv[]) the new process shall inherit its
    RLIMIT_DATA resource limits from the calling process
    image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_DATA
    PREP: Fork child
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_DATA to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    PREP: Wait for child
    ERROR: Child status = 0x100
    5 UNRESOLVED

    TEST PURPOSE #8
    On a successful call to int execvp(const char *file,
    char *const argv[]) the new process shall inherit its
    RLIMIT_STACK resource limits from the calling process
    image.
    PREP: Open communication pipe for child
    PREP: Get current RLIMIT_STACK
    PREP: Fork child
    PREP: Connect child's pipe to stdout
    PREP: Construct exec path
    PREP: Reset RLIMIT_STACK to unique values
    ERROR: setrlimit failed, errno = 22(EINVAL - Invalid argument)
    PREP: Wait for child
    ERROR: Child status = 0x100
    8 UNRESOLVED

    Review Information

    Review Type TSMA Review
    Start Date null
    Completed null
    Status Complete
    Review Recommendation No Resolution Given
    Review Response
    A permanent interpretation is recommended.

    Review Type SA Review
    Start Date null
    Completed null
    Status Complete
    Review Resolution Permanent Interpretation (PIN)
    Review Conclusion
    A Permanent Interpretation is granted.

    Problem Reporting System Options:

     

    Back   


Contact the Certification Authority