[Python-Dev] Newly Built Python3 Binary Throws Segfault

Cyd Haselton chaselton at gmail.com
Fri Jan 30 19:58:28 CET 2015


Update:  I did try the patch after getting it installed correctly, but
I'm still getting a segfault on the newly built binary.
Will post info this afternoon.

On Fri, Jan 30, 2015 at 12:10 PM, Ryan Gonzalez <rymg19 at gmail.com> wrote:
> No, it returns NULL if malloc gives it a raw pointer. It unconditionally
> checks the length of the (possibly null) string argument first.
>
> Please try the patch I attached in the last email. It *might* fix the issue.
> Android has crappy locale handling.
>
> On Fri, Jan 30, 2015 at 12:09 PM, Cyd Haselton <chaselton at gmail.com> wrote:
>>
>>   Unless i'm reading something incorrectly,  _PyMem_RawStrdup is
>> currently returning NULL when given a null pointer.
>>
>> From obmalloc.c
>>
>> _PyMem_RawStrdup(const char *str)
>> {
>>     size_t size;
>> char *copy;
>>     size = strlen(str) + 1;
>>     copy = PyMem_RawMalloc(size);
>>     if (copy == NULL)
>>         return NULL;
>> memcpy(copy, str, size);
>> return copy;
>>           }
>>
>> On Fri, Jan 30, 2015 at 11:56 AM, Ryan Gonzalez <rymg19 at gmail.com> wrote:
>> > I seriously doubt the issue is in that file; _PyMem_RawStrdup crashes
>> > when
>> > calling strlen. It's that whatever is calling it is likely asking it to
>> > duplicate a null pointer. Basically, it's probably the caller's fault.
>> >
>> > You could always try modifying _PyMem_RawStrdup to return NULL when
>> > given a
>> > null pointer and see where it then segfaults.
>> >
>> > On Fri, Jan 30, 2015 at 11:53 AM, Cyd Haselton <chaselton at gmail.com>
>> > wrote:
>> >>
>> >> Alternatively, is there a hassle-free way to find out what changed in
>> >> obmalloc.c between 2.7.x and 3.4.x?
>> >>
>> >>
>> >> On Fri, Jan 30, 2015 at 9:29 AM, Cyd Haselton <chaselton at gmail.com>
>> >> wrote:
>> >> > There's a related strdup patch for readline.c, mentioned
>> >> > here:http://bugs.python.org/issue21390 and here
>> >> > https://github.com/rave-engine/python3-android/issues/2.
>> >> > There's a patch, but I'm not sure how to modify it for obmalloc.c, as
>> >> > (I think) the functions all belong to Python...they're all prefixed
>> >> > with _PyXx
>> >> >
>> >> > On Fri, Jan 30, 2015 at 9:05 AM, Cyd Haselton <chaselton at gmail.com>
>> >> > wrote:
>> >> >> Absolutely.  Good thing I have addr2line on device
>> >> >>
>> >> >> /bld/python/Python-3.4.2 $ addr2line -C -f -e
>> >> >> /lib/libpython3.4m.so.1.0
>> >> >> 0008bbc8
>> >> >> _PyMem_RawStrdup
>> >> >> /bld/python/Python-3.4.2/Objects/obmalloc.c:323
>> >> >> /bld/python/Python-3.4.2 $
>> >> >>
>> >> >>
>> >> >>
>> >> >> On Thu, Jan 29, 2015 at 8:26 PM, Ryan <rymg19 at gmail.com> wrote:
>> >> >>> Could you try the steps at
>> >> >>> http://stackoverflow.com/a/11369475/2097780? They
>> >> >>> allow you to get a better idea of where libc is crashing.
>> >> >>>
>> >> >>> Cyd Haselton <chaselton at gmail.com> wrote:
>> >> >>>>
>> >> >>>> Managed to get this out of logcat:
>> >> >>>> F(11914) Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread
>> >> >>>> 11914 (python)  (libc)
>> >> >>>>
>> >> >>>> [ 01-29 19:30:55.855 23373:23373 F/libc     ]
>> >> >>>> Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 23373
>> >> >>>> (python)
>> >> >>>>
>> >> >>>> Less detail than strace but it seems to be that python is
>> >> >>>> segfaulting
>> >> >>>> libc...
>> >> >>>>
>> >> >>>> On Wed, Jan 28, 2015 at 11:23 AM, Ryan Gonzalez <rymg19 at gmail.com>
>> >> >>>> wrote:
>> >> >>>>>
>> >> >>>>>  On Wed, Jan 28, 2015 at 10:43 AM, Guido van Rossum
>> >> >>>>> <guido at python.org>
>> >> >>>>> wrote:
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>>  What I see in the strace:
>> >> >>>>>>
>> >> >>>>>>  ... load libpython3.4m.so.1.0
>> >> >>>>>>  ... load libm
>> >> >>>>>>  ... open /dev/__properties__ and do something to it
>> >> >>>>>> (what?)
>> >> >>>>>>  ... get current time
>> >> >>>>>>  ... allocate memory
>> >> >>>>>>  ... getuid
>> >> >>>>>>  ... segfault
>> >> >>>>>>
>> >> >>>>>>  That's not a lot to go on, but it doesn't look as if it has
>> >> >>>>>> started to
>> >> >>>>>>  load modules yet.
>> >> >>>>>>
>> >> >>>>>>  Does /dev/__properties__ ring a bell? Not to me.
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>> https://android.googlesource.com/platform/system/core/+/tools_r22/init/property_service.c
>> >> >>>>>  is the code that works with that file.
>> >> >>>>>
>> >> >>>>>  This explains it a bit (slides 24-29). Looks like something to
>> >> >>>>> do
>> >> >>>>> with
>> >> >>>>>  interprocess communication. Likely has nothing to do with Python
>> >> >>>>> itself.
>> >> >>>>>
>> >> >>>>>  Maybe this would be useful?
>> >> >>>>>
>> >> >>>>>>
>> >> >>>>>>  That stack trace would be really helpful.
>> >> >>>>>>
>> >> >>>>>>  On Wed, Jan 28, 2015 at 8:34 AM, Cyd Haselton
>> >> >>>>>> <chaselton at gmail.com>
>> >> >>>>>> wrote:
>> >> >>>>>>>
>> >> >>>>>>>
>> >> >>>>>>>  Apologies...I'm not sure what a stack track is, but I do have
>> >> >>>>>>> the
>> >> >>>>>>>  strace.  Nearest I can tell, it happens due to an open call,
>> >> >>>>>>> though I
>> >> >>>>>>>  am probably wrong.
>> >> >>>>>>>  Attaching the strace output to this email.  I'm going to head
>> >> >>>>>>> back to
>> >> >>>>>>>  the documentation and to back out of some Android-related
>> >> >>>>>>> changes
>> >> >>>>>>> in
>> >> >>>>>>>  _localemodule.c
>> >> >>>>>>>
>> >> >>>>>>>  On Wed, Jan 28, 2015 at 9:43 AM, Guido van Rossum
>> >> >>>>>>> <guido at python.org>
>> >> >>>>>>>  wrote:
>> >> >>>>>>>>
>> >> >>>>>>>>  There could be a million differences relevant (unicode, ints,
>> >> >>>>>>>> ...).
>> >> >>>>>>>>  Perhaps
>> >> >>>>>>>>  the importlib bootstrap is failing. Perhaps the dynamic
>> >> >>>>>>>> loading
>> >> >>>>>>>> code
>> >> >>>>>>>>  changed. Did you get a stack track? (IIRC strace shows a
>> >> >>>>>>>> syscall
>> >> >>>>>>>> trace
>> >> >>>>>>>>  --
>> >> >>>>>>>>  also useful, but doesn't tell you precisely how
>> >> >>>>>>>> it segfaulted.)
>> >> >>>>>>>>
>> >> >>>>>>>>  On Wed, Jan 28, 2015 at 6:43 AM, Cyd Haselton
>> >> >>>>>>>> <chaselton at gmail.com>
>> >> >>>>>>>>  wrote:
>> >> >>>>>>>>>
>> >> >>>>>>>>>
>> >> >>>>>>>>>  All,
>> >> >>>>>>>>>  I recently ditched my attempts to port Python 2.7.8 to
>> >> >>>>>>>>> Android
>> >> >>>>>>>>> in
>> >> >>>>>>>>>  favor of Python 3.4.2.  Unfortunately, after using the same
>> >> >>>>>>>>> configure
>> >> >>>>>>>>>  options in the same environment, and modifying the setup.py
>> >> >>>>>>>>> as
>> >> >>>>>>>>> needed,
>> >> >>>>>>>>>  the newly built binary throws a segfault when the
>> >> >>>>>>>>> generate-posix-vars
>> >> >>>>>>>>>  portion of the build is reached...and when it is run as well
>> >> >>>>>>>>> (i.e.
>> >> >>>>>>>>>  ./python --help, ./python -E -S -m sysconfig, or similar)
>> >> >>>>>>>>>
>> >> >>>>>>>>>  I took a strace of ./python, however I'm a bit lost when
>> >> >>>>>>>>> reviewing
>> >> >>>>>>>>> it.
>> >> >>>>>>>>>  Any ideas as to what may be going on...i.e. why Python 2.7
>> >> >>>>>>>>> works but
>> >> >>>>>>>>>  3.x throws a segfault?
>> >> >>>>>>>>>
>> >> >>>>>>>>>  Thanks in advance,
>> >> >>>>>>>>>  Cyd
>> >> >>>>>>>>> ________________________________
>> >> >>>>>>>>>
>> >> >>>>>>>>>  Python-Dev mailing list
>> >> >>>>>>>>>
>> >> >>>>>>>>> Python-Dev at python.org
>> >> >>>>>>>>>  https://mail.python.org/mailman/listinfo/python-dev
>> >> >>>>>>>>>  Unsubscribe:
>> >> >>>>>>>>>
>> >> >>>>>>>>>
>> >> >>>>>>>>>
>> >> >>>>>>>>> https://mail.python.org/mailman/options/python-dev/guido%40python.org
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>
>> >> >>>>>>>>  --
>> >> >>>>>>>>  --Guido van Rossum (python.org/~guido)
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>>  --
>> >> >>>>>>  --Guido van Rossum (python.org/~guido)
>> >> >>>>>>
>> >> >>>>>> ________________________________
>> >> >>>>>>
>> >> >>>>>>  Python-Dev mailing list
>> >> >>>>>>  Python-Dev at python.org
>> >> >>>>>>  https://mail.python.org/mailman/listinfo/python-dev
>> >> >>>>>>  Unsubscribe:
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>> https://mail.python.org/mailman/options/python-dev/rymg19%40gmail.com
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>  --
>> >> >>>>>  Ryan
>> >> >>>>>  If anybody ever asks me why I prefer C++ to C, my answer will be
>> >> >>>>> simple:
>> >> >>>>>  "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think
>> >> >>>>> that was
>> >> >>>>>  nul-terminated."
>> >> >>>>>  Personal reality distortion fields are immune to contradictory
>> >> >>>>> evidence.
>> >> >>>>> -
>> >> >>>>>  srean
>> >> >>>>>  Check out my website: http://kirbyfan64.github.io/
>> >> >>>
>> >> >>>
>> >> >>> --
>> >> >>> Sent from my Android phone with K-9 Mail. Please excuse my brevity.
>> >> >>> Check out my website: http://kirbyfan64.github.io/
>> >
>> >
>> >
>> >
>> > --
>> > Ryan
>> > If anybody ever asks me why I prefer C++ to C, my answer will be simple:
>> > "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was
>> > nul-terminated."
>> > Personal reality distortion fields are immune to contradictory evidence.
>> > -
>> > srean
>> > Check out my website: http://kirbyfan64.github.io/
>
>
>
>
> --
> Ryan
> If anybody ever asks me why I prefer C++ to C, my answer will be simple:
> "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was
> nul-terminated."
> Personal reality distortion fields are immune to contradictory evidence. -
> srean
> Check out my website: http://kirbyfan64.github.io/


More information about the Python-Dev mailing list