From 26e94a7995efc63e800b6c70370068034a03f049 Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Tue, 20 Jan 2009 23:49:08 +0000 Subject: When encoding, and compiling with -DUSE_VALGRIND, explicitly get valgrind to check the inputs git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@21766 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/rpc/xdr.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'src/lib/rpc') diff --git a/src/lib/rpc/xdr.c b/src/lib/rpc/xdr.c index ec0d27717f..417786572c 100644 --- a/src/lib/rpc/xdr.c +++ b/src/lib/rpc/xdr.c @@ -54,6 +54,10 @@ static char sccsid[] = "@(#)xdr.c 1.35 87/08/12"; #define XDR_TRUE ((long) 1) #define LASTUNSIGNED ((u_int) 0-1) +#ifdef USE_VALGRIND +#include +#endif + /* * for unit alignment */ @@ -93,6 +97,9 @@ xdr_int(XDR *xdrs, int *ip) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*ip); +#endif if (*ip > 0x7fffffffL || *ip < -0x7fffffffL - 1L) return (FALSE); @@ -126,6 +133,9 @@ xdr_u_int(XDR *xdrs, u_int *up) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*up); +#endif if (*up > 0xffffffffUL) return (FALSE); @@ -158,6 +168,9 @@ xdr_long(XDR *xdrs, long *lp) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*lp); +#endif if (*lp > 0x7fffffffL || *lp < -0x7fffffffL - 1L) return (FALSE); @@ -181,6 +194,9 @@ xdr_u_long(XDR *xdrs, u_long *ulp) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*ulp); +#endif if (*ulp > 0xffffffffUL) return (FALSE); @@ -206,6 +222,9 @@ xdr_short(register XDR *xdrs, short *sp) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*sp); +#endif l = (long) *sp; return (XDR_PUTLONG(xdrs, &l)); @@ -236,6 +255,9 @@ xdr_u_short(register XDR *xdrs, u_short *usp) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*usp); +#endif l = (u_long) *usp; return (XDR_PUTLONG(xdrs, (long *) &l)); @@ -261,6 +283,15 @@ xdr_char(XDR *xdrs, char *cp) { int i; +#ifdef USE_VALGRIND + switch (xdrs->x_op) { + case XDR_ENCODE: + VALGRIND_CHECK_DEFINED(*cp); + break; + default: + break; + } +#endif i = (*cp); if (!xdr_int(xdrs, &i)) { return (FALSE); @@ -277,6 +308,15 @@ xdr_u_char(XDR *xdrs, u_char *cp) { u_int u; +#ifdef USE_VALGRIND + switch (xdrs->x_op) { + case XDR_ENCODE: + VALGRIND_CHECK_DEFINED(*cp); + break; + default: + break; + } +#endif u = (*cp); if (!xdr_u_int(xdrs, &u)) { return (FALSE); @@ -296,6 +336,9 @@ xdr_bool(register XDR *xdrs, bool_t *bp) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*bp); +#endif lb = *bp ? XDR_TRUE : XDR_FALSE; return (XDR_PUTLONG(xdrs, &lb)); @@ -324,6 +367,15 @@ xdr_enum(XDR *xdrs, enum_t *ep) /* * enums are treated as ints */ +#ifdef USE_VALGRIND + switch (xdrs->x_op) { + case XDR_ENCODE: + VALGRIND_CHECK_DEFINED(*ep); + break; + default: + break; + } +#endif if (sizeof (enum sizecheck) == sizeof (long)) { return (xdr_long(xdrs, (long *)ep)); } else if (sizeof (enum sizecheck) == sizeof (int)) { @@ -373,6 +425,9 @@ xdr_opaque(XDR *xdrs, caddr_t cp, u_int cnt) } if (xdrs->x_op == XDR_ENCODE) { +#ifdef USE_VALGRIND + VALGRIND_CHECK_READABLE((volatile void *)cp, cnt); +#endif if (!XDR_PUTBYTES(xdrs, cp, cnt)) { return (FALSE); } @@ -463,6 +518,9 @@ xdr_int32(XDR *xdrs, int32_t *ip) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*ip); +#endif l = *ip; return (xdr_long(xdrs, &l)); @@ -487,6 +545,9 @@ xdr_u_int32(XDR *xdrs, uint32_t *up) switch (xdrs->x_op) { case XDR_ENCODE: +#ifdef USE_VALGRIND + VALGRIND_CHECK_DEFINED(*up); +#endif ul = *up; return (xdr_u_long(xdrs, &ul)); -- cgit