diff options
author | oshogbo <oshogbo@FreeBSD.org> | 2015-04-29 22:59:44 +0000 |
---|---|---|
committer | oshogbo <oshogbo@FreeBSD.org> | 2015-04-29 22:59:44 +0000 |
commit | 4859a065d5bb106b1f4664d49a6e77007b1da740 (patch) | |
tree | 068577630166581c7a5186b5dc95f7cd6ecdeeeb /sys | |
parent | b9b0abb3254e48e0128e4717a74858d5a58af0ac (diff) | |
download | FreeBSD-src-4859a065d5bb106b1f4664d49a6e77007b1da740.zip FreeBSD-src-4859a065d5bb106b1f4664d49a6e77007b1da740.tar.gz |
Save errno from close override.
Approved by: pjd (mentor)
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/subr_nvlist.c | 2 | ||||
-rw-r--r-- | sys/kern/subr_nvpair.c | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/sys/kern/subr_nvlist.c b/sys/kern/subr_nvlist.c index 5cdf45b..746514b 100644 --- a/sys/kern/subr_nvlist.c +++ b/sys/kern/subr_nvlist.c @@ -929,8 +929,10 @@ nvlist_recv(int sock) nvl = nvlist_xunpack(buf, size, fds, nfds); if (nvl == NULL) { + SAVE_ERRNO(serrno); for (i = 0; i < nfds; i++) close(fds[i]); + RESTORE_ERRNO(serrno); goto out; } diff --git a/sys/kern/subr_nvpair.c b/sys/kern/subr_nvpair.c index 2e11d799..1fe8806 100644 --- a/sys/kern/subr_nvpair.c +++ b/sys/kern/subr_nvpair.c @@ -848,6 +848,7 @@ nvpair_t * nvpair_create_descriptor(const char *name, int value) { nvpair_t *nvp; + int serrno; if (value < 0 || !fd_is_valid(value)) { errno = EBADF; @@ -860,8 +861,11 @@ nvpair_create_descriptor(const char *name, int value) nvp = nvpair_allocv(name, NV_TYPE_DESCRIPTOR, (uint64_t)value, sizeof(int64_t)); - if (nvp == NULL) + if (nvp == NULL) { + SAVE_ERRNO(serrno); close(value); + RESTORE_ERRNO(serrno); + } return (nvp); } |