nss_compat: internal_end*ent may clobber errno, hiding ERANGE [BZ #25976]
authorFlorian Weimer <fweimer@redhat.com>
Tue, 19 May 2020 12:09:38 +0000 (14:09 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Tue, 19 May 2020 12:09:57 +0000 (14:09 +0200)
commit790b8dda4455865cb8c3a47801f4304c1a43baf6
treef410f4425e93ec71223199ef2075574758bb1541
parent765de945efc5d5602999b2999fe8abdf04881370
nss_compat: internal_end*ent may clobber errno, hiding ERANGE [BZ #25976]

During cleanup, before returning from get*_r functions, the end*ent
calls must not change errno.  Otherwise, an ERANGE error from the
underlying implementation can be hidden, causing unexpected lookup
failures.  This commit introduces an internal_end*ent_noerror
function which saves and restore errno, and marks the original
internal_end*ent function as warn_unused_result, so that it is used
only in contexts were errors from it can be handled explicitly.

Reviewed-by: DJ Delorie <dj@redhat.com>
nss/nss_compat/compat-grp.c
nss/nss_compat/compat-initgroups.c
nss/nss_compat/compat-pwd.c
nss/nss_compat/compat-spwd.c