On 9/20/19 2:44 PM, Michael Tretter wrote: > The list of boot entries can contain items that are not blspec entries. > For example, the bootchooser also adds an item to this list. Therefore, > blspec cannot unconditionally interpret entries as blspec entries. > > The error is reproduced by listing the boot entries with the bootchooser > and a rootfs with blspec entries, e.g.: > > boot -l bootchooser /mnt/nfs > > Check if a bootentry is a blspec entry by testing if the boot function > is blspec_boot. > > Reported-by: Thomas Hämmerle <Thomas.Haemmerle@xxxxxxxxxxxxxx> > Signed-off-by: Michael Tretter <m.tretter@xxxxxxxxxxxxxx> > --- > common/blspec.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/common/blspec.c b/common/blspec.c > index 66e5033e35..3b148e2ab4 100644 > --- a/common/blspec.c > +++ b/common/blspec.c > @@ -228,6 +228,14 @@ static struct blspec_entry *blspec_entry_open(struct bootentries *bootentries, > return entry; > } > > +/* > + * is_blspec_entry - check if a bootentry is a blspec entry > + */ > +static inline bool is_blspec_entry(struct bootentry *entry) > +{ > + return entry.boot == blspec_boot; entry is a pointer. This doesn't compile: ./common/blspec.c:314:14: error: 'entry' is a pointer; did you mean to use '->'? 314 | return entry.boot == blspec_boot; > +} > + > /* > * blspec_have_entry - check if we already have an entry with > * a certain path > @@ -238,6 +246,8 @@ static int blspec_have_entry(struct bootentries *bootentries, const char *path) > struct blspec_entry *e; > > list_for_each_entry(be, &bootentries->entries, list) { > + if (!is_blspec_entry(be)) > + continue; > e = container_of(be, struct blspec_entry, entry); > if (e->configpath && !strcmp(e->configpath, path)) > return 1; > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox