[SeaBIOS] [PATCH] edd: Fix buffer size field for EDD 3.x
kwolf at redhat.com
Fri Nov 7 09:16:46 CET 2014
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?
More information about the SeaBIOS