summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoroshogbo <oshogbo@FreeBSD.org>2015-04-29 22:59:44 +0000
committeroshogbo <oshogbo@FreeBSD.org>2015-04-29 22:59:44 +0000
commit4859a065d5bb106b1f4664d49a6e77007b1da740 (patch)
tree068577630166581c7a5186b5dc95f7cd6ecdeeeb /sys
parentb9b0abb3254e48e0128e4717a74858d5a58af0ac (diff)
downloadFreeBSD-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.c2
-rw-r--r--sys/kern/subr_nvpair.c6
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);
}
OpenPOWER on IntegriCloud