On Wed, Jun 01, 2022 at 08:44:43AM +0200, Theo Buehler wrote:
> When compared to manifest FileAndHash, the RSC code doesn't limit the
> size of the FileNameAndHash list. Should we do this for consistency?
>
> The situation is of course not quite the same since we're in -f mode.
> However, we do impose limits on the sizes of other resources, so it
> looks like a missing check.
This is fine with me but lets get job@'s opinion since he is behind rsc
support.
> Index: extern.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/extern.h,v
> retrieving revision 1.140
> diff -u -p -r1.140 extern.h
> --- extern.h 31 May 2022 18:41:43 -0000 1.140
> +++ extern.h 31 May 2022 20:35:41 -0000
> @@ -700,6 +700,9 @@ int mkpathat(int, const char *);
>
> /* Maximum acceptable file size */
> #define MAX_FILE_SIZE 4000000
> +
> +/* Maximum number of FileNameAndHash entries per RSC checklist. */
> +#define MAX_CHECKLIST_ENTRIES 100000
>
> /* Maximum number of FileAndHash entries per manifest. */
> #define MAX_MANIFEST_ENTRIES 100000
> Index: mft.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/mft.c,v
> retrieving revision 1.69
> diff -u -p -r1.69 mft.c
> --- mft.c 31 May 2022 18:51:35 -0000 1.69
> +++ mft.c 1 Jun 2022 06:34:39 -0000
> @@ -323,7 +323,7 @@ mft_parse_econtent(const unsigned char *
> goto out;
> }
>
> - if (sk_FileAndHash_num(mft->fileList) > MAX_MANIFEST_ENTRIES) {
> + if (sk_FileAndHash_num(mft->fileList) >= MAX_MANIFEST_ENTRIES) {
> warnx("%s: %d exceeds manifest entry limit (%d)", p->fn,
> sk_FileAndHash_num(mft->fileList), MAX_MANIFEST_ENTRIES);
> goto out;
> Index: rsc.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/rsc.c,v
> retrieving revision 1.7
> diff -u -p -r1.7 rsc.c
> --- rsc.c 31 May 2022 18:51:35 -0000 1.7
> +++ rsc.c 1 Jun 2022 06:36:15 -0000
> @@ -279,6 +279,12 @@ rsc_parse_checklist(struct parse *p, con
> return 0;
> }
>
> + if (sz >= MAX_CHECKLIST_ENTRIES) {
> + warnx("%s: %zu exceeds checklist entry limit (%d)", p->fn, sz,
> + MAX_CHECKLIST_ENTRIES);
> + return 0;
> + }
> +
> p->res->files = calloc(sz, sizeof(struct rscfile));
> if (p->res->files == NULL)
> err(1, NULL);
>
--
:wq Claudio