[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 15/21] libelf: check loops for running away
George Dunlap writes ("Re: [Xen-devel] [PATCH 15/21] libelf: check loops for running away"): > On Wed, Jun 12, 2013 at 5:00 PM, Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > wrote: > > + /* > > + * This test also arranges for the loop to terminate if the > > + * input file has a ridiculous value for the header count: The > > + * first putative header outside the input image will appear > > + * to have type 0 (since out-of-range accesses read as 0) and > > + * PT_NOTE != 0. > > + */ > > if ( elf_uval(elf, phdr, p_type) != PT_NOTE ) > > continue; > > Sorry, run that by me again? It looks like it will call "continue" in > that case, not "break". > > This looks inconsistent with the changes you made in libelf-loader.c > and xc_dom_elfloader.c: There we have similar types of reads with > continues, but you do an access check anyway. > > Is there something special about phdr vs shdr? You are entirely correct. I must have misread "continue" as "break". > > + /* > > + * See above re guarantee of loop termination. > > + * SHT_NOTE != 0. > > + */ > > if ( elf_uval(elf, shdr, sh_type) != SHT_NOTE ) > > continue; > > Same as above. Again. I will fix these by changing them to use the same checks as elsewhere. > > @@ -306,7 +323,14 @@ ELF_HANDLE_DECL(elf_note) elf_note_next(struct > > elf_binary *elf, ELF_HANDLE_DECL( > > unsigned namesz = (elf_uval(elf, note, namesz) + 3) & ~3; > > unsigned descsz = (elf_uval(elf, note, descsz) + 3) & ~3; > > > > - return ELF_MAKE_HANDLE(elf_note, ELF_HANDLE_PTRVAL(note) + > > elf_size(elf, note) + namesz + descsz); > > + elf_ptrval ptrval = ELF_HANDLE_PTRVAL(note) > > + + elf_size(elf, note) + namesz + descsz; > > + > > + if ( ( ptrval <= ELF_HANDLE_PTRVAL(note) || /* wrapped or stuck */ > > + !elf_access_ok(elf, ELF_HANDLE_PTRVAL(note), 1) ) ) > > + ptrval = ELF_MAX_PTRVAL; /* terminate caller's loop */ > > Is this an official part of the interface, or do you just "know" that > the two callers will happen to break out of their loop when this > happens? > > If it's the second, this seems like a future bug waiting to happen... I will add a comment, making it part of the declared interface. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |