On Mon, May 01, 2023 at 11:00:46AM +0200, Claudio Jeker wrote: > I managed to end up with bad filedescriptors in rrdp. > The result is not pretty since the code will start to spin doing poll() > and read() with read failing but the code does not back off enough to > remove the fd from the poll list. > > Fix is simple, instead of marking the request as failed just fail the > request. Setting the state to RRDP_STATE_PARSE_ERROR is only needed if > the xml parser fails (and we need to consume all remaining data). > On read error there is no need to do that, since there is no more data.
ok tb > > -- > :wq Claudio > > Index: rrdp.c > =================================================================== > RCS file: /cvs/src/usr.sbin/rpki-client/rrdp.c,v > retrieving revision 1.29 > diff -u -p -r1.29 rrdp.c > --- rrdp.c 4 Jan 2023 16:51:34 -0000 1.29 > +++ rrdp.c 1 May 2023 07:18:52 -0000 > @@ -503,8 +503,8 @@ rrdp_data_handler(struct rrdp *s) > > len = read(s->infd, buf, sizeof(buf)); > if (len == -1) { > - s->state |= RRDP_STATE_PARSE_ERROR; > warn("%s: read failure", s->local); > + rrdp_abort_req(s); > return; > } > if ((s->state & RRDP_STATE_PARSE) == 0) >