Use of automatic variable as putenv-family function argument
putenv-family function argument not accessible outside its scope
Description
This defect occurs when the argument of a putenv
-family function
is a local variable with automatic duration.
Risk
The function putenv(char *string)
inserts a pointer to its supplied
argument into the environment array, instead of making a copy of the argument. If the
argument is an automatic variable, its memory can be overwritten after the function
containing the putenv()
call returns. A subsequent call to
getenv()
from another function returns the address of an out-of-scope
variable that cannot be dereferenced legally. This out-of-scope variable can cause
environment variables to take on unexpected values, cause the program to stop responding, or
allow arbitrary code execution vulnerabilities.
Fix
Use setenv()
/unsetenv()
to set and unset
environment variables. Alternatively, use putenv
-family function
arguments with dynamically allocated memory, or, if your application has no reentrancy
requirements, arguments with static duration. For example, a single thread execution with no
recursion or interrupts does not require reentrancy. It cannot be called (reentered) during
its execution.
Examples
Result Information
Group: Static memory |
Language: C | C++ |
Default: On for handwritten code, off for generated code |
Command-Line Syntax:
PUTENV_AUTO_VAR
|
Impact: High |
Version History
Introduced in R2017b
See Also
Pointer or reference to stack variable leaving scope
| Find defects (-checkers)
Topics
- Interpret Bug Finder Results in Polyspace Desktop User Interface
- Interpret Bug Finder Results in Polyspace Access Web Interface (Polyspace Access)
- Address Results in Polyspace User Interface Through Bug Fixes or Justifications
- Address Results in Polyspace Access Through Bug Fixes or Justifications (Polyspace Access)