From 2e3e5db6680de463d6e8b43ec8bc5e131a99a700 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 22 Aug 2001 17:00:32 +0000 Subject: Update. 2001-08-22 Jakub Jelinek * sunrpc/xdr_rec.c (xdrrec_create): Fix buf sizes before allocating buf. Free resources on failure. * sunrpc/svc_unix.c (svcunix_create): Free resources on failure. (makefd_xprt): Likewise. * sunrpc/svc_udp.c (svcudp_bufcreate): Likewise. * sunrpc/svc_tcp.c (svctcp_create, makefd_xprt): Likewise. * sunrpc/auth_unix.c (authunix_create): Likewise. 2001-08-21 Jakub Jelinek * string/strnlen.c: Remove. * sysdeps/generic/strnlen.c: New. * sysdeps/i386/i486/bits/string.h (strnlen): Remove. --- sunrpc/auth_unix.c | 14 ++++---------- sunrpc/svc_tcp.c | 4 ++++ sunrpc/svc_udp.c | 3 +++ sunrpc/svc_unix.c | 4 ++++ sunrpc/xdr_rec.c | 12 +++++++++--- 5 files changed, 24 insertions(+), 13 deletions(-) (limited to 'sunrpc') diff --git a/sunrpc/auth_unix.c b/sunrpc/auth_unix.c index 50f955146c..bcfa0c931f 100644 --- a/sunrpc/auth_unix.c +++ b/sunrpc/auth_unix.c @@ -108,6 +108,7 @@ authunix_create (char *machname, uid_t uid, gid_t gid, int len, au = (struct audata *) mem_alloc (sizeof (*au)); if (auth == NULL || au == NULL) { +no_memory: #ifdef USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) (void) __fwprintf (stderr, L"%s", @@ -115,6 +116,8 @@ authunix_create (char *machname, uid_t uid, gid_t gid, int len, else #endif (void) fputs (_("authunix_create: out of memory\n"), stderr); + mem_free (auth, sizeof (*auth)); + mem_free (au, sizeof (*au)); return NULL; } auth->ah_ops = &auth_unix_ops; @@ -143,16 +146,7 @@ authunix_create (char *machname, uid_t uid, gid_t gid, int len, au->au_origcred.oa_flavor = AUTH_UNIX; au->au_origcred.oa_base = mem_alloc ((u_int) len); if (au->au_origcred.oa_base == NULL) - { -#ifdef USE_IN_LIBIO - if (_IO_fwide (stderr, 0) > 0) - (void) __fwprintf (stderr, L"%s", - _("authunix_create: out of memory\n")); - else -#endif - (void) fputs (_("authunix_create: out of memory\n"), stderr); - return NULL; - } + goto no_memory; memcpy(au->au_origcred.oa_base, mymem, (u_int) len); /* diff --git a/sunrpc/svc_tcp.c b/sunrpc/svc_tcp.c index 2fffdf5b5c..cda2484b6f 100644 --- a/sunrpc/svc_tcp.c +++ b/sunrpc/svc_tcp.c @@ -183,6 +183,8 @@ svctcp_create (int sock, u_int sendsize, u_int recvsize) else #endif (void) fputs (_("svctcp_create: out of memory\n"), stderr); + mem_free (r, sizeof (*r)); + mem_free (xprt, sizeof (SVCXPRT)); return NULL; } r->sendsize = sendsize; @@ -225,6 +227,8 @@ makefd_xprt (int fd, u_int sendsize, u_int recvsize) else #endif (void) fputs (_("svc_tcp: makefd_xprt: out of memory\n"), stderr); + mem_free (xprt, sizeof (SVCXPRT)); + mem_free (cd, sizeof (struct tcp_conn)); return NULL; } cd->strm_stat = XPRT_IDLE; diff --git a/sunrpc/svc_udp.c b/sunrpc/svc_udp.c index f8ea76c0b8..17c4977e96 100644 --- a/sunrpc/svc_udp.c +++ b/sunrpc/svc_udp.c @@ -156,6 +156,9 @@ svcudp_bufcreate (sock, sendsz, recvsz) else #endif (void) fputs (_("svcudp_create: out of memory\n"), stderr); + mem_free (xprt, sizeof (SVCXPRT)); + mem_free (su, sizeof (*su)); + mem_free (buf, ((MAX (sendsz, recvsz) + 3) / 4) * 4); return NULL; } su->su_iosz = ((MAX (sendsz, recvsz) + 3) / 4) * 4; diff --git a/sunrpc/svc_unix.c b/sunrpc/svc_unix.c index 99e5a2a781..72bc9c2dda 100644 --- a/sunrpc/svc_unix.c +++ b/sunrpc/svc_unix.c @@ -179,6 +179,8 @@ svcunix_create (int sock, u_int sendsize, u_int recvsize, char *path) else #endif fputs (_("svcunix_create: out of memory\n"), stderr); + mem_free (r, sizeof (*r)); + mem_free (xprt, sizeof (SVCXPRT)); return NULL; } r->sendsize = sendsize; @@ -221,6 +223,8 @@ makefd_xprt (int fd, u_int sendsize, u_int recvsize) else #endif (void) fputs (_("svc_unix: makefd_xprt: out of memory\n"), stderr); + mem_free (xprt, sizeof (SVCXPRT)); + mem_free (cd, sizeof (struct unix_conn)); return NULL; } cd->strm_stat = XPRT_IDLE; diff --git a/sunrpc/xdr_rec.c b/sunrpc/xdr_rec.c index 65ffa3799e..941afa35de 100644 --- a/sunrpc/xdr_rec.c +++ b/sunrpc/xdr_rec.c @@ -146,7 +146,11 @@ xdrrec_create (XDR *xdrs, u_int sendsize, { RECSTREAM *rstrm = (RECSTREAM *) mem_alloc (sizeof (RECSTREAM)); caddr_t tmp; - char *buf = mem_alloc (sendsize + recvsize + BYTES_PER_XDR_UNIT); + char *buf; + + sendsize = fix_buf_size (sendsize); + recvsize = fix_buf_size (recvsize); + buf = mem_alloc (sendsize + recvsize + BYTES_PER_XDR_UNIT); if (rstrm == NULL || buf == NULL) { @@ -156,6 +160,8 @@ xdrrec_create (XDR *xdrs, u_int sendsize, else #endif (void) fputs (_("xdrrec_create: out of memory\n"), stderr); + mem_free (rstrm, sizeof (RECSTREAM)); + mem_free (buf, sendsize + recvsize + BYTES_PER_XDR_UNIT); /* * This is bad. Should rework xdrrec_create to * return a handle, and in this case return NULL @@ -165,8 +171,8 @@ xdrrec_create (XDR *xdrs, u_int sendsize, /* * adjust sizes and allocate buffer quad byte aligned */ - rstrm->sendsize = sendsize = fix_buf_size (sendsize); - rstrm->recvsize = recvsize = fix_buf_size (recvsize); + rstrm->sendsize = sendsize; + rstrm->recvsize = recvsize; rstrm->the_buffer = buf; tmp = rstrm->the_buffer; if ((size_t)tmp % BYTES_PER_XDR_UNIT) -- cgit 1.4.1