[SeaBIOS] [PATCH] edd: Fix buffer size field for EDD 3.x

Kevin O'Connor kevin at koconnor.net
Fri Nov 7 16:35:22 CET 2014


On Fri, Nov 07, 2014 at 09:16:46AM +0100, Kevin Wolf wrote:
> Am 07.11.2014 um 01:19 hat Kevin O'Connor geschrieben:
> > On Thu, Nov 06, 2014 at 10:41:35PM +0100, Kevin Wolf wrote:
> > > The full 66 bytes of the EDD 3.x buffer were already filled, but the
> > > size field wasn't updated so that we would return that only the first 30
> > > bytes of it are valid (like for 2.x). Fix the size field.
> > 
> > SeaBIOS has never set the size above 30, and looking at the EDD3 spec
> > I think the current behavior is correct:
> > 
> >   The caller sets this value to the maximum buffer size. If the length
> >   of this buffer is less than 30 bytes, this function does not return
> >   the pointer to DPT extension. If the buffer size is 30 or greater on
> >   entry, it shall be set to 30 on exit. If the buffer size is between
> >   26 and 29, it shall be set to 26 on exit. If the buffer size is less
> >   than 26 on entry an error is returned.
> 
> Indeed, I should have checked more closely when the "bug" was reported
> to me. It just looked plausible enough that when there's a size field
> at offset 0, it should always have a meaning... Sorry for the noise.
> 
> So then the only correct way for a caller to determine whether the 3.x
> fields are present is clearing the word for param_far->key before the
> call and checking it afterwards?

That's what I would do.  (Along with checking dpi_length and the
second checksum.)

-Kevin



More information about the SeaBIOS mailing list