diff options
author | Matt Cowell <matt.cowell@nokia.com> | 2019-08-29 16:36:35 -0500 |
---|---|---|
committer | Tomáš Mráz <t8m@users.noreply.github.com> | 2019-09-02 11:28:31 +0200 |
commit | 9de67eee2cf8c3024f7bee7393ea762ac7bd09ab (patch) | |
tree | 442ba3e354bdb3bf070fc74908dd4262d48e0845 /libpam | |
parent | 1b087edc7f05237bf5eccc405704cd82b848e761 (diff) | |
download | pam-9de67eee2cf8c3024f7bee7393ea762ac7bd09ab.tar.gz pam-9de67eee2cf8c3024f7bee7393ea762ac7bd09ab.tar.bz2 pam-9de67eee2cf8c3024f7bee7393ea762ac7bd09ab.zip |
pwhistory: fix read of uninitialized data and memory leak when modifying opasswd
The glibc implementation of getline/getdelim does not guarantee a NUL
terminator in lineptr if getline returns failure (-1). This occurs when
the opasswd file exists but is empty. Since strdup is called
immediately afterwards, this causes strdup to read uninitialized memory
and possibly buffer overrun / crash.
This also fixes a memory leak which always occurs when reading the last
line of the opasswd file. Since the strdup is called before checking
the return code from getline, getdelim, or fgets+strlen, it will
duplicate and never free either:
- The last successfully read line (for getline or getdelim)
- Uninitialized data (if the file is empty)
- A 0 byte string (for fgets+strlen)
Fix by always checking the return code of getline, getdelim, or
fgets+strlen before calling strdup.
Diffstat (limited to 'libpam')
0 files changed, 0 insertions, 0 deletions