> Because the size of the first run is smaller than that, store_read tries
> to read from multiple stores.

You mean multiple runs.

> Because in this case store_next_run is called, and store_next_run wraps
> around, this will succeed.

That should not happen.  It should not be wrapping around at all for most
stores.  I suspect that what's needed is an end-of-store check in
store_next_run, or perhaps better yet in store_read/store_write.  This is
another case where the code was written to assume no calls off the end of
the store.  For store_write, it should just have a check for trying to
write past the end of the store and return EINVAL or EIO or something at
the start.  For store_read, it should cap the the addr+amount to the store
size when it's known.

> Now, store_read returns 256kb, and that wretches things in zread badly.

Even with store_read fixed, it looks to me that zread has a bug.
store_read may return a shorter length in NEW_IN_BUF_LEN wihtout changing
NEW_IN_BUF.  In that case, the code now will ignore NEW_IN_BUF_LEN and
think the whole buffer has data.  It needs to notice the value returned,
but also keep track of the whole buffer size so it munmap's all the pages.

_______________________________________________
Bug-hurd mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-hurd

Reply via email to