Interesting bug. :-(

It seems bugs.python.org is back up, so can you file it there too?

On Wed, Mar 28, 2012 at 3:45 AM, Victor Stinner
<victor.stin...@gmail.com> wrote:
> Hi,
>
> bugs.python.org is down so I'm reporting the bug here :-)
>
> We have a crash in our product when tracing is enabled by
> sys.settrace() and threading.settrace(). If a Python generator is
> created in a C thread, calling the generator later in another thread
> may crash if Python tracing is enabled.
>
>  - the C thread calls PyGILState_Ensure() which creates a temporary
> Python thread state
>  - a generator is created, the generator has a reference to a Python
> frame which keeps a reference to the temporary Python thread state
>  - the C thread calls PyGILState_Releases() which destroys the
> temporary Python thread state
>  - when the generator is called later in another thread, call_trace()
> reads the Python thread state from the generator frame, which is the
> destroyed frame => it does crash on a pointer dereference if the
> memory was reallocated (by malloc()) and the data were erased
>
> To reproduce the crash, unpack the attached
> generator_frame_bug.tar.gz, compile the C module using "python
> setup.py build" and then run "PYTHONPATH=$(ls -d build/lib*/) python
> test.py" (or just "python test.py if you installed the _test module).
> You may need to use Valgrind to see the error, or call memset(tstate,
> 0xFF, sizeof(*tstate)) before free(tstate) in tstate_delete_common().
>
> Calling the generator should update its reference to the Python state
> thread in its frame. The generator may also clears frame->f_tstate (to
> detect bugs earlier), as it does for frame->f_back (to avoid a
> reference cycle). Attached patch implements this fix for Python 3.3.
>
> Victor
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev@python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: 
> http://mail.python.org/mailman/options/python-dev/guido%40python.org
>



-- 
--Guido van Rossum (python.org/~guido)
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to