Re: VM reentry limit

From: Date: Mon, 03 Feb 2020 14:16:39 +0000
Subject: Re: VM reentry limit
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-108349@lists.php.net to get a copy of this message
> On 3 Feb 2020, at 14:29, Nikita Popov <nikita.ppv@gmail.com> wrote: > > Hi internals, > > We have a long-standing issue (tracked at > https://bugs.php.net/bug.php?id=64196 and the very numerous > duplicates) > that certain types of infinite recursion can lead to a stack overflow. > While for us it is easy to diagnose this, end users will only see a > "segmentation fault" and will be unable to correlate this with infinite > recursion as the root cause. > > To provide some technical context, recursion in PHP usually occurs on the > virtual machine stack, in which case unbounded recursion is supported, as > long as the stack size does not exceed your memory limit. However, some > types of calls (in particular magic methods and certain callbacks) go > through an internal function and have to reenter the virtual machine. This > uses up space on the C stack and may ultimately result in a stack overflow. > > I would like to propose the introduction of a zend.vm_reentry_limit ini > option as a solution to this problem, implemented in > https://github.com/php/php-src/pull/5135. This ini setting will > limit the > number of nested VM reentries that are allowed before an Error is thrown. > > It should be noted that this is (intentionally) not a general recursion > limit. Deep recursion can happen legitimately (e.g. during AST processing) > and it is hard to put a reasonable upper limit on it that both detects > unintentional infinite recursion while allowing legitimate deep recursion. > The limit implemented here exists specifically to prevent stack overflows > and give the programmer a more obvious indication of the cause of the > problem. > > Regards, > Nikita > > PS: Some extensions will force all function calls to occur via VM reentry. > Such extensions should probably either disable the option (by setting it to > -1), or significantly increase the limit, to avoid false positives. I would love to see this addition, I think it can be really helpful for a lot of users. Can we add a function to report the number of VM reentries as well (get_vm_reentry_count). This could be helpful for determining a reasonable ini value. Cheers, Ruud

« previous php.internals (#108349) next »