On Thu, 6 May 2021 at 16:46, Eric Blake <eblake@xxxxxxxxxx> wrote: > > On 5/6/21 10:30 AM, Warner Losh wrote: > > > > > But for the real answer, I need to contact the original authors of > > this part of the code (they are no longer involved day-to-day in > > the bsd-user efforts) to see if this scenario is possible or not. If > > it's easy to find out that way, we can either know this is safe to > > do, or if effort is needed to make it safe. At present, I've seen > > enough and chatted enough with others to be concerned that > > the change would break proper emulation. > > Do we have a feel for the maximum amount of memory being used by the > various alloca() replaced in this series? If so, can we just > stack-allocate an array of bytes of the maximum size needed? In *-user the allocas are generally of the form "guest passed us a random number, allocate that many structs/whatevers". (In this specific bsd-user example it's the writev syscall and it's "however many struct iovecs the guest passed".) So there is no upper limit. The right thing to do here is probably to use g_try_malloc() and return ENOMEM or whatever on failure. The use of alloca, at least in the linux-user code, is purely old lazy coding based on "in practice real world guest binaries don't allocate very many of these so we can get away with shoving them on the stack". thanks -- PMM