diff options
author | ngie <ngie@FreeBSD.org> | 2016-01-12 00:20:57 +0000 |
---|---|---|
committer | ngie <ngie@FreeBSD.org> | 2016-01-12 00:20:57 +0000 |
commit | 1777eef1bc91505b28fec91c8b36d490da70fb75 (patch) | |
tree | 954b5128bcae2470289a86aad61cb793fdb64dc9 /lib/libc/rpc | |
parent | 32d35b580554bc1e68ac769acdc612e3dd67bb12 (diff) | |
download | FreeBSD-src-1777eef1bc91505b28fec91c8b36d490da70fb75.zip FreeBSD-src-1777eef1bc91505b28fec91c8b36d490da70fb75.tar.gz |
Fix a mismerge from NetBSD in r162194 with `xdr_rpcb_entry_list_ptr(..)`
This fixes the potential NULL pointer dereference properly, and also fixes
memory leaks encountered in the process of iterating through `*rp`.
MFC after: 1 week
Found by: Valgrind
Reported by: Dan Roberts <dan.roberts@isilon.com>
Submitted by: Miles Ohlrich <miles.ohlrich@isilon.com>
Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'lib/libc/rpc')
-rw-r--r-- | lib/libc/rpc/rpcb_prot.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/libc/rpc/rpcb_prot.c b/lib/libc/rpc/rpcb_prot.c index b793eca..2b87f34 100644 --- a/lib/libc/rpc/rpcb_prot.c +++ b/lib/libc/rpc/rpcb_prot.c @@ -207,14 +207,14 @@ xdr_rpcb_entry_list_ptr(XDR *xdrs, rpcb_entry_list_ptr *rp) * the case of freeing we must remember the next object * before we free the current object ... */ - if (freeing) + if (freeing && *rp) next = (*rp)->rpcb_entry_next; if (! xdr_reference(xdrs, (caddr_t *)rp, (u_int)sizeof (rpcb_entry_list), (xdrproc_t)xdr_rpcb_entry)) { return (FALSE); } - if (freeing && *rp) { + if (freeing) { next_copy = next; rp = &next_copy; /* |