|
Home About Us A-Z Index Search * Contact Us Register Login Press ShopThe Open Brand -- Problem Reporting and Interpretations System |
Problem Report 1586 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 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.00002Test 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 UNRESOLVEDReview 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:
- View Report 1586
- List All PRs
- Search Reports
- Email the System Administrator
- View the The Open Brand Interpretations Database User Manual
Contact the Certification Authority