glibc/sunrpc
Joseph Myers 5874510faa Fix rpcgen buffer overrun (bug 20790).
Building with GCC 7 produces an error building rpcgen:

rpc_parse.c: In function 'get_prog_declaration':
rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
     sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
                     ~~~~^
rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
     sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

That buffer overrun is for the case where the .x file declares a
program with a million arguments.  The strcpy two lines above can
generate a buffer overrun much more simply for a long argument name.

The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
provides a bound on the buffer size needed, so this patch just changes
the buffer size to MAXLINESIZE to avoid both possible buffer
overruns.  A testcase is added that rpcgen does not crash with a
500-character argument name, where it previously crashed.

It would not at all surprise me if there are many other ways of
crashing rpcgen with either valid or invalid input; fuzz testing would
likely find various such bugs, though I don't think they are that
important to fix (rpcgen is not that likely to be used with untrusted
.x files as input).  (As well as fuzz-findable bugs there are probably
also issues when various int variables get overflowed on very large
input.)  The test infrastructure for rpcgen-not-crashing tests would
need extending if tests are to be added for cases where rpcgen should
produce an error, as opposed to cases where it should succeed.

Tested for x86_64 and x86.

	[BZ #20790]
	* sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
	to MAXLINESIZE.
	* sunrpc/bug20790.x: New file.
	* sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
	variable.
	[$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
	[$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
2016-11-08 23:44:51 +00:00
..
rpc Installed-header hygiene (BZ#20366): obsolete BSD u_* types. 2016-09-23 08:43:56 -04:00
rpcsvc Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
auth_des.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
auth_none.c Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912). 2015-09-08 21:11:03 +00:00
auth_unix.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
authdes_prot.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
authuxprot.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
bindrsvprt.c Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912). 2015-09-08 21:11:03 +00:00
bug20790.x Fix rpcgen buffer overrun (bug 20790). 2016-11-08 23:44:51 +00:00
clnt_gen.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
clnt_perr.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
clnt_raw.c Convert 69 more function definitions to prototype style (line wrap cases). 2015-10-19 21:23:47 +00:00
clnt_simp.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
clnt_tcp.c Convert 69 more function definitions to prototype style (line wrap cases). 2015-10-19 21:23:47 +00:00
clnt_udp.c CVE-2016-4429: sunrpc: Do not use alloca in clntudp_call [BZ #20112] 2016-05-23 20:18:34 +02:00
clnt_unix.c Convert 69 more function definitions to prototype style (line wrap cases). 2015-10-19 21:23:47 +00:00
create_xid.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
des_crypt.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
des_impl.c Replace FSF snail mail address with URLs. 2012-02-09 23:18:22 +00:00
des_soft.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
etc.rpc * sunrpc/etc.rpc (fedfs_admin): Add entry. 2012-12-05 19:45:23 -07:00
get_myaddr.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
getrpcbyname_r.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcbyname.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcbynumber_r.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcbynumber.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcent_r.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcent.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
getrpcport.c Once again change RPC copyright notices. 2010-08-19 10:38:55 -07:00
key_call.c sunrpc: In key_call_keyenvoy, use int status instead of union wait 2016-03-08 10:04:24 +01:00
key_prot.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
Makefile Fix rpcgen buffer overrun (bug 20790). 2016-11-08 23:44:51 +00:00
netname.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
openchild.c Remove use of INTDEF/INTUSE in libio 2012-05-24 23:06:20 +02:00
pm_getmaps.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
pm_getport.c Convert miscellaneous function definitions to prototype style. 2015-10-20 21:27:22 +00:00
pmap_clnt.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
pmap_prot2.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
pmap_prot.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
pmap_rmt.c Convert a few more function definitions to prototype style. 2015-10-21 11:57:23 +00:00
proto.h Support --with-pkgversion and --with-bugurl. 2012-11-09 22:13:45 +00:00
publickey.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
rpc_clntout.c sunrpc: fix rpc bootstrap builds 2012-07-06 00:37:42 -04:00
rpc_cmsg.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
rpc_common.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
rpc_cout.c Remove __GNU_LIBRARY__ conditionals from rpcgen. 2012-03-09 22:46:12 +00:00
rpc_dtable.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
rpc_hout.c Fix some -Wformat warnings in rpcgen. 2012-07-26 14:35:05 -07:00
rpc_main.c Document rpcgen -5. Fixes bug 15825 2013-10-21 10:02:31 +02:00
rpc_parse.c Fix rpcgen buffer overrun (bug 20790). 2016-11-08 23:44:51 +00:00
rpc_parse.h Avoid nested comment. 2010-08-24 11:56:51 -07:00
rpc_prot.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
rpc_sample.c Once again change RPC copyright notices. 2010-08-19 10:38:55 -07:00
rpc_scan.c Once again change RPC copyright notices. 2010-08-19 10:38:55 -07:00
rpc_scan.h Once again change RPC copyright notices. 2010-08-19 10:38:55 -07:00
rpc_svcout.c Fix some -Wformat warnings in rpcgen. 2012-07-26 14:35:05 -07:00
rpc_tblout.c Once again change RPC copyright notices. 2010-08-19 10:38:55 -07:00
rpc_thread.c sunrpc: Rewrite with explicit TLS access using __thread 2015-10-17 12:07:04 +02:00
rpc_util.c Once again change RPC copyright notices. 2010-08-19 10:38:55 -07:00
rpc_util.h Once again change RPC copyright notices. 2010-08-19 10:38:55 -07:00
rpcgen.c Use standard build rule to build rpcgen. 2012-03-10 00:56:21 +00:00
rpcinfo.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
rtime.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
svc_auth.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
svc_authux.c Obsolete RPC implementation in libc. 2011-04-16 21:59:36 -04:00
svc_raw.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
svc_run.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
svc_simple.c Fix sunrpc static library 2012-05-21 21:34:54 +02:00
svc_tcp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
svc_udp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
svc_unix.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
svc.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
svcauth_des.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
test-rpcent.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
thrsvc.c
tst-getmyaddr.c
tst-xdrmem2.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-xdrmem.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Versions Exclude rpcent functions and NSS backends for rpc, key when excluding sunrpc. 2015-02-06 10:43:19 -08:00
xcrypt.c Fix sunrpc static library 2012-05-21 21:34:54 +02:00
xdr_array.c Convert miscellaneous function definitions to prototype style. 2015-10-20 21:27:22 +00:00
xdr_float.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
xdr_intXX_t.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
xdr_mem.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00
xdr_rec.c Add #include <stdint.h> for uint[32|64]_t usage (except installed headers). 2013-05-16 11:32:54 -05:00
xdr_ref.c Convert miscellaneous function definitions to prototype style. 2015-10-20 21:27:22 +00:00
xdr_sizeof.c Make sunrpc code usable again 2012-05-10 20:19:53 +02:00
xdr_stdio.c Remove use of INTDEF/INTUSE in libio 2012-05-24 23:06:20 +02:00
xdr.c Convert miscellaneous function definitions to prototype style. 2015-10-20 21:27:22 +00:00