Re: [PATCH 02/15] checkpolicy: cleanup resources on parse error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Feb 13, 2024 at 3:34 PM James Carter <jwcart2@xxxxxxxxx> wrote:
>
> On Mon, Jan 22, 2024 at 9:02 AM Christian Göttsche
> <cgzones@xxxxxxxxxxxxxx> wrote:
> >
> > Close the input file and free all memory by the queue and lexer on a
> > syntax or parse error.
> >
> > Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx>
>
> Acked-by: James Carter <jwcart2@xxxxxxxxx>
>
Merged.
Thanks,
Jim

> > ---
> >  checkpolicy/parse_util.c | 26 +++++++++++++++++++-------
> >  1 file changed, 19 insertions(+), 7 deletions(-)
> >
> > diff --git a/checkpolicy/parse_util.c b/checkpolicy/parse_util.c
> > index f2d1e04d..eda814e1 100644
> > --- a/checkpolicy/parse_util.c
> > +++ b/checkpolicy/parse_util.c
> > @@ -26,6 +26,7 @@ extern FILE *yyin;
> >  extern void init_parser(int);
> >  extern int yyparse(void);
> >  extern void yyrestart(FILE *);
> > +extern int yylex_destroy(void);
> >  extern queue_t id_queue;
> >  extern unsigned int policydb_errors;
> >  extern policydb_t *policydbp;
> > @@ -34,6 +35,8 @@ extern void set_source_file(const char *name);
> >
> >  int read_source_policy(policydb_t * p, const char *file, const char *progname)
> >  {
> > +       int rc = -1;
> > +
> >         yyin = fopen(file, "r");
> >         if (!yyin) {
> >                 fprintf(stderr, "%s:  unable to open %s:  %s\n", progname, file, strerror(errno));
> > @@ -41,21 +44,26 @@ int read_source_policy(policydb_t * p, const char *file, const char *progname)
> >         }
> >         set_source_file(file);
> >
> > -       if ((id_queue = queue_create()) == NULL) {
> > +       id_queue = queue_create();
> > +       if (id_queue == NULL) {
> >                 fprintf(stderr, "%s: out of memory!\n", progname);
> > -               return -1;
> > +               goto cleanup;
> >         }
> >
> > +       mlspol = p->mls;
> >         policydbp = p;
> >         policydbp->name = strdup(file);
> > -       mlspol = p->mls;
> > +       if (!policydbp->name) {
> > +               fprintf(stderr, "%s: out of memory!\n", progname);
> > +               goto cleanup;
> > +       }
> >
> >         init_parser(1);
> >         if (yyparse() || policydb_errors) {
> >                 fprintf(stderr,
> >                         "%s:  error(s) encountered while parsing configuration\n",
> >                         progname);
> > -               return -1;
> > +               goto cleanup;
> >         }
> >         rewind(yyin);
> >         init_parser(2);
> > @@ -65,11 +73,15 @@ int read_source_policy(policydb_t * p, const char *file, const char *progname)
> >                 fprintf(stderr,
> >                         "%s:  error(s) encountered while parsing configuration\n",
> >                         progname);
> > -               return -1;
> > +               goto cleanup;
> >         }
> > -       queue_destroy(id_queue);
> >
> > +       rc = 0;
> > +
> > +cleanup:
> > +       queue_destroy(id_queue);
> >         fclose(yyin);
> > +       yylex_destroy();
> >
> > -       return 0;
> > +       return rc;
> >  }
> > --
> > 2.43.0
> >
> >





[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux